// 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 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 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 test_nonDartFile() async { newFile(pubspecFilePath, content: simplePubspecContent); await initialize(); final res = await getReferences(pubspecFileUri, startOfDocPos); expect(res, isEmpty); } Future 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 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)), ), ); } }