// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
// for details. All rights reserved. Use of this source code is governed by a | |
// BSD-style license that can be found in the LICENSE file. | |
// Unittest for the [LineColumnCollector]. | |
import 'package:expect/expect.dart'; | |
import 'package:compiler/src/io/code_output.dart'; | |
import 'package:compiler/src/io/line_column_provider.dart'; | |
import 'output_collector.dart'; | |
test(List events, Map<int, List<int>> expectedPositions) { | |
BufferedEventSink sink = new BufferedEventSink(); | |
LineColumnProvider lineColumnProvider = new LineColumnCollector(); | |
CodeOutput output = new StreamCodeOutput(sink, [lineColumnProvider]); | |
for (var event in events) { | |
if (event is String) { | |
output.add(event); | |
} else if (event is CodeBuffer) { | |
output.addBuffer(event); | |
} | |
} | |
output.close(); | |
expectedPositions.forEach((int offset, List<int> expectedPosition) { | |
if (expectedPosition == null) { | |
Expect.throws(() => lineColumnProvider.getLine(offset), | |
(e) => true, | |
'Expected out-of-bounds offset: $offset\n' | |
'text:"""${sink.text}"""\n' | |
'lineColumnProvider:$lineColumnProvider'); | |
} else { | |
int line = lineColumnProvider.getLine(offset); | |
int column = lineColumnProvider.getColumn(line, offset); | |
Expect.equals(expectedPosition[0], line, | |
'Unexpected result: $offset -> $expectedPosition = [$line,$column]\n' | |
'text:"""${sink.text}"""\n' | |
'lineColumnProvider:$lineColumnProvider'); | |
Expect.equals(expectedPosition[1], column, | |
'Unexpected result: $offset -> $expectedPosition = [$line,$column]\n' | |
'text:"""${sink.text}"""\n' | |
'lineColumnProvider:$lineColumnProvider'); | |
} | |
}); | |
} | |
main() { | |
test([""], {0: [0, 0], 1: null}); | |
test([" "], {0: [0, 0], 1: [0, 1], 2: null}); | |
test(["\n "], {0: [0, 0], 1: [1, 0], 2: [1, 1], 3: null}); | |
Map positions = {0: [0, 0], | |
1: [0, 1], | |
2: [1, 0], | |
3: [1, 1], | |
4: [2, 0], | |
5: [2, 1], | |
6: null}; | |
test(["a\nb\nc"], positions); | |
test(["a", "\nb\nc"], positions); | |
test(["a", "\n", "b\nc"], positions); | |
CodeBuffer buffer1 = new CodeBuffer(); | |
buffer1.add("a\nb\nc"); | |
test([buffer1], positions); | |
CodeBuffer buffer2 = new CodeBuffer(); | |
buffer2.add("\nb\nc"); | |
test(["a", buffer2], positions); | |
CodeBuffer buffer3 = new CodeBuffer(); | |
buffer3.add("a"); | |
test([buffer3, buffer2], positions); | |
CodeBuffer buffer4 = new CodeBuffer(); | |
buffer4.addBuffer(buffer3); | |
test([buffer4, buffer2], positions); | |
} |