// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'package:expect/expect.dart'; import 'package:js_ast/js_ast.dart'; class _DeferredStatement extends DeferredStatement { final Statement statement; _DeferredStatement(this.statement); } main() { // Defering a statement should not change how it prints. var undeferredStatement = js.statement('var x = 3'); var deferredStatement = _DeferredStatement(undeferredStatement); Expect.equals(DebugPrint(undeferredStatement), DebugPrint(deferredStatement)); // Printing a non-finalized DeferredStatement throws. Expect.throws(() => DebugPrint(_DeferredStatement(null))); // DeferredStatement with empty Block puts braces. Expect.equals(DebugPrint(_DeferredStatement(Block.empty())), '{\n}\n'); // DeferredStatement in block with nested block gets elided. Expect.equals( DebugPrint(Block([_DeferredStatement(Block.empty())])), '{\n}\n'); Expect.equals( DebugPrint(Block([ _DeferredStatement( _DeferredStatement(_DeferredStatement(Block.empty()))) ])), '{\n}\n'); // Nested Blocks in DeferredStatements are elided. Expect.equals( DebugPrint(Block([ _DeferredStatement(Block([ _DeferredStatement(Block.empty()), Block.empty(), Block([_DeferredStatement(Block.empty()), Block.empty()]), _DeferredStatement(_DeferredStatement(Block.empty())) ])) ])), '{\n}\n'); // DeferredStatement with empty Statement prints semicolon and a newline. Expect.equals(DebugPrint(_DeferredStatement(EmptyStatement())), ';\n'); }