OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 library test.end2end_test; | 5 library test.end2end_test; |
6 | 6 |
7 import 'package:unittest/unittest.dart'; | 7 import 'package:unittest/unittest.dart'; |
8 import 'package:source_maps/source_maps.dart'; | 8 import 'package:source_maps/source_maps.dart'; |
| 9 import 'package:source_span/source_span.dart'; |
9 import 'common.dart'; | 10 import 'common.dart'; |
10 | 11 |
11 main() { | 12 main() { |
12 test('end-to-end setup', () { | 13 test('end-to-end setup', () { |
13 expect(inputVar1.text, 'longVar1'); | 14 expect(inputVar1.text, 'longVar1'); |
14 expect(inputFunction.text, 'longName'); | 15 expect(inputFunction.text, 'longName'); |
15 expect(inputVar2.text, 'longVar2'); | 16 expect(inputVar2.text, 'longVar2'); |
16 expect(inputVar1NoSymbol.text, 'longVar1'); | 17 expect(inputVar1NoSymbol.text, 'longVar1'); |
17 expect(inputFunctionNoSymbol.text, 'longName'); | 18 expect(inputFunctionNoSymbol.text, 'longName'); |
18 expect(inputVar2NoSymbol.text, 'longVar2'); | 19 expect(inputVar2NoSymbol.text, 'longVar2'); |
19 expect(inputExpr.text, 'longVar1 + longVar2'); | 20 expect(inputExpr.text, 'longVar1 + longVar2'); |
20 | 21 |
21 expect(outputVar1.text, 'x'); | 22 expect(outputVar1.text, 'x'); |
22 expect(outputFunction.text, 'f'); | 23 expect(outputFunction.text, 'f'); |
23 expect(outputVar2.text, 'y'); | 24 expect(outputVar2.text, 'y'); |
24 expect(outputVar1NoSymbol.text, 'x'); | 25 expect(outputVar1NoSymbol.text, 'x'); |
25 expect(outputFunctionNoSymbol.text, 'f'); | 26 expect(outputFunctionNoSymbol.text, 'f'); |
26 expect(outputVar2NoSymbol.text, 'y'); | 27 expect(outputVar2NoSymbol.text, 'y'); |
27 expect(outputExpr.text, 'x + y'); | 28 expect(outputExpr.text, 'x + y'); |
28 }); | 29 }); |
29 | 30 |
30 test('build + parse', () { | 31 test('build + parse', () { |
31 var map = (new SourceMapBuilder() | 32 var map = (new SourceMapBuilder() |
32 ..addSpan(inputVar1, outputVar1) | 33 ..addSpan(inputVar1, outputVar1) |
33 ..addSpan(inputFunction, outputFunction) | 34 ..addSpan(inputFunction, outputFunction) |
34 ..addSpan(inputVar2, outputVar2) | 35 ..addSpan(inputVar2, outputVar2) |
35 ..addSpan(inputExpr, outputExpr)) | 36 ..addSpan(inputExpr, outputExpr)) |
36 .build(output.url); | 37 .build(output.url.toString()); |
37 var mapping = parseJson(map); | 38 var mapping = parseJson(map); |
38 check(outputVar1, mapping, inputVar1, false); | 39 check(outputVar1, mapping, inputVar1, false); |
39 check(outputVar2, mapping, inputVar2, false); | 40 check(outputVar2, mapping, inputVar2, false); |
40 check(outputFunction, mapping, inputFunction, false); | 41 check(outputFunction, mapping, inputFunction, false); |
41 check(outputExpr, mapping, inputExpr, false); | 42 check(outputExpr, mapping, inputExpr, false); |
42 }); | 43 }); |
43 | 44 |
44 test('build + parse - no symbols', () { | 45 test('build + parse - no symbols', () { |
45 var map = (new SourceMapBuilder() | 46 var map = (new SourceMapBuilder() |
46 ..addSpan(inputVar1NoSymbol, outputVar1NoSymbol) | 47 ..addSpan(inputVar1NoSymbol, outputVar1NoSymbol) |
47 ..addSpan(inputFunctionNoSymbol, outputFunctionNoSymbol) | 48 ..addSpan(inputFunctionNoSymbol, outputFunctionNoSymbol) |
48 ..addSpan(inputVar2NoSymbol, outputVar2NoSymbol) | 49 ..addSpan(inputVar2NoSymbol, outputVar2NoSymbol) |
49 ..addSpan(inputExpr, outputExpr)) | 50 ..addSpan(inputExpr, outputExpr)) |
50 .build(output.url); | 51 .build(output.url.toString()); |
51 var mapping = parseJson(map); | 52 var mapping = parseJson(map); |
52 check(outputVar1NoSymbol, mapping, inputVar1NoSymbol, false); | 53 check(outputVar1NoSymbol, mapping, inputVar1NoSymbol, false); |
53 check(outputVar2NoSymbol, mapping, inputVar2NoSymbol, false); | 54 check(outputVar2NoSymbol, mapping, inputVar2NoSymbol, false); |
54 check(outputFunctionNoSymbol, mapping, inputFunctionNoSymbol, false); | 55 check(outputFunctionNoSymbol, mapping, inputFunctionNoSymbol, false); |
55 check(outputExpr, mapping, inputExpr, false); | 56 check(outputExpr, mapping, inputExpr, false); |
56 }); | 57 }); |
57 | 58 |
58 test('build + parse, repeated entries', () { | 59 test('build + parse, repeated entries', () { |
59 var map = (new SourceMapBuilder() | 60 var map = (new SourceMapBuilder() |
60 ..addSpan(inputVar1, outputVar1) | 61 ..addSpan(inputVar1, outputVar1) |
61 ..addSpan(inputVar1, outputVar1) | 62 ..addSpan(inputVar1, outputVar1) |
62 ..addSpan(inputFunction, outputFunction) | 63 ..addSpan(inputFunction, outputFunction) |
63 ..addSpan(inputFunction, outputFunction) | 64 ..addSpan(inputFunction, outputFunction) |
64 ..addSpan(inputVar2, outputVar2) | 65 ..addSpan(inputVar2, outputVar2) |
65 ..addSpan(inputVar2, outputVar2) | 66 ..addSpan(inputVar2, outputVar2) |
66 ..addSpan(inputExpr, outputExpr) | 67 ..addSpan(inputExpr, outputExpr) |
67 ..addSpan(inputExpr, outputExpr)) | 68 ..addSpan(inputExpr, outputExpr)) |
68 .build(output.url); | 69 .build(output.url.toString()); |
69 var mapping = parseJson(map); | 70 var mapping = parseJson(map); |
70 check(outputVar1, mapping, inputVar1, false); | 71 check(outputVar1, mapping, inputVar1, false); |
71 check(outputVar2, mapping, inputVar2, false); | 72 check(outputVar2, mapping, inputVar2, false); |
72 check(outputFunction, mapping, inputFunction, false); | 73 check(outputFunction, mapping, inputFunction, false); |
73 check(outputExpr, mapping, inputExpr, false); | 74 check(outputExpr, mapping, inputExpr, false); |
74 }); | 75 }); |
75 | 76 |
76 test('build + parse - no symbols, repeated entries', () { | 77 test('build + parse - no symbols, repeated entries', () { |
77 var map = (new SourceMapBuilder() | 78 var map = (new SourceMapBuilder() |
78 ..addSpan(inputVar1NoSymbol, outputVar1NoSymbol) | 79 ..addSpan(inputVar1NoSymbol, outputVar1NoSymbol) |
79 ..addSpan(inputVar1NoSymbol, outputVar1NoSymbol) | 80 ..addSpan(inputVar1NoSymbol, outputVar1NoSymbol) |
80 ..addSpan(inputFunctionNoSymbol, outputFunctionNoSymbol) | 81 ..addSpan(inputFunctionNoSymbol, outputFunctionNoSymbol) |
81 ..addSpan(inputFunctionNoSymbol, outputFunctionNoSymbol) | 82 ..addSpan(inputFunctionNoSymbol, outputFunctionNoSymbol) |
82 ..addSpan(inputVar2NoSymbol, outputVar2NoSymbol) | 83 ..addSpan(inputVar2NoSymbol, outputVar2NoSymbol) |
83 ..addSpan(inputVar2NoSymbol, outputVar2NoSymbol) | 84 ..addSpan(inputVar2NoSymbol, outputVar2NoSymbol) |
84 ..addSpan(inputExpr, outputExpr)) | 85 ..addSpan(inputExpr, outputExpr)) |
85 .build(output.url); | 86 .build(output.url.toString()); |
86 var mapping = parseJson(map); | 87 var mapping = parseJson(map); |
87 check(outputVar1NoSymbol, mapping, inputVar1NoSymbol, false); | 88 check(outputVar1NoSymbol, mapping, inputVar1NoSymbol, false); |
88 check(outputVar2NoSymbol, mapping, inputVar2NoSymbol, false); | 89 check(outputVar2NoSymbol, mapping, inputVar2NoSymbol, false); |
89 check(outputFunctionNoSymbol, mapping, inputFunctionNoSymbol, false); | 90 check(outputFunctionNoSymbol, mapping, inputFunctionNoSymbol, false); |
90 check(outputExpr, mapping, inputExpr, false); | 91 check(outputExpr, mapping, inputExpr, false); |
91 }); | 92 }); |
92 | 93 |
93 test('build + parse with file', () { | 94 test('build + parse with file', () { |
94 var json = (new SourceMapBuilder() | 95 var json = (new SourceMapBuilder() |
95 ..addSpan(inputVar1, outputVar1) | 96 ..addSpan(inputVar1, outputVar1) |
96 ..addSpan(inputFunction, outputFunction) | 97 ..addSpan(inputFunction, outputFunction) |
97 ..addSpan(inputVar2, outputVar2) | 98 ..addSpan(inputVar2, outputVar2) |
98 ..addSpan(inputExpr, outputExpr)) | 99 ..addSpan(inputExpr, outputExpr)) |
99 .toJson(output.url); | 100 .toJson(output.url.toString()); |
100 var mapping = parse(json); | 101 var mapping = parse(json); |
101 check(outputVar1, mapping, inputVar1, true); | 102 check(outputVar1, mapping, inputVar1, true); |
102 check(outputVar2, mapping, inputVar2, true); | 103 check(outputVar2, mapping, inputVar2, true); |
103 check(outputFunction, mapping, inputFunction, true); | 104 check(outputFunction, mapping, inputFunction, true); |
104 check(outputExpr, mapping, inputExpr, true); | 105 check(outputExpr, mapping, inputExpr, true); |
105 }); | 106 }); |
106 | 107 |
107 test('printer projecting marks + parse', () { | 108 test('printer projecting marks + parse', () { |
108 var out = INPUT.replaceAll('long', '_s'); | 109 var out = INPUT.replaceAll('long', '_s'); |
109 var file = new SourceFile.text('output2.dart', out); | 110 var file = new SourceFile(out, url: 'output2.dart'); |
110 var printer = new Printer('output2.dart'); | 111 var printer = new Printer('output2.dart'); |
111 printer.mark(ispan(0, 0)); | 112 printer.mark(ispan(0, 0)); |
112 | 113 |
113 bool first = true; | 114 bool first = true; |
114 var segments = INPUT.split('long'); | 115 var segments = INPUT.split('long'); |
115 expect(segments.length, 6); | 116 expect(segments.length, 6); |
116 printer.add(segments[0], projectMarks: true); | 117 printer.add(segments[0], projectMarks: true); |
117 printer.mark(inputVar1); | 118 printer.mark(inputVar1); |
118 printer.add('_s'); | 119 printer.add('_s'); |
119 printer.add(segments[1], projectMarks: true); | 120 printer.add(segments[1], projectMarks: true); |
120 printer.mark(inputFunction); | 121 printer.mark(inputFunction); |
121 printer.add('_s'); | 122 printer.add('_s'); |
122 printer.add(segments[2], projectMarks: true); | 123 printer.add(segments[2], projectMarks: true); |
123 printer.mark(inputVar2); | 124 printer.mark(inputVar2); |
124 printer.add('_s'); | 125 printer.add('_s'); |
125 printer.add(segments[3], projectMarks: true); | 126 printer.add(segments[3], projectMarks: true); |
126 printer.mark(inputExpr); | 127 printer.mark(inputExpr); |
127 printer.add('_s'); | 128 printer.add('_s'); |
128 printer.add(segments[4], projectMarks: true); | 129 printer.add(segments[4], projectMarks: true); |
129 printer.add('_s'); | 130 printer.add('_s'); |
130 printer.add(segments[5], projectMarks: true); | 131 printer.add(segments[5], projectMarks: true); |
131 | 132 |
132 expect(printer.text, out); | 133 expect(printer.text, out); |
133 | 134 |
134 var mapping = parse(printer.map); | 135 var mapping = parse(printer.map); |
135 checkHelper(Span inputSpan, int adjustment) { | 136 checkHelper(SourceMapSpan inputSpan, int adjustment) { |
136 var start = inputSpan.start.offset - adjustment; | 137 var start = inputSpan.start.offset - adjustment; |
137 var end = (inputSpan.end.offset - adjustment) - 2; | 138 var end = (inputSpan.end.offset - adjustment) - 2; |
138 var span = new FileSpan(file, start, end, inputSpan.isIdentifier); | 139 var span = new SourceMapFileSpan(file.span(start, end), |
| 140 isIdentifier: inputSpan.isIdentifier); |
139 check(span, mapping, inputSpan, true); | 141 check(span, mapping, inputSpan, true); |
140 } | 142 } |
141 | 143 |
142 checkHelper(inputVar1, 0); | 144 checkHelper(inputVar1, 0); |
143 checkHelper(inputFunction, 2); | 145 checkHelper(inputFunction, 2); |
144 checkHelper(inputVar2, 4); | 146 checkHelper(inputVar2, 4); |
145 checkHelper(inputExpr, 6); | 147 checkHelper(inputExpr, 6); |
146 | 148 |
147 // We projected correctly lines that have no mappings | 149 // We projected correctly lines that have no mappings |
148 check(new FileSpan(file, 66, 66, false), mapping, ispan(45, 45), true); | 150 check(file.span(66, 66), mapping, ispan(45, 45), true); |
149 check(new FileSpan(file, 63, 64, false), mapping, ispan(45, 45), true); | 151 check(file.span(63, 64), mapping, ispan(45, 45), true); |
150 check(new FileSpan(file, 68, 68, false), mapping, ispan(70, 70), true); | 152 check(file.span(68, 68), mapping, ispan(70, 70), true); |
151 check(new FileSpan(file, 71, 71, false), mapping, ispan(70, 70), true); | 153 check(file.span(71, 71), mapping, ispan(70, 70), true); |
152 | 154 |
153 // Start of the last line | 155 // Start of the last line |
154 var oOffset = out.length - 2; | 156 var oOffset = out.length - 2; |
155 var iOffset = INPUT.length - 2; | 157 var iOffset = INPUT.length - 2; |
156 check(new FileSpan(file, oOffset, oOffset, false), mapping, | 158 check(file.span(oOffset, oOffset), mapping, ispan(iOffset, iOffset), true); |
157 ispan(iOffset, iOffset), true); | 159 check(file.span(oOffset + 1, oOffset + 1), mapping, |
158 check(new FileSpan(file, oOffset + 1, oOffset + 1, false), mapping, | |
159 ispan(iOffset, iOffset), true); | 160 ispan(iOffset, iOffset), true); |
160 }); | 161 }); |
161 } | 162 } |
OLD | NEW |