Chromium Code Reviews| 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); |
| +} |