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

Unified Diff: pkg/analysis_server/test/context_manager_test.dart

Issue 1089453002: Avoid redundant calls to "pub list" when multiple dependencies change. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add missing source file. Created 5 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
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);

Powered by Google App Engine
This is Rietveld 408576698