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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // 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
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'package:analysis_server/src/services/search/search_engine.dart';
6 import 'package:analysis_server/src/services/search/search_engine_internal2.dart ';
7 import 'package:analyzer/dart/element/element.dart';
8 import 'package:analyzer/file_system/file_system.dart';
9 import 'package:analyzer/file_system/memory_file_system.dart';
10 import 'package:analyzer/src/dart/analysis/byte_store.dart';
11 import 'package:analyzer/src/dart/analysis/driver.dart';
12 import 'package:analyzer/src/dart/analysis/file_state.dart';
13 import 'package:analyzer/src/generated/engine.dart';
14 import 'package:analyzer/src/generated/source.dart';
15 import 'package:test/test.dart';
16 import 'package:test_reflective_loader/test_reflective_loader.dart';
17
18 import '../../mock_sdk.dart';
19
20 main() {
21 defineReflectiveSuite(() {
22 defineReflectiveTests(SearchEngineImpl2Test);
23 });
24 }
25
26 @reflectiveTest
27 class SearchEngineImpl2Test {
28 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
29
30 final MemoryResourceProvider provider = new MemoryResourceProvider();
31 final ByteStore byteStore = new MemoryByteStore();
32 final FileContentOverlay contentOverlay = new FileContentOverlay();
33
34 final StringBuffer logBuffer = new StringBuffer();
35 PerformanceLog logger;
36
37 AnalysisDriverScheduler scheduler;
38
39 void setUp() {
40 logger = new PerformanceLog(logBuffer);
41 scheduler = new AnalysisDriverScheduler(logger);
42 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".
43 }
44
45 test_searchAllSubtypes() async {
46 var p = _p('/test.dart');
47
48 provider.newFile(
49 p,
50 '''
51 class T {}
52 class A extends T {}
53 class B extends A {}
54 class C implements B {}
55 ''');
56
57 var driver = _newDriver();
58 driver.addFile(p);
59
60 var resultA = await driver.getResult(p);
61 ClassElement element = resultA.unit.element.types[0];
62
63 var searchEngine = new SearchEngineImpl2([driver]);
64 Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
65 expect(subtypes, hasLength(3));
66 expect(subtypes, contains(predicate((ClassElement e) => e.name == 'A')));
67 expect(subtypes, contains(predicate((ClassElement e) => e.name == 'B')));
68 expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
69 }
70
71 test_searchAllSubtypes_acrossDrivers() async {
72 var a = _p('/test/a.dart');
73 var b = _p('/test/b.dart');
74
75 provider.newFile(
76 a,
77 '''
78 class T {}
79 class A extends T {}
80 ''');
81 provider.newFile(
82 b,
83 '''
84 import 'a.dart';
85 class B extends A {}
86 class C extends B {}
87 ''');
88
89 var driver1 = _newDriver();
90 var driver2 = _newDriver();
91
92 driver1.addFile(a);
93 driver2.addFile(b);
94
95 var resultA = await driver1.getResult(a);
96 ClassElement element = resultA.unit.element.types[0];
97
98 var searchEngine = new SearchEngineImpl2([driver1, driver2]);
99 Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
100 expect(subtypes, hasLength(3));
101 expect(subtypes, contains(predicate((ClassElement e) => e.name == 'A')));
102 expect(subtypes, contains(predicate((ClassElement e) => e.name == 'B')));
103 expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
104 }
105
106 test_searchReferences() async {
107 var a = _p('/test/a.dart');
108 var b = _p('/test/b.dart');
109
110 provider.newFile(
111 a,
112 '''
113 class T {}
114 T a;
115 ''');
116 provider.newFile(
117 b,
118 '''
119 import 'a.dart';
120 T b;
121 ''');
122
123 var driver1 = _newDriver();
124 var driver2 = _newDriver();
125
126 driver1.addFile(a);
127 driver2.addFile(b);
128
129 var resultA = await driver1.getResult(a);
130 ClassElement element = resultA.unit.element.types[0];
131
132 var searchEngine = new SearchEngineImpl2([driver1, driver2]);
133 List<SearchMatch> matches = await searchEngine.searchReferences(element);
134 expect(matches, hasLength(2));
135 expect(
136 matches, contains(predicate((SearchMatch m) => m.element.name == 'a')));
137 expect(
138 matches, contains(predicate((SearchMatch m) => m.element.name == 'b')));
139 }
140
141 AnalysisDriver _newDriver() => new AnalysisDriver(
142 scheduler,
143 logger,
144 provider,
145 byteStore,
146 contentOverlay,
147 new SourceFactory(
148 [new DartUriResolver(sdk), new ResourceUriResolver(provider)],
149 null,
150 provider),
151 new AnalysisOptionsImpl()..strongMode = true);
152
153 String _p(String path) => provider.convertPath(path);
154 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698