| Index: pkg/analysis_server/test/services/index/index_test.dart
|
| diff --git a/pkg/analysis_server/test/services/index/index_test.dart b/pkg/analysis_server/test/services/index/index_test.dart
|
| deleted file mode 100644
|
| index 4976177c553bf553597667d50153fc1ba32f6eef..0000000000000000000000000000000000000000
|
| --- a/pkg/analysis_server/test/services/index/index_test.dart
|
| +++ /dev/null
|
| @@ -1,380 +0,0 @@
|
| -// Copyright (c) 2016, 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 'dart:async';
|
| -
|
| -import 'package:analysis_server/src/services/index/index.dart';
|
| -import 'package:analyzer/dart/ast/ast.dart';
|
| -import 'package:analyzer/dart/element/element.dart';
|
| -import 'package:analyzer/src/generated/source.dart';
|
| -import 'package:analyzer/src/summary/idl.dart';
|
| -import 'package:test/test.dart';
|
| -import 'package:test_reflective_loader/test_reflective_loader.dart';
|
| -import 'package:typed_mock/typed_mock.dart';
|
| -
|
| -import '../../abstract_single_unit.dart';
|
| -
|
| -main() {
|
| - defineReflectiveSuite(() {
|
| - defineReflectiveTests(IndexTest);
|
| - });
|
| -}
|
| -
|
| -@reflectiveTest
|
| -class IndexTest extends AbstractSingleUnitTest {
|
| - Index index = createMemoryIndex();
|
| -
|
| - /**
|
| - * Return the [Location] with given properties, or fail.
|
| - */
|
| - Location findLocation(List<Location> locations, String libraryUri,
|
| - String unitUri, int offset, int length, bool isQualified) {
|
| - for (Location location in locations) {
|
| - if (location.libraryUri == libraryUri &&
|
| - location.unitUri == unitUri &&
|
| - location.offset == offset &&
|
| - location.length == length &&
|
| - location.isQualified == isQualified) {
|
| - return location;
|
| - }
|
| - }
|
| - fail('No at $offset with length $length qualified=$isQualified in\n'
|
| - '${locations.join('\n')}');
|
| - return null;
|
| - }
|
| -
|
| - /**
|
| - * Return the [Location] with given properties, or fail.
|
| - */
|
| - Location findLocationSource(
|
| - List<Location> locations, Source source, String search, bool isQualified,
|
| - {int length}) {
|
| - String code = source.contents.data;
|
| - int offset = code.indexOf(search);
|
| - expect(offset, isNonNegative, reason: 'Not found "$search" in\n$code');
|
| - length ??= getLeadingIdentifierLength(search);
|
| - String uri = source.uri.toString();
|
| - return findLocation(locations, uri, uri, offset, length, isQualified);
|
| - }
|
| -
|
| - /**
|
| - * Return the [Location] with given properties, or fail.
|
| - */
|
| - Location findLocationTest(
|
| - List<Location> locations, String search, bool isQualified,
|
| - {int length}) {
|
| - int offset = findOffset(search);
|
| - length ??= getLeadingIdentifierLength(search);
|
| - String testUri = testSource.uri.toString();
|
| - return findLocation(
|
| - locations, testUri, testUri, offset, length, isQualified);
|
| - }
|
| -
|
| - void setUp() {
|
| - super.setUp();
|
| - }
|
| -
|
| - void tearDown() {
|
| - super.tearDown();
|
| - index = null;
|
| - }
|
| -
|
| - test_getDefinedNames_classMember() async {
|
| - await _indexTestUnit('''
|
| -class A {
|
| - test() {}
|
| -}
|
| -class B {
|
| - int test = 1;
|
| - main() {
|
| - int test = 2;
|
| - }
|
| -}
|
| -''');
|
| - ClassElement classA = findElement('A');
|
| - ClassElement classB = findElement('B');
|
| - List<Location> locations = await index.getDefinedNames(
|
| - new RegExp(r'^test$'), IndexNameKind.classMember);
|
| - expect(locations, hasLength(2));
|
| - _assertHasDefinedName(locations, classA.methods[0]);
|
| - _assertHasDefinedName(locations, classB.fields[0]);
|
| - }
|
| -
|
| - test_getDefinedNames_topLevel() async {
|
| - await _indexTestUnit('''
|
| -class A {} // A
|
| -class B = Object with A;
|
| -typedef C();
|
| -D() {}
|
| -var E = null;
|
| -class NoMatchABCDE {}
|
| -''');
|
| - Element topA = findElement('A');
|
| - Element topB = findElement('B');
|
| - Element topC = findElement('C');
|
| - Element topD = findElement('D');
|
| - Element topE = findElement('E');
|
| - List<Location> locations = await index.getDefinedNames(
|
| - new RegExp(r'^[A-E]$'), IndexNameKind.topLevel);
|
| - expect(locations, hasLength(5));
|
| - _assertHasDefinedName(locations, topA);
|
| - _assertHasDefinedName(locations, topB);
|
| - _assertHasDefinedName(locations, topC);
|
| - _assertHasDefinedName(locations, topD);
|
| - _assertHasDefinedName(locations, topE);
|
| - }
|
| -
|
| - test_getDefinedNames_topLevel2() async {
|
| - await _indexTestUnit(
|
| - '''
|
| -class A {} // A
|
| -class B = Object with A;
|
| -class NoMatchABCDE {}
|
| -''',
|
| - declOnly: true);
|
| - Element topA = findElement('A');
|
| - Element topB = findElement('B');
|
| - List<Location> locations = await index.getDefinedNames(
|
| - new RegExp(r'^[A-E]$'), IndexNameKind.topLevel);
|
| - expect(locations, hasLength(2));
|
| - _assertHasDefinedName(locations, topA);
|
| - _assertHasDefinedName(locations, topB);
|
| - }
|
| -
|
| - test_getRelations_isExtendedBy() async {
|
| - await _indexTestUnit(r'''
|
| -class A {}
|
| -class B extends A {} // B
|
| -''');
|
| - Source source2 = await _indexUnit(
|
| - '/test2.dart',
|
| - r'''
|
| -import 'test.dart';
|
| -class C extends A {} // C
|
| -''');
|
| - ClassElement elementA = testUnitElement.getType('A');
|
| - List<Location> locations =
|
| - await index.getRelations(elementA, IndexRelationKind.IS_EXTENDED_BY);
|
| - findLocationTest(locations, 'A {} // B', false);
|
| - findLocationSource(locations, source2, 'A {} // C', false);
|
| - }
|
| -
|
| - test_getRelations_isReferencedBy() async {
|
| - await _indexTestUnit(r'''
|
| -main(int a, int b) {
|
| -}
|
| -''');
|
| - ClassElement intElement =
|
| - testUnitElement.context.typeProvider.intType.element;
|
| - List<Location> locations = await index.getRelations(
|
| - intElement, IndexRelationKind.IS_REFERENCED_BY);
|
| - findLocationTest(locations, 'int a', false);
|
| - findLocationTest(locations, 'int b', false);
|
| - }
|
| -
|
| - test_getUnresolvedMemberReferences_qualified_resolved() async {
|
| - await _indexTestUnit('''
|
| -class A {
|
| - var test; // A
|
| -}
|
| -main(A a) {
|
| - print(a.test);
|
| - a.test = 1;
|
| - a.test += 2;
|
| - a.test();
|
| -}
|
| -''');
|
| - List<Location> locations =
|
| - await index.getUnresolvedMemberReferences('test');
|
| - expect(locations, isEmpty);
|
| - }
|
| -
|
| - test_getUnresolvedMemberReferences_qualified_unresolved() async {
|
| - await _indexTestUnit('''
|
| -class A {
|
| - var test; // A
|
| -}
|
| -main(p) {
|
| - print(p.test);
|
| - p.test = 1;
|
| - p.test += 2;
|
| - p.test();
|
| - print(p.test2); // not requested
|
| -}
|
| -''');
|
| - List<Location> locations =
|
| - await index.getUnresolvedMemberReferences('test');
|
| - expect(locations, hasLength(4));
|
| - findLocationTest(locations, 'test);', true);
|
| - findLocationTest(locations, 'test = 1;', true);
|
| - findLocationTest(locations, 'test += 2;', true);
|
| - findLocationTest(locations, 'test();', true);
|
| - }
|
| -
|
| - test_getUnresolvedMemberReferences_unqualified_resolved() async {
|
| - await _indexTestUnit('''
|
| -class A {
|
| - var test;
|
| - m() {
|
| - print(test);
|
| - test = 1;
|
| - test += 2;
|
| - test();
|
| - }
|
| -}
|
| -''');
|
| - List<Location> locations =
|
| - await index.getUnresolvedMemberReferences('test');
|
| - expect(locations, isEmpty);
|
| - }
|
| -
|
| - test_getUnresolvedMemberReferences_unqualified_unresolved() async {
|
| - verifyNoTestUnitErrors = false;
|
| - await _indexTestUnit('''
|
| -class A {
|
| - m() {
|
| - print(test);
|
| - test = 1;
|
| - test += 2;
|
| - test();
|
| - print(test2); // not requested
|
| - }
|
| -}
|
| -''');
|
| - List<Location> locations =
|
| - await index.getUnresolvedMemberReferences('test');
|
| - expect(locations, hasLength(4));
|
| - findLocationTest(locations, 'test);', false);
|
| - findLocationTest(locations, 'test = 1;', false);
|
| - findLocationTest(locations, 'test += 2;', false);
|
| - findLocationTest(locations, 'test();', false);
|
| - }
|
| -
|
| - test_indexDeclarations_afterIndexUnit() async {
|
| - await resolveTestUnit('''
|
| -var a = 0;
|
| -var b = a + 1;
|
| -''');
|
| - index.indexUnit(testUnit);
|
| - TopLevelVariableElement a = findElement('a');
|
| - // We can find references.
|
| - {
|
| - List<Location> locations = await index.getRelations(
|
| - a.getter, IndexRelationKind.IS_REFERENCED_BY);
|
| - findLocationTest(locations, 'a + 1', false);
|
| - }
|
| - // Attempt to index just declarations - we still can find references.
|
| - index.indexDeclarations(testUnit);
|
| - {
|
| - List<Location> locations = await index.getRelations(
|
| - a.getter, IndexRelationKind.IS_REFERENCED_BY);
|
| - findLocationTest(locations, 'a + 1', false);
|
| - }
|
| - }
|
| -
|
| - test_indexDeclarations_nullUnit() async {
|
| - index.indexDeclarations(null);
|
| - }
|
| -
|
| - test_indexDeclarations_nullUnitElement() async {
|
| - await resolveTestUnit('');
|
| - testUnit.element = null;
|
| - index.indexDeclarations(testUnit);
|
| - }
|
| -
|
| - test_indexUnit_nullLibraryElement() async {
|
| - await resolveTestUnit('');
|
| - CompilationUnitElement unitElement = new _CompilationUnitElementMock();
|
| - expect(unitElement.library, isNull);
|
| - testUnit.element = unitElement;
|
| - index.indexUnit(testUnit);
|
| - }
|
| -
|
| - test_indexUnit_nullUnit() async {
|
| - index.indexUnit(null);
|
| - }
|
| -
|
| - test_indexUnit_nullUnitElement() async {
|
| - await resolveTestUnit('');
|
| - testUnit.element = null;
|
| - index.indexUnit(testUnit);
|
| - }
|
| -
|
| - test_removeContext() async {
|
| - await _indexTestUnit('''
|
| -class A {}
|
| -''');
|
| - RegExp regExp = new RegExp(r'^A$');
|
| - expect(await index.getDefinedNames(regExp, IndexNameKind.topLevel),
|
| - hasLength(1));
|
| - // remove the context - no top-level declarations
|
| - index.removeContext(testUnitElement.context);
|
| - expect(
|
| - await index.getDefinedNames(regExp, IndexNameKind.topLevel), isEmpty);
|
| - }
|
| -
|
| - test_removeUnit() async {
|
| - RegExp regExp = new RegExp(r'^[AB]$');
|
| - Source sourceA = addSource('/a.dart', 'class A {}');
|
| - Source sourceB = addSource('/b.dart', 'class B {}');
|
| - CompilationUnit unitA = await resolveLibraryUnit(sourceA);
|
| - CompilationUnit unitB = await resolveLibraryUnit(sourceB);
|
| - index.indexUnit(unitA);
|
| - index.indexUnit(unitB);
|
| - {
|
| - List<Location> locations =
|
| - await index.getDefinedNames(regExp, IndexNameKind.topLevel);
|
| - expect(locations, hasLength(2));
|
| - expect(locations.map((l) => l.libraryUri),
|
| - unorderedEquals([sourceA.uri.toString(), sourceB.uri.toString()]));
|
| - }
|
| - // remove a.dart - no a.dart location
|
| - index.removeUnit(unitA.element.context, sourceA, sourceA);
|
| - {
|
| - List<Location> locations =
|
| - await index.getDefinedNames(regExp, IndexNameKind.topLevel);
|
| - expect(locations, hasLength(1));
|
| - expect(locations.map((l) => l.libraryUri),
|
| - unorderedEquals([sourceB.uri.toString()]));
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Assert that the given list of [locations] has a [Location] corresponding
|
| - * to the [element].
|
| - */
|
| - void _assertHasDefinedName(List<Location> locations, Element element) {
|
| - String libraryUri = element.library.source.uri.toString();
|
| - String unitUri = element.source.uri.toString();
|
| - for (Location location in locations) {
|
| - if (location.libraryUri == libraryUri &&
|
| - location.unitUri == unitUri &&
|
| - location.offset == element.nameOffset &&
|
| - location.length == element.nameLength) {
|
| - return;
|
| - }
|
| - }
|
| - fail('No declaration of $element at ${element.nameOffset} in\n'
|
| - '${locations.join('\n')}');
|
| - }
|
| -
|
| - Future<Null> _indexTestUnit(String code, {bool declOnly: false}) async {
|
| - await resolveTestUnit(code);
|
| - if (declOnly) {
|
| - index.indexDeclarations(testUnit);
|
| - } else {
|
| - index.indexUnit(testUnit);
|
| - }
|
| - }
|
| -
|
| - Future<Source> _indexUnit(String path, String code) async {
|
| - Source source = addSource(path, code);
|
| - CompilationUnit unit = await resolveLibraryUnit(source);
|
| - index.indexUnit(unit);
|
| - return source;
|
| - }
|
| -}
|
| -
|
| -class _CompilationUnitElementMock extends TypedMock
|
| - implements CompilationUnitElement {}
|
|
|