Index: pkg/analyzer/test/src/dart/analysis/driver_test.dart |
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart |
index 33551dbe45b2cb6d97eaffe8d57f73a745394bce..800f4c5f8bc2ef36c8619d2906868c41bcfa5fe4 100644 |
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart |
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart |
@@ -39,8 +39,9 @@ import 'base.dart'; |
main() { |
defineReflectiveSuite(() { |
- defineReflectiveTests(AnalysisDriverTest); |
defineReflectiveTests(AnalysisDriverSchedulerTest); |
+ defineReflectiveTests(AnalysisDriverTest); |
+ defineReflectiveTests(CacheAllAnalysisDriverTest); |
}); |
} |
@@ -2603,4 +2604,97 @@ class F extends X {} |
} |
} |
+@reflectiveTest |
+class CacheAllAnalysisDriverTest extends BaseAnalysisDriverTest { |
+ bool get disableChangesAndCacheAllResults => true; |
+ |
+ test_addFile() async { |
+ var a = _p('/test/lib/a.dart'); |
+ var b = _p('/test/lib/b.dart'); |
+ driver.addFile(a); |
+ driver.addFile(b); |
+ } |
+ |
+ test_changeFile() async { |
+ var path = _p('/test.dart'); |
+ expect(() { |
+ driver.changeFile(path); |
+ }, throwsStateError); |
+ } |
+ |
+ test_getResult_libraryUnits() async { |
+ var lib = _p('/lib.dart'); |
+ var part1 = _p('/part1.dart'); |
+ var part2 = _p('/part2.dart'); |
+ |
+ provider.newFile( |
+ lib, |
+ r''' |
+library test; |
+part 'part1.dart'; |
+part 'part2.dart'; |
+'''); |
+ provider.newFile(part1, 'part of test; class A {}'); |
+ provider.newFile(part2, 'part of test; class B {}'); |
+ |
+ driver.addFile(lib); |
+ driver.addFile(part1); |
+ driver.addFile(part2); |
+ |
+ // No analyzed libraries initially. |
+ expect(driver.test.numOfAnalyzedLibraries, 0); |
+ |
+ AnalysisResult libResult = await driver.getResult(lib); |
+ AnalysisResult partResult1 = await driver.getResult(part1); |
+ AnalysisResult partResult2 = await driver.getResult(part2); |
+ |
+ // Just one library was analyzed, results for parts are cached. |
+ expect(driver.test.numOfAnalyzedLibraries, 1); |
+ |
+ expect(libResult.path, lib); |
+ expect(partResult1.path, part1); |
+ expect(partResult2.path, part2); |
+ |
+ expect(libResult.unit, isNotNull); |
+ expect(partResult1.unit, isNotNull); |
+ expect(partResult2.unit, isNotNull); |
+ |
+ // The parts uses the same resynthesized library element. |
+ var libLibrary = libResult.unit.element.library; |
+ var partLibrary1 = partResult1.unit.element.library; |
+ var partLibrary2 = partResult2.unit.element.library; |
+ expect(partLibrary1, same(libLibrary)); |
+ expect(partLibrary2, same(libLibrary)); |
+ } |
+ |
+ test_getResult_singleFile() async { |
+ var path = _p('/test.dart'); |
+ provider.newFile(path, 'main() {}'); |
+ driver.addFile(path); |
+ |
+ AnalysisResult result1 = await driver.getResult(path); |
+ expect(driver.test.numOfAnalyzedLibraries, 1); |
+ var unit1 = result1.unit; |
+ var unitElement1 = unit1.element; |
+ expect(result1.path, path); |
+ expect(unit1, isNotNull); |
+ expect(unitElement1, isNotNull); |
+ |
+ AnalysisResult result2 = await driver.getResult(path); |
+ expect(driver.test.numOfAnalyzedLibraries, 1); |
+ expect(result2.path, path); |
+ expect(result2.unit, same(unit1)); |
+ expect(result2.unit.element, same(unitElement1)); |
+ } |
+ |
+ test_removeFile() async { |
+ var path = _p('/test.dart'); |
+ expect(() { |
+ driver.removeFile(path); |
+ }, throwsStateError); |
+ } |
+ |
+ String _p(String path) => provider.convertPath(path); |
+} |
+ |
class _SourceMock extends TypedMock implements Source {} |