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

Unified Diff: pkg/analysis_server/test/services/search/search_engine2_test.dart

Issue 2564913002: Implement SearchEngine.searchAllSubtypes() with the analysis driver. (Closed)
Patch Set: Created 4 years 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/search/search_engine2_test.dart
diff --git a/pkg/analysis_server/test/services/search/search_engine2_test.dart b/pkg/analysis_server/test/services/search/search_engine2_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..f2b7022a653676690c2f159bef7c1dec823c34d6
--- /dev/null
+++ b/pkg/analysis_server/test/services/search/search_engine2_test.dart
@@ -0,0 +1,154 @@
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
Brian Wilkerson 2016/12/09 17:03:22 2016?
scheglov 2016/12/09 17:29:58 Done. :-D
+// 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/src/services/search/search_engine.dart';
+import 'package:analysis_server/src/services/search/search_engine_internal2.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../mock_sdk.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(SearchEngineImpl2Test);
+ });
+}
+
+@reflectiveTest
+class SearchEngineImpl2Test {
+ static final MockSdk sdk = new MockSdk();
Brian Wilkerson 2016/12/09 17:03:23 I would have expected that you needed to pass the
scheglov 2016/12/09 17:29:58 We never access SDK files, from out of SDK, so we
+
+ final MemoryResourceProvider provider = new MemoryResourceProvider();
+ final ByteStore byteStore = new MemoryByteStore();
+ final FileContentOverlay contentOverlay = new FileContentOverlay();
+
+ final StringBuffer logBuffer = new StringBuffer();
+ PerformanceLog logger;
+
+ AnalysisDriverScheduler scheduler;
+
+ void setUp() {
+ logger = new PerformanceLog(logBuffer);
+ scheduler = new AnalysisDriverScheduler(logger);
+ scheduler.start();
Brian Wilkerson 2016/12/09 17:03:23 The tests I just added don't start() the scheduler
scheglov 2016/12/09 17:29:58 Hm... That's weird. If we don't start the schedule
Brian Wilkerson 2016/12/09 18:22:20 Yeah, I was quite surprised that the tests passed
scheglov 2016/12/09 18:31:10 You're right. The answer is "yes".
+ }
+
+ test_searchAllSubtypes() async {
+ var p = _p('/test.dart');
+
+ provider.newFile(
+ p,
+ '''
+class T {}
+class A extends T {}
+class B extends A {}
+class C implements B {}
+''');
+
+ var driver = _newDriver();
+ driver.addFile(p);
+
+ var resultA = await driver.getResult(p);
+ ClassElement element = resultA.unit.element.types[0];
+
+ var searchEngine = new SearchEngineImpl2([driver]);
+ Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
+ expect(subtypes, hasLength(3));
+ expect(subtypes, contains(predicate((ClassElement e) => e.name == 'A')));
+ expect(subtypes, contains(predicate((ClassElement e) => e.name == 'B')));
+ expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
+ }
+
+ test_searchAllSubtypes_acrossDrivers() async {
+ var a = _p('/test/a.dart');
+ var b = _p('/test/b.dart');
+
+ provider.newFile(
+ a,
+ '''
+class T {}
+class A extends T {}
+''');
+ provider.newFile(
+ b,
+ '''
+import 'a.dart';
+class B extends A {}
+class C extends B {}
+''');
+
+ var driver1 = _newDriver();
+ var driver2 = _newDriver();
+
+ driver1.addFile(a);
+ driver2.addFile(b);
+
+ var resultA = await driver1.getResult(a);
+ ClassElement element = resultA.unit.element.types[0];
+
+ var searchEngine = new SearchEngineImpl2([driver1, driver2]);
+ Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
+ expect(subtypes, hasLength(3));
+ expect(subtypes, contains(predicate((ClassElement e) => e.name == 'A')));
+ expect(subtypes, contains(predicate((ClassElement e) => e.name == 'B')));
+ expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
+ }
+
+ test_searchReferences() async {
+ var a = _p('/test/a.dart');
+ var b = _p('/test/b.dart');
+
+ provider.newFile(
+ a,
+ '''
+class T {}
+T a;
+''');
+ provider.newFile(
+ b,
+ '''
+import 'a.dart';
+T b;
+''');
+
+ var driver1 = _newDriver();
+ var driver2 = _newDriver();
+
+ driver1.addFile(a);
+ driver2.addFile(b);
+
+ var resultA = await driver1.getResult(a);
+ ClassElement element = resultA.unit.element.types[0];
+
+ var searchEngine = new SearchEngineImpl2([driver1, driver2]);
+ List<SearchMatch> matches = await searchEngine.searchReferences(element);
+ expect(matches, hasLength(2));
+ expect(
+ matches, contains(predicate((SearchMatch m) => m.element.name == 'a')));
+ expect(
+ matches, contains(predicate((SearchMatch m) => m.element.name == 'b')));
+ }
+
+ AnalysisDriver _newDriver() => new AnalysisDriver(
+ scheduler,
+ logger,
+ provider,
+ byteStore,
+ contentOverlay,
+ new SourceFactory(
+ [new DartUriResolver(sdk), new ResourceUriResolver(provider)],
+ null,
+ provider),
+ new AnalysisOptionsImpl()..strongMode = true);
+
+ String _p(String path) => provider.convertPath(path);
+}

Powered by Google App Engine
This is Rietveld 408576698