mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 23:19:47 +00:00
56e5655353
Change-Id: Iaeb2152d47df05434ab470901900da56cae7e792 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196125 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
154 lines
4 KiB
Dart
154 lines
4 KiB
Dart
// Copyright (c) 2018, 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.
|
|
|
|
import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
|
|
import 'package:test/test.dart';
|
|
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
|
|
|
import 'server_abstract.dart';
|
|
|
|
void main() {
|
|
defineReflectiveSuite(() {
|
|
defineReflectiveTests(ReferencesTest);
|
|
});
|
|
}
|
|
|
|
@reflectiveTest
|
|
class ReferencesTest extends AbstractLspAnalysisServerTest {
|
|
Future<void> test_acrossFiles_includeDeclaration() async {
|
|
final mainContents = '''
|
|
import 'referenced.dart';
|
|
|
|
main() {
|
|
[[foo]]();
|
|
}
|
|
''';
|
|
|
|
final referencedContents = '''
|
|
/// Ensure the function is on a line that
|
|
/// does not exist in the mainContents file
|
|
/// to ensure we're translating offsets to line/col
|
|
/// using the correct file's LineInfo
|
|
/// ...
|
|
/// ...
|
|
/// ...
|
|
/// ...
|
|
/// ...
|
|
[[^foo]]() {}
|
|
''';
|
|
|
|
final referencedFileUri =
|
|
Uri.file(join(projectFolderPath, 'lib', 'referenced.dart'));
|
|
|
|
await initialize();
|
|
await openFile(mainFileUri, withoutMarkers(mainContents));
|
|
await openFile(referencedFileUri, withoutMarkers(referencedContents));
|
|
final res = await getReferences(
|
|
referencedFileUri,
|
|
positionFromMarker(referencedContents),
|
|
includeDeclarations: true,
|
|
);
|
|
|
|
// Ensure both the reference and the declaration are included.
|
|
expect(res, hasLength(2));
|
|
expect(
|
|
res,
|
|
contains(Location(
|
|
uri: mainFileUri.toString(),
|
|
range: rangeFromMarkers(mainContents))));
|
|
expect(
|
|
res,
|
|
contains(Location(
|
|
uri: referencedFileUri.toString(),
|
|
range: rangeFromMarkers(referencedContents))));
|
|
}
|
|
|
|
Future<void> test_acrossFiles_withoutDeclaration() async {
|
|
final mainContents = '''
|
|
import 'referenced.dart';
|
|
|
|
main() {
|
|
[[foo]]();
|
|
}
|
|
''';
|
|
|
|
final referencedContents = '''
|
|
/// Ensure the function is on a line that
|
|
/// does not exist in the mainContents file
|
|
/// to ensure we're translating offsets to line/col
|
|
/// using the correct file's LineInfo
|
|
/// ...
|
|
/// ...
|
|
/// ...
|
|
/// ...
|
|
/// ...
|
|
^foo() {}
|
|
''';
|
|
|
|
final referencedFileUri =
|
|
Uri.file(join(projectFolderPath, 'lib', 'referenced.dart'));
|
|
|
|
await initialize();
|
|
await openFile(mainFileUri, withoutMarkers(mainContents));
|
|
await openFile(referencedFileUri, withoutMarkers(referencedContents));
|
|
final res = await getReferences(
|
|
referencedFileUri, positionFromMarker(referencedContents));
|
|
|
|
expect(res, hasLength(1));
|
|
var loc = res.single;
|
|
expect(loc.range, equals(rangeFromMarkers(mainContents)));
|
|
expect(loc.uri, equals(mainFileUri.toString()));
|
|
}
|
|
|
|
Future<void> test_nonDartFile() async {
|
|
newFile(pubspecFilePath, content: simplePubspecContent);
|
|
await initialize();
|
|
|
|
final res = await getReferences(pubspecFileUri, startOfDocPos);
|
|
expect(res, isEmpty);
|
|
}
|
|
|
|
Future<void> test_singleFile_withoutDeclaration() async {
|
|
final contents = '''
|
|
f^oo() {
|
|
[[foo]]();
|
|
}
|
|
''';
|
|
|
|
await initialize();
|
|
await openFile(mainFileUri, withoutMarkers(contents));
|
|
final res = await getReferences(mainFileUri, positionFromMarker(contents));
|
|
|
|
expect(res, hasLength(1));
|
|
expect(
|
|
res,
|
|
contains(
|
|
Location(
|
|
uri: mainFileUri.toString(), range: rangeFromMarkers(contents)),
|
|
),
|
|
);
|
|
}
|
|
|
|
Future<void> test_unopenFile() async {
|
|
final contents = '''
|
|
f^oo() {
|
|
[[foo]]();
|
|
}
|
|
''';
|
|
|
|
newFile(mainFilePath, content: withoutMarkers(contents));
|
|
await initialize();
|
|
final res = await getReferences(mainFileUri, positionFromMarker(contents));
|
|
|
|
expect(res, hasLength(1));
|
|
expect(
|
|
res,
|
|
contains(
|
|
Location(
|
|
uri: mainFileUri.toString(), range: rangeFromMarkers(contents)),
|
|
),
|
|
);
|
|
}
|
|
}
|