Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: pkg/js_ast/test/printer_callback_test.dart

Issue 1196433002: Create and test source mapping for invocations. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Rebased Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/js_ast/lib/src/printer.dart ('k') | tests/compiler/dart2js/memory_source_file_helper.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // Note: This test relies on LF line endings in the source file. 5 // Note: This test relies on LF line endings in the source file.
6 6
7 // Test that JS printer callbacks occur when expected. 7 // Test that JS printer callbacks occur when expected.
8 8
9 library js_ast.printer.callback_test; 9 library js_ast.printer.callback_test;
10 10
11 import 'package:js_ast/js_ast.dart'; 11 import 'package:js_ast/js_ast.dart';
12 import 'package:unittest/unittest.dart'; 12 import 'package:unittest/unittest.dart';
13 13
14 enum TestMode { 14 enum TestMode {
15 INPUT,
15 NONE, 16 NONE,
16 ENTER, 17 ENTER,
17 DELIMITER, 18 DELIMITER,
18 EXIT, 19 EXIT,
19 } 20 }
20 21
21 const DATA = const [ 22 class TestCase {
22 const { 23 final Map<TestMode, String> data;
24
25 /// Map from template names to the inserted values.
26 final Map<String, String> environment;
27
28 const TestCase(
29 this.data,
30 [this.environment = const {}]);
31 }
32
33 const List<TestCase> DATA = const <TestCase>[
34 const TestCase(const {
23 TestMode.NONE: """ 35 TestMode.NONE: """
24 function(a, b) { 36 function(a, b) {
25 return null; 37 return null;
26 }""", 38 }""",
27 TestMode.ENTER: """ 39 TestMode.ENTER: """
28 @0function(@1a, @2b) @3{ 40 @0function(@1a, @2b) @3{
29 @4return @5null; 41 @4return @5null;
30 }""", 42 }""",
31 TestMode.DELIMITER: """ 43 TestMode.DELIMITER: """
32 function(a, b) { 44 function(a, b) {
33 return null; 45 return null;
34 @0}""", 46 @0}""",
35 TestMode.EXIT: """ 47 TestMode.EXIT: """
36 function(a@1, b@2) { 48 function(a@1, b@2) {
37 return null@5; 49 return null@5;
38 @4}@3@0""" 50 @4}@3@0"""
39 }, 51 }),
40 52
41 const { 53 const TestCase(const {
42 TestMode.NONE: """ 54 TestMode.NONE: """
43 function() { 55 function() {
44 if (true) { 56 if (true) {
45 foo1(); 57 foo1();
46 foo2(); 58 foo2();
47 } else { 59 } else if (false) {
48 bar1(); 60 bar1();
49 bar2(); 61 bar2();
50 } 62 }
51 while (false) { 63 while (false) {
52 baz3(); 64 baz3();
53 baz4(); 65 baz4();
54 } 66 }
55 }""", 67 }""",
56 TestMode.ENTER: """ 68 TestMode.ENTER: """
57 @0function() @1{ 69 @0function() @1{
58 @2if (@3true) @4{ 70 @2if (@3true) @4{
59 @5@6@7foo1(); 71 @5@6@7foo1();
60 @8@9@10foo2(); 72 @8@9@10foo2();
61 } else @11{ 73 } else @11if (@12false) @13{
62 @12@13@14bar1(); 74 @14@15@16bar1();
63 @15@16@17bar2(); 75 @17@18@19bar2();
64 } 76 }
65 @18while (@19false) @20{ 77 @20while (@21false) @22{
66 @21@22@23baz3(); 78 @23@24@25baz3();
67 @24@25@26baz4(); 79 @26@27@28baz4();
68 } 80 }
69 }""", 81 }""",
70 TestMode.DELIMITER: """ 82 TestMode.DELIMITER: """
71 function() { 83 function() {
72 if (true) { 84 if (true) {
73 foo1(); 85 foo1();
74 foo2(); 86 foo2();
75 } else { 87 } else if (false) {
76 bar1(); 88 bar1();
77 bar2(); 89 bar2();
78 } 90 }
79 while (false) { 91 while (false) {
80 baz3(); 92 baz3();
81 baz4(); 93 baz4();
82 } 94 }
83 @0}""", 95 @0}""",
84 TestMode.EXIT: """ 96 TestMode.EXIT: """
85 function() { 97 function() {
86 if (true@3) { 98 if (true@3) {
87 foo1@7()@6; 99 foo1@7()@6;
88 @5 foo2@10()@9; 100 @5 foo2@10()@9;
89 @8 }@4 else { 101 @8 }@4 else if (false@12) {
90 bar1@14()@13; 102 bar1@16()@15;
91 @12 bar2@17()@16; 103 @14 bar2@19()@18;
92 @15 }@11 104 @17 }@13
93 @2 while (false@19) { 105 @11@2 while (false@21) {
94 baz3@23()@22; 106 baz3@25()@24;
95 @21 baz4@26()@25; 107 @23 baz4@28()@27;
96 @24 }@20 108 @26 }@22
97 @18}@1@0""", 109 @20}@1@0""",
98 }, 110 }),
111
112 const TestCase(const {
113 TestMode.NONE: """
114 function() {
115 function foo() {
116 }
117 }""",
118 TestMode.ENTER: """
119 @0function() @1{
120 @2@3function @4foo() @5{
121 }
122 }""",
123 TestMode.DELIMITER: """
124 function() {
125 function foo() {
126 @3}
127 @0}""",
128 TestMode.EXIT: """
129 function() {
130 function foo@4() {
131 }@5@3
132 @2}@1@0"""
133 }),
134
135 const TestCase(const {
136 TestMode.INPUT: """
137 function() {
138 a['b'];
139 [1,, 2];
140 }""",
141 TestMode.NONE: """
142 function() {
143 a.b;
144 [1,, 2];
145 }""",
146 TestMode.ENTER: """
147 @0function() @1{
148 @2@3@4a.@5b;
149 @6@7[@81,@9, @102];
150 }""",
151 TestMode.DELIMITER: """
152 function() {
153 a.b;
154 [1,, 2];
155 @0}""",
156 TestMode.EXIT: """
157 function() {
158 a@4.b@5@3;
159 @2 [1@8,,@9 2@10]@7;
160 @6}@1@0""",
161 }),
162
163 const TestCase(const {
164 TestMode.INPUT: "a.#nameTemplate",
165 TestMode.NONE: "a.nameValue",
166 TestMode.ENTER: "@0@1a.@2nameValue",
167 TestMode.DELIMITER: "a.nameValue",
168 TestMode.EXIT: "a@1.nameValue@2@0",
169 }, const {'nameTemplate': 'nameValue'}),
99 ]; 170 ];
100 171
101 void check(Map<TestMode, String> map) { 172 class FixedName extends Name {
102 String code = map[TestMode.NONE]; 173 final String name;
174
175 FixedName(this.name);
176
177 @override
178 int compareTo(other) => 0;
179 }
180
181 void check(TestCase testCase) {
182 Map<TestMode, String> map = testCase.data;
183 String code = map[TestMode.INPUT];
184 if (code == null) {
185 // Input is the same as output.
186 code = map[TestMode.NONE];
187 }
103 JavaScriptPrintingOptions options = new JavaScriptPrintingOptions(); 188 JavaScriptPrintingOptions options = new JavaScriptPrintingOptions();
104 Node node = js.parseForeignJS(code).instantiate({}); 189 Map arguments = {};
190 testCase.environment.forEach((String name, String value) {
191 arguments[name] = new FixedName(value);
192 });
193 Node node = js.parseForeignJS(code).instantiate(arguments);
105 map.forEach((TestMode mode, String expectedOutput) { 194 map.forEach((TestMode mode, String expectedOutput) {
195 if (mode == TestMode.INPUT) return;
106 Context context = new Context(mode); 196 Context context = new Context(mode);
107 new Printer(options, context).visit(node); 197 new Printer(options, context).visit(node);
108 expect(context.getText(), equals(expectedOutput), 198 expect(context.getText(), equals(expectedOutput),
109 reason: "Unexpected output for $code in $mode"); 199 reason: "Unexpected output for $code in $mode");
110 }); 200 });
111 } 201 }
112 202
113 class Context extends SimpleJavaScriptPrintingContext { 203 class Context extends SimpleJavaScriptPrintingContext {
114 final TestMode mode; 204 final TestMode mode;
115 final Map<Node, int> idMap = {}; 205 final Map<Node, int> idMap = {};
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 if (offset < text.length) { 244 if (offset < text.length) {
155 sb.write(text.substring(offset)); 245 sb.write(text.substring(offset));
156 } 246 }
157 return sb.toString(); 247 return sb.toString();
158 } 248 }
159 } 249 }
160 250
161 void main() { 251 void main() {
162 DATA.forEach(check); 252 DATA.forEach(check);
163 } 253 }
OLDNEW
« no previous file with comments | « pkg/js_ast/lib/src/printer.dart ('k') | tests/compiler/dart2js/memory_source_file_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698