Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: pkg/analysis_server/test/services/index2/index2.dart

Issue 1755263002: Initial new index implementation. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
+ }
+}
« no previous file with comments | « pkg/analysis_server/lib/src/services/index2/index2.dart ('k') | pkg/analysis_server/test/services/index2/test_all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698