| Index: pkg/js_ast/test/printer_callback_test.dart
|
| diff --git a/pkg/js_ast/test/printer_callback_test.dart b/pkg/js_ast/test/printer_callback_test.dart
|
| index b4ff074256cf273ad87d82e8bb522ba705322748..4d174458b9911ebfedd5bf135e4a34db242bdc8b 100644
|
| --- a/pkg/js_ast/test/printer_callback_test.dart
|
| +++ b/pkg/js_ast/test/printer_callback_test.dart
|
| @@ -12,14 +12,26 @@ import 'package:js_ast/js_ast.dart';
|
| import 'package:unittest/unittest.dart';
|
|
|
| enum TestMode {
|
| + INPUT,
|
| NONE,
|
| ENTER,
|
| DELIMITER,
|
| EXIT,
|
| }
|
|
|
| -const DATA = const [
|
| - const {
|
| +class TestCase {
|
| + final Map<TestMode, String> data;
|
| +
|
| + /// Map from template names to the inserted values.
|
| + final Map<String, String> environment;
|
| +
|
| + const TestCase(
|
| + this.data,
|
| + [this.environment = const {}]);
|
| +}
|
| +
|
| +const List<TestCase> DATA = const <TestCase>[
|
| + const TestCase(const {
|
| TestMode.NONE: """
|
| function(a, b) {
|
| return null;
|
| @@ -36,15 +48,15 @@ function(a, b) {
|
| function(a@1, b@2) {
|
| return null@5;
|
| @4}@3@0"""
|
| - },
|
| + }),
|
|
|
| - const {
|
| + const TestCase(const {
|
| TestMode.NONE: """
|
| function() {
|
| if (true) {
|
| foo1();
|
| foo2();
|
| - } else {
|
| + } else if (false) {
|
| bar1();
|
| bar2();
|
| }
|
| @@ -58,13 +70,13 @@ function() {
|
| @2if (@3true) @4{
|
| @5@6@7foo1();
|
| @8@9@10foo2();
|
| - } else @11{
|
| - @12@13@14bar1();
|
| - @15@16@17bar2();
|
| + } else @11if (@12false) @13{
|
| + @14@15@16bar1();
|
| + @17@18@19bar2();
|
| }
|
| - @18while (@19false) @20{
|
| - @21@22@23baz3();
|
| - @24@25@26baz4();
|
| + @20while (@21false) @22{
|
| + @23@24@25baz3();
|
| + @26@27@28baz4();
|
| }
|
| }""",
|
| TestMode.DELIMITER: """
|
| @@ -72,7 +84,7 @@ function() {
|
| if (true) {
|
| foo1();
|
| foo2();
|
| - } else {
|
| + } else if (false) {
|
| bar1();
|
| bar2();
|
| }
|
| @@ -86,23 +98,101 @@ function() {
|
| if (true@3) {
|
| foo1@7()@6;
|
| @5 foo2@10()@9;
|
| -@8 }@4 else {
|
| - bar1@14()@13;
|
| -@12 bar2@17()@16;
|
| -@15 }@11
|
| -@2 while (false@19) {
|
| - baz3@23()@22;
|
| -@21 baz4@26()@25;
|
| -@24 }@20
|
| -@18}@1@0""",
|
| - },
|
| +@8 }@4 else if (false@12) {
|
| + bar1@16()@15;
|
| +@14 bar2@19()@18;
|
| +@17 }@13
|
| +@11@2 while (false@21) {
|
| + baz3@25()@24;
|
| +@23 baz4@28()@27;
|
| +@26 }@22
|
| +@20}@1@0""",
|
| + }),
|
| +
|
| + const TestCase(const {
|
| + TestMode.NONE: """
|
| +function() {
|
| + function foo() {
|
| + }
|
| +}""",
|
| + TestMode.ENTER: """
|
| +@0function() @1{
|
| + @2@3function @4foo() @5{
|
| + }
|
| +}""",
|
| + TestMode.DELIMITER: """
|
| +function() {
|
| + function foo() {
|
| + @3}
|
| +@0}""",
|
| + TestMode.EXIT: """
|
| +function() {
|
| + function foo@4() {
|
| + }@5@3
|
| +@2}@1@0"""
|
| + }),
|
| +
|
| + const TestCase(const {
|
| + TestMode.INPUT: """
|
| +function() {
|
| + a['b'];
|
| + [1,, 2];
|
| +}""",
|
| + TestMode.NONE: """
|
| +function() {
|
| + a.b;
|
| + [1,, 2];
|
| +}""",
|
| + TestMode.ENTER: """
|
| +@0function() @1{
|
| + @2@3@4a.@5b;
|
| + @6@7[@81,@9, @102];
|
| +}""",
|
| + TestMode.DELIMITER: """
|
| +function() {
|
| + a.b;
|
| + [1,, 2];
|
| +@0}""",
|
| + TestMode.EXIT: """
|
| +function() {
|
| + a@4.b@5@3;
|
| +@2 [1@8,,@9 2@10]@7;
|
| +@6}@1@0""",
|
| + }),
|
| +
|
| + const TestCase(const {
|
| + TestMode.INPUT: "a.#nameTemplate",
|
| + TestMode.NONE: "a.nameValue",
|
| + TestMode.ENTER: "@0@1a.@2nameValue",
|
| + TestMode.DELIMITER: "a.nameValue",
|
| + TestMode.EXIT: "a@1.nameValue@2@0",
|
| + }, const {'nameTemplate': 'nameValue'}),
|
| ];
|
|
|
| -void check(Map<TestMode, String> map) {
|
| - String code = map[TestMode.NONE];
|
| +class FixedName extends Name {
|
| + final String name;
|
| +
|
| + FixedName(this.name);
|
| +
|
| + @override
|
| + int compareTo(other) => 0;
|
| +}
|
| +
|
| +void check(TestCase testCase) {
|
| + Map<TestMode, String> map = testCase.data;
|
| + String code = map[TestMode.INPUT];
|
| + if (code == null) {
|
| + // Input is the same as output.
|
| + code = map[TestMode.NONE];
|
| + }
|
| JavaScriptPrintingOptions options = new JavaScriptPrintingOptions();
|
| - Node node = js.parseForeignJS(code).instantiate({});
|
| + Map arguments = {};
|
| + testCase.environment.forEach((String name, String value) {
|
| + arguments[name] = new FixedName(value);
|
| + });
|
| + Node node = js.parseForeignJS(code).instantiate(arguments);
|
| map.forEach((TestMode mode, String expectedOutput) {
|
| + if (mode == TestMode.INPUT) return;
|
| Context context = new Context(mode);
|
| new Printer(options, context).visit(node);
|
| expect(context.getText(), equals(expectedOutput),
|
|
|