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

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

Issue 3010463002: Make creating LibraryContext async, so all its transitive clients. (Closed)
Patch Set: tweak Created 3 years, 4 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
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 123d067c454dd6ec7feb3dd8fb9d6668828438ac..b83084781b1910799b3d463288f4b1a83ce5eea1 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -553,6 +553,107 @@ part 'part.dart';
expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_NON_PART);
}
+ test_asyncChangesDuringAnalysis_getErrors() async {
+ var path = _p('/test/lib/test.dart');
+ provider.newFile(path, 'class A {}');
+ driver.addFile(path);
+
+ // Compute and cache errors.
+ await driver.getErrors(path);
+ await scheduler.waitForIdle();
+
+ // Simulate a change that happens during reading the cached errors.
+ bool asyncWorkExecuted = false;
+ driver.test.workToWaitAfterComputingResult = (path) {
+ provider.updateFile(path, 'class B');
+ driver.changeFile(path);
+ asyncWorkExecuted = true;
+ };
+
+ ErrorsResult result = await driver.getErrors(testFile);
+ expect(asyncWorkExecuted, isTrue);
+ expect(result.errors, isNotEmpty);
+ }
+
+ test_asyncChangesDuringAnalysis_getResult() async {
+ var path = _p('/test/lib/test.dart');
+ provider.newFile(path, 'class A {}');
+ driver.addFile(path);
+
+ // Schedule the result to be computed.
+ Future<AnalysisResult> future1 = driver.getResult(testFile);
+
+ // Simulate a change that happens during computing the result.
+ // We also request a new result, which must include the change.
+ Future<AnalysisResult> future2;
+ bool asyncWorkExecuted = false;
+ driver.test.workToWaitAfterComputingResult = (path) {
+ provider.updateFile(path, 'class B {}');
+ driver.changeFile(path);
+ future2 = driver.getResult(testFile);
+ asyncWorkExecuted = true;
+ };
+
+ // Both futures complete, with the same result.
+ // The result must be with the new changes.
+ //
+ // It would not be wrong to have "class A {}" in result1, and "class B {}"
+ // in result2, but we test here the actual implementation behaviour.
+ AnalysisResult result1 = await future1;
+ AnalysisResult result2 = await future2;
+ expect(asyncWorkExecuted, isTrue);
+ expect(result2, same(result1));
+ expect(result1.path, testFile);
+ expect(result1.unit, isNotNull);
+ expect((result1.unit.declarations[0] as ClassDeclaration).name.name, 'B');
+ }
+
+ test_asyncChangesDuringAnalysis_resultsStream() async {
+ var path = _p('/test/lib/test.dart');
+ provider.newFile(path, 'class A {}');
+ driver.addFile(path);
+
+ // Simulate a change that happens during computing the result.
+ bool asyncWorkExecuted = false;
+ driver.test.workToWaitAfterComputingResult = (p) {
+ if (p == path && !asyncWorkExecuted) {
+ provider.updateFile(path, 'class B');
+ driver.changeFile(path);
+ asyncWorkExecuted = true;
+ }
+ };
+
+ await scheduler.waitForIdle();
+ expect(asyncWorkExecuted, isTrue);
+
+ // The last result must have an error.
+ expect(allResults.last.errors, isNotEmpty);
+ }
+
+ test_asyncChangesDuringAnalysis_resultsStream_priority() async {
+ var path = _p('/test/lib/test.dart');
+ provider.newFile(path, 'class A {}');
+ driver.addFile(path);
+ driver.priorityFiles = [path];
+
+ // Simulate a change that happens during computing the result.
+ bool asyncWorkExecuted = false;
+ driver.test.workToWaitAfterComputingResult = (p) {
+ if (p == path && !asyncWorkExecuted) {
+ provider.updateFile(path, 'class B {}');
+ driver.changeFile(path);
+ asyncWorkExecuted = true;
+ }
+ };
+
+ await scheduler.waitForIdle();
+ expect(asyncWorkExecuted, isTrue);
+
+ // The last unit must have "class B {}".
+ var lastUnit = allResults.last.unit;
+ expect((lastUnit.declarations[0] as ClassDeclaration).name.name, 'B');
+ }
+
test_cachedPriorityResults() async {
var a = _p('/test/bin/a.dart');
provider.newFile(a, 'var a = 1;');
@@ -977,7 +1078,7 @@ var a = new A();
// Prepare the store with a.dart and everything it needs.
SummaryDataStore summaryStore =
- createAnalysisDriver().test.getSummaryStore(a);
+ await createAnalysisDriver().test.getSummaryStore(a);
// There are at least a.dart and dart:core libraries.
String aUri = provider.pathContext.toUri(a).toString();
@@ -1157,7 +1258,7 @@ class Test {}
// Prepare the store with package:test/test.dart URI.
SummaryDataStore summaryStore =
- createAnalysisDriver().test.getSummaryStore(testFile);
+ await createAnalysisDriver().test.getSummaryStore(testFile);
// package:test/test.dart is in the store.
String uri = 'package:test/test.dart';
@@ -1186,7 +1287,7 @@ class Test {}
SummaryDataStore sdkStore;
{
String corePath = sdk.mapDartUri('dart:core').fullName;
- sdkStore = createAnalysisDriver().test.getSummaryStore(corePath);
+ sdkStore = await createAnalysisDriver().test.getSummaryStore(corePath);
}
// There are dart:core and dart:async in the store.

Powered by Google App Engine
This is Rietveld 408576698