20faaa5d94
Change-Id: Ib18f554c1076f27a3f7c0df5a36410da41a1f467 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148784 Reviewed-by: Paul Berry <paulberry@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com>
115 lines
2.8 KiB
Dart
115 lines
2.8 KiB
Dart
// 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.
|
|
|
|
// @dart = 2.7
|
|
|
|
// Unittest for the [LocationCollector].
|
|
|
|
import 'package:compiler/src/io/code_output.dart';
|
|
import 'package:compiler/src/io/location_provider.dart';
|
|
import 'package:expect/expect.dart';
|
|
import 'package:kernel/ast.dart' show Location;
|
|
|
|
import '../helpers/output_collector.dart';
|
|
|
|
test(List events, Map<int, List<int>> expectedPositions) {
|
|
BufferedOutputSink sink = new BufferedOutputSink();
|
|
LocationCollector locationProvider = new LocationCollector();
|
|
CodeOutput output =
|
|
new StreamCodeOutput(sink, <CodeOutputListener>[locationProvider]);
|
|
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(
|
|
() => locationProvider.getLocation(offset),
|
|
(e) => true,
|
|
'Expected out-of-bounds offset: $offset\n'
|
|
'text:"""${sink.text}"""\n'
|
|
'locationProvider:$locationProvider');
|
|
} else {
|
|
Location location = locationProvider.getLocation(offset);
|
|
int line = location.line - 1;
|
|
int column = location.column - 1;
|
|
Expect.equals(
|
|
expectedPosition[0],
|
|
line,
|
|
'Unexpected result: $offset -> $expectedPosition = [$line,$column]\n'
|
|
'text:"""${sink.text}"""\n'
|
|
'locationProvider:$locationProvider');
|
|
Expect.equals(
|
|
expectedPosition[1],
|
|
column,
|
|
'Unexpected result: $offset -> $expectedPosition = [$line,$column]\n'
|
|
'text:"""${sink.text}"""\n'
|
|
'locationProvider:$locationProvider');
|
|
}
|
|
});
|
|
}
|
|
|
|
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<int, List<int>> 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);
|
|
}
|