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

Unified Diff: pkg/analyzer/test/src/dart/analysis/driver_test.dart

Issue 2818623003: Add a flag for caching all analysis results in the driver. (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « pkg/analyzer/test/src/dart/analysis/base.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {}
« no previous file with comments | « pkg/analyzer/test/src/dart/analysis/base.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698