| 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 1bff4ea0def4bbe843ae3066eca4bf047826cebb..33551dbe45b2cb6d97eaffe8d57f73a745394bce 100644
|
| --- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
|
| +++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
|
| @@ -97,6 +97,96 @@ class AnalysisDriverSchedulerTest {
|
| scheduler.start();
|
| }
|
|
|
| + test_priorities_allChangedFirst() async {
|
| + AnalysisDriver driver1 = newDriver();
|
| + AnalysisDriver driver2 = newDriver();
|
| +
|
| + String a = _p('/a.dart');
|
| + String b = _p('/b.dart');
|
| + String c = _p('/c.dart');
|
| + String d = _p('/d.dart');
|
| + provider.newFile(a, 'class A {}');
|
| + provider.newFile(b, "import 'a.dart';");
|
| + provider.newFile(c, 'class C {}');
|
| + provider.newFile(d, "import 'c.dart';");
|
| + driver1.addFile(a);
|
| + driver1.addFile(b);
|
| + driver2.addFile(c);
|
| + driver2.addFile(d);
|
| +
|
| + await scheduler.waitForIdle();
|
| + allResults.clear();
|
| +
|
| + provider.updateFile(a, 'class A2 {}');
|
| + provider.updateFile(c, 'class C2 {}');
|
| + driver1.changeFile(a);
|
| + driver1.changeFile(c);
|
| + driver2.changeFile(a);
|
| + driver2.changeFile(c);
|
| +
|
| + await scheduler.waitForIdle();
|
| + expect(allResults, hasLength(greaterThanOrEqualTo(2)));
|
| + expect(allResults[0].path, a);
|
| + expect(allResults[1].path, c);
|
| + }
|
| +
|
| + test_priorities_firstChanged_thenImporting() async {
|
| + AnalysisDriver driver1 = newDriver();
|
| + AnalysisDriver driver2 = newDriver();
|
| +
|
| + String a = _p('/a.dart');
|
| + String b = _p('/b.dart');
|
| + String c = _p('/c.dart');
|
| + provider.newFile(a, "import 'c.dart';");
|
| + provider.newFile(b, 'class B {}');
|
| + provider.newFile(c, "import 'b.dart';");
|
| + driver1.addFile(a);
|
| + driver1.addFile(b);
|
| + driver2.addFile(c);
|
| +
|
| + await scheduler.waitForIdle();
|
| + allResults.clear();
|
| +
|
| + provider.updateFile(b, 'class B2 {}');
|
| + driver1.changeFile(b);
|
| + driver2.changeFile(b);
|
| +
|
| + await scheduler.waitForIdle();
|
| + expect(allResults, hasLength(greaterThanOrEqualTo(2)));
|
| + expect(allResults[0].path, b);
|
| + expect(allResults[1].path, c);
|
| + }
|
| +
|
| + test_priorities_firstChanged_thenWithErrors() async {
|
| + AnalysisDriver driver1 = newDriver();
|
| + AnalysisDriver driver2 = newDriver();
|
| +
|
| + String a = _p('/a.dart');
|
| + String b = _p('/b.dart');
|
| + String c = _p('/c.dart');
|
| + String d = _p('/d.dart');
|
| + provider.newFile(a, 'class A {}');
|
| + provider.newFile(b, "export 'a.dart';");
|
| + provider.newFile(c, "import 'b.dart';");
|
| + provider.newFile(d, "import 'b.dart'; class D extends X {}");
|
| + driver1.addFile(a);
|
| + driver1.addFile(b);
|
| + driver2.addFile(c);
|
| + driver2.addFile(d);
|
| +
|
| + await scheduler.waitForIdle();
|
| + allResults.clear();
|
| +
|
| + provider.updateFile(a, 'class A2 {}');
|
| + driver1.changeFile(a);
|
| + driver2.changeFile(a);
|
| +
|
| + await scheduler.waitForIdle();
|
| + expect(allResults, hasLength(greaterThanOrEqualTo(2)));
|
| + expect(allResults[0].path, a);
|
| + expect(allResults[1].path, d);
|
| + }
|
| +
|
| test_priorities_getResult_beforePriority() async {
|
| AnalysisDriver driver1 = newDriver();
|
| AnalysisDriver driver2 = newDriver();
|
| @@ -2179,6 +2269,113 @@ var A = B;
|
| allResults.clear();
|
| }
|
|
|
| + test_results_order() async {
|
| + var a = _p('/test/lib/a.dart');
|
| + var b = _p('/test/lib/b.dart');
|
| + var c = _p('/test/lib/c.dart');
|
| + var d = _p('/test/lib/d.dart');
|
| + var e = _p('/test/lib/e.dart');
|
| + var f = _p('/test/lib/f.dart');
|
| + provider.newFile(
|
| + a,
|
| + r'''
|
| +import 'd.dart';
|
| +''');
|
| + provider.newFile(b, '');
|
| + provider.newFile(
|
| + c,
|
| + r'''
|
| +import 'd.dart';
|
| +''');
|
| + provider.newFile(
|
| + d,
|
| + r'''
|
| +import 'b.dart';
|
| +''');
|
| + provider.newFile(
|
| + e,
|
| + r'''
|
| +export 'b.dart';
|
| +''');
|
| + provider.newFile(
|
| + f,
|
| + r'''
|
| +import 'e.dart';
|
| +class F extends X {}
|
| +''');
|
| +
|
| + driver.addFile(a);
|
| + driver.addFile(b);
|
| + driver.addFile(c);
|
| + driver.addFile(d);
|
| + driver.addFile(e);
|
| + driver.addFile(f);
|
| + await scheduler.waitForIdle();
|
| +
|
| + // The file f.dart has an error or warning.
|
| + // So, its analysis will have higher priority.
|
| + expect(driver.fsState.getFileForPath(f).hasErrorOrWarning, isTrue);
|
| +
|
| + allResults.clear();
|
| +
|
| + // Update a.dart with changing its API signature.
|
| + provider.updateFile(b, 'class A {}');
|
| + driver.changeFile(b);
|
| + await scheduler.waitForIdle();
|
| +
|
| + List<String> analyzedPaths = allResults.map((r) => r.path).toList();
|
| +
|
| + // The changed file must be the first.
|
| + expect(analyzedPaths[0], b);
|
| +
|
| + // Then the file that imports the changed file.
|
| + expect(analyzedPaths[1], d);
|
| +
|
| + // Then the file that has an error (even if it is unrelated).
|
| + expect(analyzedPaths[2], f);
|
| + }
|
| +
|
| + test_results_order_allChangedFirst_thenImports() async {
|
| + var a = _p('/test/lib/a.dart');
|
| + var b = _p('/test/lib/b.dart');
|
| + var c = _p('/test/lib/c.dart');
|
| + var d = _p('/test/lib/d.dart');
|
| + var e = _p('/test/lib/e.dart');
|
| + provider.newFile(a, 'class A {}');
|
| + provider.newFile(b, 'class B {}');
|
| + provider.newFile(c, '');
|
| + provider.newFile(d, "import 'a.dart';");
|
| + provider.newFile(e, "import 'b.dart';");
|
| +
|
| + driver.addFile(a);
|
| + driver.addFile(b);
|
| + driver.addFile(c);
|
| + driver.addFile(d);
|
| + driver.addFile(e);
|
| + await scheduler.waitForIdle();
|
| +
|
| + allResults.clear();
|
| +
|
| + // Change b.dart and then a.dart files.
|
| + // So, a.dart and b.dart should be analyzed first.
|
| + // Then d.dart and e.dart because they import a.dart and b.dart files.
|
| + provider.updateFile(a, 'class A2 {}');
|
| + provider.updateFile(b, 'class B2 {}');
|
| + driver.changeFile(b);
|
| + driver.changeFile(a);
|
| + await scheduler.waitForIdle();
|
| +
|
| + List<String> analyzedPaths = allResults.map((r) => r.path).toList();
|
| +
|
| + // The changed files must be the first.
|
| + expect(analyzedPaths[0], a);
|
| + expect(analyzedPaths[1], b);
|
| +
|
| + // Then the file that imports the changed file.
|
| + expect(analyzedPaths[2], d);
|
| + expect(analyzedPaths[3], e);
|
| + }
|
| +
|
| test_results_priority() async {
|
| String content = 'int f() => 42;';
|
| addTestFile(content, priority: true);
|
|
|