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

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

Issue 341123007: Rerun "pub list" when pubspec.lock changes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 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_directory_manager_test.dart
diff --git a/pkg/analysis_server/test/context_directory_manager_test.dart b/pkg/analysis_server/test/context_directory_manager_test.dart
index ac149fc95ccadec48b485adb1872a9b7de1405e7..b4e9762ef2210a7a20a1e5c98b8935ee9eeac0b0 100644
--- a/pkg/analysis_server/test/context_directory_manager_test.dart
+++ b/pkg/analysis_server/test/context_directory_manager_test.dart
@@ -6,14 +6,17 @@ library test.context.directory.manager;
import 'mocks.dart';
import 'package:analysis_server/src/context_directory_manager.dart';
+import 'package:analysis_server/src/package_map_provider.dart';
import 'package:analysis_server/src/resource.dart';
-import 'package:path/path.dart';
-import 'package:unittest/unittest.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/source.dart';
+import 'package:path/path.dart';
+import 'package:unittest/unittest.dart';
class TestContextDirectoryManager extends ContextDirectoryManager {
- TestContextDirectoryManager(MemoryResourceProvider provider) : super(provider);
+ TestContextDirectoryManager(
+ MemoryResourceProvider resourceProvider, PackageMapProvider packageMapProvider)
+ : super(resourceProvider, packageMapProvider);
/**
* Source of timestamps stored in [currentContextFilePaths].
@@ -27,11 +30,18 @@ class TestContextDirectoryManager extends ContextDirectoryManager {
*/
final Map<String, Map<String, int>> currentContextFilePaths = <String, Map<String, int>>{};
+ /**
+ * Map from context to package map
+ */
+ final Map<String, Map<String, List<Folder>>> currentContextPackageMaps =
+ <String, Map<String, List<Folder>>>{};
+
@override
- void addContext(Folder folder) {
+ void addContext(Folder folder, Map<String, List<Folder>> packageMap) {
String path = folder.path;
currentContextPaths.add(path);
currentContextFilePaths[path] = <String, int>{};
+ currentContextPackageMaps[path] = packageMap;
}
@override
@@ -56,6 +66,13 @@ class TestContextDirectoryManager extends ContextDirectoryManager {
String path = folder.path;
currentContextPaths.remove(path);
currentContextFilePaths.remove(path);
+ currentContextPackageMaps.remove(path);
+ }
+
+ @override
+ void updateContextPackageMap(Folder contextFolder,
+ Map<String, List<Folder>> packageMap) {
+ currentContextPackageMaps[contextFolder.path]= packageMap;
}
}
@@ -64,27 +81,40 @@ main() {
group('ContextDirectoryManager', () {
TestContextDirectoryManager manager;
- MemoryResourceProvider provider;
+ MemoryResourceProvider resourceProvider;
+ MockPackageMapProvider packageMapProvider;
setUp(() {
- provider = new MemoryResourceProvider();
- manager = new TestContextDirectoryManager(provider);
+ resourceProvider = new MemoryResourceProvider();
+ packageMapProvider = new MockPackageMapProvider();
+ manager = new TestContextDirectoryManager(resourceProvider, packageMapProvider);
});
test('add folder with pubspec', () {
String projPath = '/my/proj';
String pubspecPath = posix.join(projPath, 'pubspec.yaml');
- provider.newFolder(projPath);
- provider.newFile(pubspecPath, 'pubspec');
+ resourceProvider.newFolder(projPath);
+ resourceProvider.newFile(pubspecPath, 'pubspec');
manager.setRoots(<String>[projPath], <String>[]);
expect(manager.currentContextPaths, hasLength(1));
expect(manager.currentContextPaths, contains(projPath));
expect(manager.currentContextFilePaths[projPath], hasLength(0));
});
+ test('newly added folders get proper package map', () {
+ String projPath = '/my/proj';
+ String packagePath = '/package/foo';
+ resourceProvider.newFolder(projPath);
+ Folder packageFolder = resourceProvider.newFolder(packagePath);
+ packageMapProvider.packageMap = {'foo': [packageFolder]};
+ manager.setRoots(<String>[projPath], <String>[]);
+ expect(manager.currentContextPackageMaps[projPath],
+ equals(packageMapProvider.packageMap));
+ });
+
test('add folder without pubspec', () {
String projPath = '/my/proj';
- provider.newFolder(projPath);
+ resourceProvider.newFolder(projPath);
manager.setRoots(<String>[projPath], <String>[]);
expect(manager.currentContextPaths, hasLength(1));
expect(manager.currentContextPaths, contains(projPath));
@@ -93,9 +123,9 @@ main() {
test('add folder with dart file', () {
String projPath = '/my/proj';
- provider.newFolder(projPath);
+ resourceProvider.newFolder(projPath);
String filePath = posix.join(projPath, 'foo.dart');
- provider.newFile(filePath, 'contents');
+ resourceProvider.newFile(filePath, 'contents');
manager.setRoots(<String>[projPath], <String>[]);
var filePaths = manager.currentContextFilePaths[projPath];
expect(filePaths, hasLength(1));
@@ -104,9 +134,9 @@ main() {
test('add folder with dart file in subdir', () {
String projPath = '/my/proj';
- provider.newFolder(projPath);
+ resourceProvider.newFolder(projPath);
String filePath = posix.join(projPath, 'foo', 'bar.dart');
- provider.newFile(filePath, 'contents');
+ resourceProvider.newFile(filePath, 'contents');
manager.setRoots(<String>[projPath], <String>[]);
var filePaths = manager.currentContextFilePaths[projPath];
expect(filePaths, hasLength(1));
@@ -116,8 +146,8 @@ main() {
test('remove folder with pubspec', () {
String projPath = '/my/proj';
String pubspecPath = posix.join(projPath, 'pubspec.yaml');
- provider.newFolder(projPath);
- provider.newFile(pubspecPath, 'pubspec');
+ resourceProvider.newFolder(projPath);
+ resourceProvider.newFile(pubspecPath, 'pubspec');
manager.setRoots(<String>[projPath], <String>[]);
manager.setRoots(<String>[], <String>[]);
expect(manager.currentContextPaths, hasLength(0));
@@ -126,7 +156,7 @@ main() {
test('remove folder without pubspec', () {
String projPath = '/my/proj';
- provider.newFolder(projPath);
+ resourceProvider.newFolder(projPath);
manager.setRoots(<String>[projPath], <String>[]);
manager.setRoots(<String>[], <String>[]);
expect(manager.currentContextPaths, hasLength(0));
@@ -135,16 +165,16 @@ main() {
test('ignore files in packages dir', () {
String projPath = '/my/proj';
- provider.newFolder(projPath);
+ resourceProvider.newFolder(projPath);
String pubspecPath = posix.join(projPath, 'pubspec.yaml');
- provider.newFile(pubspecPath, 'pubspec');
+ resourceProvider.newFile(pubspecPath, 'pubspec');
String filePath1 = posix.join(projPath, 'packages', 'file1.dart');
- provider.newFile(filePath1, 'contents');
+ resourceProvider.newFile(filePath1, 'contents');
manager.setRoots(<String>[projPath], <String>[]);
Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
expect(filePaths, hasLength(0));
String filePath2 = posix.join(projPath, 'packages', 'file2.dart');
- provider.newFile(filePath2, 'contents');
+ resourceProvider.newFile(filePath2, 'contents');
return pumpEventQueue().then((_) {
expect(filePaths, hasLength(0));
});
@@ -155,7 +185,7 @@ main() {
setUp(() {
projPath = '/my/proj';
- provider.newFolder(projPath);
+ resourceProvider.newFolder(projPath);
});
test('Add file', () {
@@ -163,7 +193,7 @@ main() {
Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
expect(filePaths, hasLength(0));
String filePath = posix.join(projPath, 'foo.dart');
- provider.newFile(filePath, 'contents');
+ resourceProvider.newFile(filePath, 'contents');
return pumpEventQueue().then((_) {
expect(filePaths, hasLength(1));
expect(filePaths, contains(filePath));
@@ -175,7 +205,7 @@ main() {
Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
expect(filePaths, hasLength(0));
String filePath = posix.join(projPath, 'foo', 'bar.dart');
- provider.newFile(filePath, 'contents');
+ resourceProvider.newFile(filePath, 'contents');
return pumpEventQueue().then((_) {
expect(filePaths, hasLength(1));
expect(filePaths, contains(filePath));
@@ -184,28 +214,54 @@ main() {
test('Delete file', () {
String filePath = posix.join(projPath, 'foo.dart');
- provider.newFile(filePath, 'contents');
+ resourceProvider.newFile(filePath, 'contents');
manager.setRoots(<String>[projPath], <String>[]);
Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
expect(filePaths, hasLength(1));
expect(filePaths, contains(filePath));
- provider.deleteFile(filePath);
+ resourceProvider.deleteFile(filePath);
return pumpEventQueue().then((_) => expect(filePaths, hasLength(0)));
});
test('Modify file', () {
String filePath = posix.join(projPath, 'foo.dart');
- provider.newFile(filePath, 'contents');
+ resourceProvider.newFile(filePath, 'contents');
manager.setRoots(<String>[projPath], <String>[]);
Map<String, int> filePaths = manager.currentContextFilePaths[projPath];
expect(filePaths, hasLength(1));
expect(filePaths, contains(filePath));
expect(filePaths[filePath], equals(manager.now));
manager.now++;
- provider.modifyFile(filePath, 'new contents');
+ resourceProvider.modifyFile(filePath, 'new contents');
return pumpEventQueue().then((_) => expect(filePaths[filePath], equals(
manager.now)));
});
+
+ test('Modify package map dependency', () {
+ String dependencyPath = posix.join(projPath, 'dep');
+ resourceProvider.newFile(dependencyPath, 'contents');
+ String dartFilePath = posix.join(projPath, 'main.dart');
+ resourceProvider.newFile(dartFilePath, 'contents');
+ packageMapProvider.dependencies.add(dependencyPath);
+ manager.setRoots(<String>[projPath], <String>[]);
+ expect(manager.currentContextPackageMaps[projPath],
+ equals(packageMapProvider.packageMap));
+ String packagePath = '/package/foo';
+ resourceProvider.newFolder(projPath);
+ packageMapProvider.packageMap = {'foo': projPath};
+ // Changing a .dart file in the project shouldn't cause a new
+ // package map to be picked up.
+ resourceProvider.modifyFile(dartFilePath, 'new contents');
+ return pumpEventQueue().then((_) {
+ expect(manager.currentContextPackageMaps[projPath], isEmpty);
+ // However, changing the package map dependency should.
+ resourceProvider.modifyFile(dependencyPath, 'new contents');
+ return pumpEventQueue().then((_) {
+ expect(manager.currentContextPackageMaps[projPath],
+ equals(packageMapProvider.packageMap));
+ });
+ });
+ });
});
});
}

Powered by Google App Engine
This is Rietveld 408576698