| Index: pkg/analysis_server/test/services/index2/index2.dart
|
| diff --git a/pkg/analysis_server/test/services/index2/index2.dart b/pkg/analysis_server/test/services/index2/index2.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..322e9d82080caba134374b4025a802c15f00b36d
|
| --- /dev/null
|
| +++ b/pkg/analysis_server/test/services/index2/index2.dart
|
| @@ -0,0 +1,158 @@
|
| +// 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/index2/index2.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/format.dart';
|
| +import 'package:analyzer/src/summary/idl.dart';
|
| +import 'package:test_reflective_loader/test_reflective_loader.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +import '../../abstract_single_unit.dart';
|
| +import '../../utils.dart';
|
| +
|
| +main() {
|
| + initializeTestEnvironment();
|
| + defineReflectiveTests(Index2Test);
|
| +}
|
| +
|
| +@reflectiveTest
|
| +class Index2Test extends AbstractSingleUnitTest {
|
| + PackageIndexStore indexStore = new _MemoryPackageIndexStore();
|
| + Index2 index;
|
| +
|
| + /**
|
| + * Return the [Location] with given properties, or fail.
|
| + */
|
| + Location findLocation(List<Location> locations, String libraryUri,
|
| + String unitUri, int offset, int length) {
|
| + for (Location location in locations) {
|
| + if (location.libraryUri == libraryUri &&
|
| + location.unitUri == unitUri &&
|
| + location.offset == offset &&
|
| + location.length == length) {
|
| + return location;
|
| + }
|
| + }
|
| + fail('No at $offset with length $length in\n${locations.join('\n')}');
|
| + return null;
|
| + }
|
| +
|
| + /**
|
| + * Return the [Location] with given properties, or fail.
|
| + */
|
| + Location findLocationSource(
|
| + List<Location> locations, Source source, String search,
|
| + {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);
|
| + }
|
| +
|
| + /**
|
| + * Return the [Location] with given properties, or fail.
|
| + */
|
| + Location findLocationTest(List<Location> locations, String search,
|
| + {int length}) {
|
| + int offset = findOffset(search);
|
| + length ??= getLeadingIdentifierLength(search);
|
| + String testUri = testSource.uri.toString();
|
| + return findLocation(locations, testUri, testUri, offset, length);
|
| + }
|
| +
|
| + void setUp() {
|
| + super.setUp();
|
| + index = new Index2(indexStore);
|
| + }
|
| +
|
| + void tearDown() {
|
| + super.tearDown();
|
| + index = null;
|
| + indexStore = null;
|
| + }
|
| +
|
| + test_getRelations_isExtendedBy() async {
|
| + _indexTestUnit(r'''
|
| +class A {}
|
| +class B extends A {} // B
|
| +''');
|
| + Source source2 = _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');
|
| + findLocationSource(locations, source2, 'A {} // C');
|
| + }
|
| +
|
| + test_getRelations_isReferencedBy() async {
|
| + _indexTestUnit(r'''
|
| +main(int a, int b) {
|
| +}
|
| +''');
|
| + ClassElement intElement = context.typeProvider.intType.element;
|
| + List<Location> locations = await index.getRelations(
|
| + intElement, IndexRelationKind.IS_REFERENCED_BY);
|
| + findLocationTest(locations, 'int a');
|
| + findLocationTest(locations, 'int b');
|
| + }
|
| +
|
| + void _indexTestUnit(String code) {
|
| + resolveTestUnit(code);
|
| + index.indexUnit(testUnit);
|
| + }
|
| +
|
| + Source _indexUnit(String path, String code) {
|
| + Source source = addSource(path, code);
|
| + CompilationUnit unit = resolveLibraryUnit(source);
|
| + index.indexUnit(unit);
|
| + return source;
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * A [PackageIndexId] for [_MemoryPackageIndexStore].
|
| + */
|
| +class _MemoryPackageIndexId implements PackageIndexId {
|
| + final String key;
|
| +
|
| + _MemoryPackageIndexId(this.key);
|
| +}
|
| +
|
| +/**
|
| + * A [PackageIndexStore] that keeps objects in memory;
|
| + */
|
| +class _MemoryPackageIndexStore implements PackageIndexStore {
|
| + final Map<String, PackageIndex> indexMap = <String, PackageIndex>{};
|
| +
|
| + @override
|
| + Future<Iterable<PackageIndexId>> getIds() async {
|
| + return indexMap.keys.map((key) => new _MemoryPackageIndexId(key));
|
| + }
|
| +
|
| + @override
|
| + Future<PackageIndex> getIndex(PackageIndexId id) async {
|
| + return indexMap[(id as _MemoryPackageIndexId).key];
|
| + }
|
| +
|
| + @override
|
| + putIndex(String unitLibraryUri, String unitUnitUri,
|
| + PackageIndexBuilder indexBuilder) {
|
| + List<int> indexBytes = indexBuilder.toBuffer();
|
| + PackageIndex index = new PackageIndex.fromBuffer(indexBytes);
|
| + String key = '$unitLibraryUri;$unitUnitUri';
|
| + indexMap[key] = index;
|
| + }
|
| +}
|
|
|