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

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

Issue 679763002: Add package root support to analysis server. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 2 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 e2ba17cb777e3fc809c5fe742dc2773aad811963..161c060e8241d63c1b562b0bf18a37de1268c023 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -9,8 +9,10 @@ import 'reflective_tests.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.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';
+import 'package:analyzer/src/generated/source_io.dart';
import 'package:path/path.dart';
import 'package:unittest/unittest.dart';
@@ -190,14 +192,10 @@ class ContextManagerTest {
manager.assertContextFiles(subProjectA, [subProjectA_file]);
manager.assertContextFiles(subProjectB, [subProjectB_file]);
// verify package maps
- expect(
- manager.currentContextPackageMaps[root],
- equals(packageMapProvider.packageMaps[root]));
- expect(
- manager.currentContextPackageMaps[subProjectA],
+ _checkPackageMap(root, equals(packageMapProvider.packageMaps[root]));
+ _checkPackageMap(subProjectA,
equals(packageMapProvider.packageMaps[subProjectA]));
- expect(
- manager.currentContextPackageMaps[subProjectB],
+ _checkPackageMap(subProjectB,
equals(packageMapProvider.packageMaps[subProjectB]));
}
@@ -210,6 +208,35 @@ class ContextManagerTest {
expect(manager.currentContextFilePaths[projPath], hasLength(0));
}
+ void test_setRoots_addPackageRoot() {
+ String packagePathFoo = '/package1/foo';
+ String packageRootPath = '/package2/foo';
+ Folder packageFolder = resourceProvider.newFolder(packagePathFoo);
+ packageMapProvider.packageMap = {
+ 'foo': [packageFolder]
+ };
+ List<String> includedPaths = <String>[projPath];
+ List<String> excludedPaths = <String>[];
+ manager.setRoots(includedPaths, excludedPaths, <String, String>{});
+ _checkPackageMap(projPath, equals(packageMapProvider.packageMap));
+ manager.setRoots(includedPaths, excludedPaths,
+ <String, String>{ projPath: packageRootPath });
+ _checkPackageRoot(projPath, equals(packageRootPath));
+ }
+
+ void test_setRoots_changePackageRoot() {
+ String packageRootPath1 = '/package1';
+ String packageRootPath2 = '/package2';
+ List<String> includedPaths = <String>[projPath];
+ List<String> excludedPaths = <String>[];
+ manager.setRoots(includedPaths, excludedPaths,
+ <String, String>{ projPath: packageRootPath1 });
+ _checkPackageRoot(projPath, equals(packageRootPath1));
+ manager.setRoots(includedPaths, excludedPaths,
+ <String, String>{ projPath: packageRootPath2 });
+ _checkPackageRoot(projPath, equals(packageRootPath2));
+ }
+
void test_setRoots_exclude_newRoot_withExcludedFile() {
// prepare paths
String project = '/project';
@@ -343,9 +370,14 @@ class ContextManagerTest {
'foo': [packageFolder]
};
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
- expect(
- manager.currentContextPackageMaps[projPath],
- equals(packageMapProvider.packageMap));
+ _checkPackageMap(projPath, equals(packageMapProvider.packageMap));
+ }
+
+ void test_setRoots_newFolderWithPackageRoot() {
+ String packageRootPath = '/package';
+ manager.setRoots(<String>[projPath], <String>[],
+ <String, String>{ projPath: packageRootPath });
+ _checkPackageRoot(projPath, equals(packageRootPath));
}
void test_setRoots_removeFolderWithPubspec() {
@@ -406,6 +438,22 @@ class ContextManagerTest {
expect(manager.currentContextFilePaths, hasLength(0));
}
+ void test_setRoots_removePackageRoot() {
+ String packagePathFoo = '/package1/foo';
+ String packageRootPath = '/package2/foo';
+ Folder packageFolder = resourceProvider.newFolder(packagePathFoo);
+ packageMapProvider.packageMap = {
+ 'foo': [packageFolder]
+ };
+ List<String> includedPaths = <String>[projPath];
+ List<String> excludedPaths = <String>[];
+ manager.setRoots(includedPaths, excludedPaths,
+ <String, String>{ projPath: packageRootPath });
+ _checkPackageRoot(projPath, equals(packageRootPath));
+ manager.setRoots(includedPaths, excludedPaths, <String, String>{});
+ _checkPackageMap(projPath, equals(packageMapProvider.packageMap));
+ }
+
test_watch_addDummyLink() {
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
// empty folder initially
@@ -630,7 +678,7 @@ class ContextManagerTest {
resourceProvider.newFile(dartFilePath, 'contents');
// the created context has the expected empty package map
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
- expect(manager.currentContextPackageMaps[projPath], isEmpty);
+ _checkPackageMap(projPath, isEmpty);
// configure package map
String packagePath = '/package/foo';
resourceProvider.newFolder(packagePath);
@@ -641,13 +689,11 @@ class ContextManagerTest {
// package map to be picked up.
resourceProvider.modifyFile(dartFilePath, 'new contents');
return pumpEventQueue().then((_) {
- expect(manager.currentContextPackageMaps[projPath], isEmpty);
+ _checkPackageMap(projPath, isEmpty);
// However, changing the package map dependency should.
resourceProvider.modifyFile(dependencyPath, 'new contents');
return pumpEventQueue().then((_) {
- expect(
- manager.currentContextPackageMaps[projPath],
- equals(packageMapProvider.packageMap));
+ _checkPackageMap(projPath, equals(packageMapProvider.packageMap));
});
});
}
@@ -662,16 +708,38 @@ class ContextManagerTest {
resourceProvider.newFile(dartFilePath, 'contents');
// the created context has the expected empty package map
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
- expect(manager.currentContextPackageMaps[projPath], isEmpty);
+ _checkPackageMap(projPath, isEmpty);
// Change the package map dependency so that the packageMapProvider is
// re-run, and arrange for it to return null from computePackageMap().
packageMapProvider.packageMap = null;
resourceProvider.modifyFile(dependencyPath, 'new contents');
return pumpEventQueue().then((_) {
// The package map should have been changed to null.
- expect(manager.currentContextPackageMaps[projPath], isNull);
+ _checkPackageMap(projPath, isNull);
});
}
+
+ /**
+ * Verify that package URI's for source files in [path] will be resolved
+ * using a package map matching [expectation].
+ */
+ void _checkPackageMap(String path, expectation) {
+ UriResolver resolver = manager.currentContextPackageUriResolvers[path];
+ expect(resolver, new isInstanceOf<PackageMapUriResolver>());
+ PackageMapUriResolver packageMapUriResolver = resolver;
+ expect(packageMapUriResolver.packageMap, expectation);
+ }
+
+ /**
+ * Verify that package URI's for source files in [path] will be resolved
+ * using a package root maching [expectation].
+ */
+ void _checkPackageRoot(String path, expectation) {
+ UriResolver resolver = manager.currentContextPackageUriResolvers[path];
+ expect(resolver, new isInstanceOf<PackageUriResolver>());
+ PackageUriResolver packageUriResolver = resolver;
+ expect(packageUriResolver.packagesDirectory_forTesting, expectation);
+ }
}
@@ -698,22 +766,22 @@ class TestContextManager extends ContextManager {
Map<String, int>>{};
/**
- * Map from context to package map.
+ * Map from context to package URI resolver.
*/
- final Map<String, Map<String, List<Folder>>> currentContextPackageMaps =
- <String, Map<String, List<Folder>>>{};
+ final Map<String, UriResolver> currentContextPackageUriResolvers =
+ <String, UriResolver>{};
TestContextManager(MemoryResourceProvider resourceProvider,
PackageMapProvider packageMapProvider)
: super(resourceProvider, packageMapProvider);
@override
- void addContext(Folder folder, Map<String, List<Folder>> packageMap) {
+ void addContext(Folder folder, UriResolver packageUriResolver) {
String path = folder.path;
expect(currentContextPaths, isNot(contains(path)));
currentContextTimestamps[path] = now;
currentContextFilePaths[path] = <String, int>{};
- currentContextPackageMaps[path] = packageMap;
+ currentContextPackageUriResolvers[path] = packageUriResolver;
}
@override
@@ -748,12 +816,12 @@ class TestContextManager extends ContextManager {
expect(currentContextPaths, contains(path));
currentContextTimestamps.remove(path);
currentContextFilePaths.remove(path);
- currentContextPackageMaps.remove(path);
+ currentContextPackageUriResolvers.remove(path);
}
@override
- void updateContextPackageMap(Folder contextFolder, Map<String,
- List<Folder>> packageMap) {
- currentContextPackageMaps[contextFolder.path] = packageMap;
+ void updateContextPackageUriResolver(Folder contextFolder,
+ UriResolver packageUriResolver) {
+ currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver;
}
}

Powered by Google App Engine
This is Rietveld 408576698