Index: tests/compiler/dart2js/js_parser_statements_test.dart |
diff --git a/tests/compiler/dart2js/js_parser_statements_test.dart b/tests/compiler/dart2js/js_parser_statements_test.dart |
index e9bc2e1b6e37b2794c90affc148b52b6a4334c46..2c124401f2ba0c52456d57c407d8d4ea6b3d8c3a 100644 |
--- a/tests/compiler/dart2js/js_parser_statements_test.dart |
+++ b/tests/compiler/dart2js/js_parser_statements_test.dart |
@@ -133,6 +133,7 @@ void main() { |
{'a': false, 'b': block12}, |
'{\n 1;\n 2;\n}'), |
+ |
testStatement('while (#) #', [eOne, block12], 'while (1) {\n 1;\n 2;\n}'), |
testStatement('while (#) #;', [eTrue, block12], |
'while (true) {\n 1;\n 2;\n}'), |
@@ -143,9 +144,9 @@ void main() { |
testStatement('while (#) #;', ['a', stm], |
'while (a)\n foo();'), |
- testStatement( |
- 'do { {print(1);} do while(true); while (false) } while ( true )', [], |
- ''' |
+ testStatement( |
+ 'do { {print(1);} do while(true); while (false) } while ( true )', [], |
+ ''' |
do { |
print(1); |
do |
@@ -323,7 +324,7 @@ switch (true) { |
'};'), |
testStatement('label: while (a) { label2: break label;}', [], |
- 'label:\n while (a) {\n label2:\n break label;\n }'), |
+ 'label:\n while (a)\n label2:\n break label;\n '), |
testStatement('var # = 3', ['x'], 'var x = 3;'), |
@@ -345,5 +346,58 @@ switch (true) { |
testStatement('try {} catch (#a) {}', |
{"a": new jsAst.VariableDeclaration('x')}, |
'try {\n} catch (x) {\n}'), |
+ |
+ // Test that braces around a single-statement block are removed by printer. |
+ testStatement('while (a) {foo()}', [], |
+ 'while (a)\n foo();'), |
+ testStatement('if (a) {foo();}', [], |
+ 'if (a)\n foo();'), |
+ testStatement('if (a) {foo();} else {foo2();}', [], |
+ 'if (a)\n foo();\nelse\n foo2();'), |
+ testStatement('if (a) foo(); else {foo2();}', [], |
+ 'if (a)\n foo();\nelse\n foo2();'), |
+ testStatement('do {foo();} while(a);', [], |
+ 'do\n foo();\nwhile (a);'), |
+ testStatement('label: {foo();}', [], |
+ 'label:\n foo();'), |
+ testStatement('for (var key in a) {foo();}', [], |
+ 'for (var key in a)\n foo();'), |
+ // `label: break label;` gives problems on IE. Test that it is avoided. |
+ testStatement('label: {break label;}', [], |
+ ';'), |
+ // This works on IE: |
+ testStatement('label: {label2: {break label;}}', [], |
+ 'label:\n label2:\n break label;\n'), |
+ // Test dangling else: |
+ testStatement('if (a) {if (b) {foo1();}} else {foo2();}', [], """ |
+if (a) { |
+ if (b) |
+ foo1(); |
+} else |
+ foo2();"""), |
+ testStatement('if (a) {if (b) {foo1();} else {foo2();}}', [], """ |
+if (a) |
+ if (b) |
+ foo1(); |
+ else |
+ foo2(); |
+"""), |
+ testStatement('if (a) {if (b) {foo1();} else {foo2();}} else {foo3();}', |
+ [], """ |
+if (a) |
+ if (b) |
+ foo1(); |
+ else |
+ foo2(); |
+else |
+ foo3();"""), |
+ testStatement('if (a) {while (true) if (b) {foo1();}} else {foo2();}', |
+ [], """ |
+if (a) { |
+ while (true) |
+ if (b) |
+ foo1(); |
+} else |
+ foo2();"""), |
])); |
} |