Index: pkg/analysis_server/test/context_manager_test.dart |
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart |
index 4a4ec36fd3e4bebfc2919aa6f6bb238820ffd98c..2be5cb8ff5ecdecefe84bc01aa3e14d6667fe4e4 100644 |
--- a/pkg/analysis_server/test/context_manager_test.dart |
+++ b/pkg/analysis_server/test/context_manager_test.dart |
@@ -7,10 +7,10 @@ library test.context.directory.manager; |
import 'dart:collection'; |
import 'package:analysis_server/src/context_manager.dart'; |
+import 'package:analysis_server/src/source/optimizing_pub_package_map_provider.dart'; |
import 'package:analyzer/file_system/file_system.dart'; |
import 'package:analyzer/file_system/memory_file_system.dart'; |
import 'package:analyzer/instrumentation/instrumentation.dart'; |
-import 'package:analyzer/source/package_map_provider.dart'; |
import 'package:analyzer/source/package_map_resolver.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
import 'package:analyzer/src/generated/source.dart'; |
@@ -858,6 +858,42 @@ class ContextManagerTest { |
}); |
} |
+ test_watch_modifyPackageMapDependency_redundantly() async { |
+ // Create two dependency files |
+ String dependencyPath1 = posix.join(projPath, 'dep1'); |
+ String dependencyPath2 = posix.join(projPath, 'dep2'); |
+ resourceProvider.newFile(dependencyPath1, 'contents'); |
+ resourceProvider.newFile(dependencyPath2, 'contents'); |
+ packageMapProvider.dependencies.add(dependencyPath1); |
+ packageMapProvider.dependencies.add(dependencyPath2); |
+ // Create a dart file |
+ String dartFilePath = posix.join(projPath, 'main.dart'); |
+ resourceProvider.newFile(dartFilePath, 'contents'); |
+ // Verify that the created context has the expected empty package map. |
+ manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
+ _checkPackageMap(projPath, isEmpty); |
+ expect(packageMapProvider.computeCount, 1); |
+ // Set up a different package map |
+ String packagePath = '/package/foo'; |
+ resourceProvider.newFolder(packagePath); |
+ packageMapProvider.packageMap = {'foo': projPath}; |
+ // Change both dependencies. |
+ resourceProvider.modifyFile(dependencyPath1, 'new contents'); |
+ resourceProvider.modifyFile(dependencyPath2, 'new contents'); |
+ // Arrange for the next call to computePackageMap to return the correct |
+ // timestamps for the dependencies. |
+ packageMapProvider.modificationTimes = <String, int>{}; |
+ for (String path in [dependencyPath1, dependencyPath2]) { |
+ File resource = resourceProvider.getResource(path); |
+ packageMapProvider.modificationTimes[path] = resource.modificationStamp; |
+ } |
+ // This should cause the new package map to be picked up, by executing |
+ // computePackageMap just one additional time. |
+ await pumpEventQueue(); |
+ _checkPackageMap(projPath, equals(packageMapProvider.packageMap)); |
+ expect(packageMapProvider.computeCount, 2); |
+ } |
+ |
/** |
* Verify that package URI's for source files in [path] will be resolved |
* using a package map matching [expectation]. |
@@ -917,7 +953,7 @@ class TestContextManager extends ContextManager { |
<String, UriResolver>{}; |
TestContextManager(MemoryResourceProvider resourceProvider, |
- PackageMapProvider packageMapProvider) |
+ OptimizingPubPackageMapProvider packageMapProvider) |
: super(resourceProvider, packageMapProvider, |
InstrumentationService.NULL_SERVICE); |