| 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 |