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 7ce9f31aea1504e7cb54413f150f2ad8c7d477ae..0825074d10fc1aa8375a5cdb6fc29b75246fdc18 100644 |
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart |
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart |
@@ -28,7 +28,8 @@ import '../../context/mock_sdk.dart'; |
main() { |
defineReflectiveSuite(() { |
- defineReflectiveTests(DriverTest); |
+ defineReflectiveTests(AnalysisDriverTest); |
+ defineReflectiveTests(AnalysisDriverSchedulerTest); |
}); |
} |
@@ -47,14 +48,152 @@ Future pumpEventQueue([int times = 5000]) { |
} |
@reflectiveTest |
-class DriverTest { |
+class AnalysisDriverSchedulerTest { |
static final MockSdk sdk = new MockSdk(); |
final MemoryResourceProvider provider = new MemoryResourceProvider(); |
final ByteStore byteStore = new _TestByteStore(); |
final FileContentOverlay contentOverlay = new FileContentOverlay(); |
+ |
+ final StringBuffer logBuffer = new StringBuffer(); |
+ PerformanceLog logger; |
+ |
+ AnalysisDriverScheduler scheduler; |
+ |
+ List<AnalysisResult> allResults = []; |
+ |
+ AnalysisDriver newDriver() { |
+ AnalysisDriver driver = new AnalysisDriver( |
+ scheduler, |
+ logger, |
+ provider, |
+ byteStore, |
+ contentOverlay, |
+ new SourceFactory( |
+ [new DartUriResolver(sdk), new ResourceUriResolver(provider)], |
+ null, |
+ provider), |
+ new AnalysisOptionsImpl()..strongMode = true); |
+ driver.results.forEach(allResults.add); |
+ return driver; |
+ } |
+ |
+ void setUp() { |
+ logger = new PerformanceLog(logBuffer); |
+ scheduler = new AnalysisDriverScheduler(logger); |
+ scheduler.start(); |
+ } |
+ |
+ test_priorities_getResult_beforePriority() 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, 'class A {}'); |
+ provider.newFile(b, 'class B {}'); |
+ provider.newFile(c, 'class C {}'); |
+ driver1.addFile(a); |
+ driver2.addFile(b); |
+ driver2.addFile(c); |
+ driver1.priorityFiles = [a]; |
+ driver2.priorityFiles = [a]; |
+ |
+ AnalysisResult result = await driver2.getResult(b); |
+ expect(result.path, b); |
+ |
+ await driver1.status.firstWhere((status) => status.isIdle); |
+ await driver2.status.firstWhere((status) => status.isIdle); |
+ |
+ expect(allResults, hasLength(3)); |
+ expect(allResults[0].path, b); |
+ expect(allResults[1].path, a); |
+ expect(allResults[2].path, c); |
+ } |
+ |
+ test_priorities_priorityBeforeGeneral1() async { |
+ AnalysisDriver driver1 = newDriver(); |
+ AnalysisDriver driver2 = newDriver(); |
+ |
+ String a = _p('/a.dart'); |
+ String b = _p('/b.dart'); |
+ provider.newFile(a, 'class A {}'); |
+ provider.newFile(b, 'class B {}'); |
+ driver1.addFile(a); |
+ driver2.addFile(b); |
+ driver1.priorityFiles = [a]; |
+ driver2.priorityFiles = [a]; |
+ |
+ await driver1.status.firstWhere((status) => status.isIdle); |
+ await driver2.status.firstWhere((status) => status.isIdle); |
+ |
+ expect(allResults, hasLength(2)); |
+ expect(allResults[0].path, a); |
+ expect(allResults[1].path, b); |
+ } |
+ |
+ test_priorities_priorityBeforeGeneral2() async { |
+ AnalysisDriver driver1 = newDriver(); |
+ AnalysisDriver driver2 = newDriver(); |
+ |
+ String a = _p('/a.dart'); |
+ String b = _p('/b.dart'); |
+ provider.newFile(a, 'class A {}'); |
+ provider.newFile(b, 'class B {}'); |
+ driver1.addFile(a); |
+ driver2.addFile(b); |
+ driver1.priorityFiles = [b]; |
+ driver2.priorityFiles = [b]; |
+ |
+ await driver1.status.firstWhere((status) => status.isIdle); |
+ await driver2.status.firstWhere((status) => status.isIdle); |
+ |
+ expect(allResults, hasLength(2)); |
+ expect(allResults[0].path, b); |
+ expect(allResults[1].path, a); |
+ } |
+ |
+ test_priorities_priorityBeforeGeneral3() 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, 'class A {}'); |
+ provider.newFile(b, 'class B {}'); |
+ provider.newFile(c, 'class C {}'); |
+ driver1.addFile(a); |
+ driver1.addFile(b); |
+ driver2.addFile(c); |
+ driver1.priorityFiles = [a, c]; |
+ driver2.priorityFiles = [a, c]; |
+ |
+ await driver1.status.firstWhere((status) => status.isIdle); |
+ await driver2.status.firstWhere((status) => status.isIdle); |
+ |
+ expect(allResults, hasLength(3)); |
+ expect(allResults[0].path, a); |
+ expect(allResults[1].path, c); |
+ expect(allResults[2].path, b); |
+ } |
+ |
+ String _p(String path) => provider.convertPath(path); |
+} |
+ |
+@reflectiveTest |
+class AnalysisDriverTest { |
+ static final MockSdk sdk = new MockSdk(); |
+ |
+ final MemoryResourceProvider provider = new MemoryResourceProvider(); |
+ final ByteStore byteStore = new _TestByteStore(); |
+ final FileContentOverlay contentOverlay = new FileContentOverlay(); |
+ |
final StringBuffer logBuffer = new StringBuffer(); |
+ PerformanceLog logger; |
+ AnalysisDriverScheduler scheduler; |
AnalysisDriver driver; |
final _Monitor idleStatusMonitor = new _Monitor(); |
final List<AnalysisStatus> allStatuses = <AnalysisStatus>[]; |
@@ -67,8 +206,11 @@ class DriverTest { |
new MockSdk(); |
testProject = _p('/test/lib'); |
testFile = _p('/test/lib/test.dart'); |
+ logger = new PerformanceLog(logBuffer); |
+ scheduler = new AnalysisDriverScheduler(logger); |
driver = new AnalysisDriver( |
- new PerformanceLog(logBuffer), |
+ scheduler, |
+ logger, |
provider, |
byteStore, |
contentOverlay, |
@@ -80,6 +222,7 @@ class DriverTest { |
new ResourceUriResolver(provider) |
], null, provider), |
new AnalysisOptionsImpl()..strongMode = true); |
+ scheduler.start(); |
driver.status.lastWhere((status) { |
allStatuses.add(status); |
if (status.isIdle) { |
@@ -289,43 +432,6 @@ class C { |
expect(_getClassFieldType(result.unit, 'C', 'f'), 'int'); |
} |
- test_getResult_sameFile_twoUris() async { |
- var a = _p('/test/lib/a.dart'); |
- var b = _p('/test/lib/b.dart'); |
- var c = _p('/test/test/c.dart'); |
- provider.newFile(a, 'class A<T> {}'); |
- provider.newFile( |
- b, |
- r''' |
-import 'a.dart'; |
-var VB = new A<int>(); |
-'''); |
- provider.newFile( |
- c, |
- r''' |
-import '../lib/a.dart'; |
-var VC = new A<double>(); |
-'''); |
- |
- driver.addFile(a); |
- driver.addFile(b); |
- await _waitForIdle(); |
- |
- { |
- AnalysisResult result = await driver.getResult(b); |
- expect(_getImportSource(result.unit, 0).uri.toString(), |
- 'package:test/a.dart'); |
- expect(_getTopLevelVarType(result.unit, 'VB'), 'A<int>'); |
- } |
- |
- { |
- AnalysisResult result = await driver.getResult(c); |
- expect(_getImportSource(result.unit, 0).uri, |
- provider.pathContext.toUri(_p('/test/lib/a.dart'))); |
- expect(_getTopLevelVarType(result.unit, 'VC'), 'A<double>'); |
- } |
- } |
- |
test_getResult_mix_fileAndPackageUris() async { |
var a = _p('/test/bin/a.dart'); |
var b = _p('/test/bin/b.dart'); |
@@ -377,6 +483,43 @@ String z = "string"; |
} |
} |
+ test_getResult_sameFile_twoUris() async { |
+ var a = _p('/test/lib/a.dart'); |
+ var b = _p('/test/lib/b.dart'); |
+ var c = _p('/test/test/c.dart'); |
+ provider.newFile(a, 'class A<T> {}'); |
+ provider.newFile( |
+ b, |
+ r''' |
+import 'a.dart'; |
+var VB = new A<int>(); |
+'''); |
+ provider.newFile( |
+ c, |
+ r''' |
+import '../lib/a.dart'; |
+var VC = new A<double>(); |
+'''); |
+ |
+ driver.addFile(a); |
+ driver.addFile(b); |
+ await _waitForIdle(); |
+ |
+ { |
+ AnalysisResult result = await driver.getResult(b); |
+ expect(_getImportSource(result.unit, 0).uri.toString(), |
+ 'package:test/a.dart'); |
+ expect(_getTopLevelVarType(result.unit, 'VB'), 'A<int>'); |
+ } |
+ |
+ { |
+ AnalysisResult result = await driver.getResult(c); |
+ expect(_getImportSource(result.unit, 0).uri, |
+ provider.pathContext.toUri(_p('/test/lib/a.dart'))); |
+ expect(_getTopLevelVarType(result.unit, 'VC'), 'A<double>'); |
+ } |
+ } |
+ |
test_getResult_selfConsistent() async { |
var a = _p('/test/lib/a.dart'); |
var b = _p('/test/lib/b.dart'); |