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

Side by Side Diff: pkg/analysis_server/test/context_manager_test.dart

Issue 1214243005: Hook for overriding the creation of a package resolver (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Finish the thought Created 5 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test.context.directory.manager; 5 library test.context.directory.manager;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analysis_server/src/context_manager.dart'; 9 import 'package:analysis_server/src/context_manager.dart';
10 import 'package:analysis_server/src/source/optimizing_pub_package_map_provider.d art'; 10 import 'package:analysis_server/src/source/optimizing_pub_package_map_provider.d art';
11 import 'package:analyzer/file_system/file_system.dart'; 11 import 'package:analyzer/file_system/file_system.dart';
12 import 'package:analyzer/file_system/memory_file_system.dart'; 12 import 'package:analyzer/file_system/memory_file_system.dart';
13 import 'package:analyzer/instrumentation/instrumentation.dart'; 13 import 'package:analyzer/instrumentation/instrumentation.dart';
14 import 'package:analyzer/source/package_map_resolver.dart'; 14 import 'package:analyzer/source/package_map_resolver.dart';
15 import 'package:analyzer/src/generated/engine.dart'; 15 import 'package:analyzer/src/generated/engine.dart';
16 import 'package:analyzer/src/generated/source.dart'; 16 import 'package:analyzer/src/generated/source.dart';
17 import 'package:analyzer/src/generated/source_io.dart'; 17 import 'package:analyzer/src/generated/source_io.dart';
18 import 'package:path/path.dart'; 18 import 'package:path/path.dart';
19 import 'package:test_reflective_loader/test_reflective_loader.dart'; 19 import 'package:test_reflective_loader/test_reflective_loader.dart';
20 import 'package:unittest/unittest.dart'; 20 import 'package:unittest/unittest.dart';
21 21
22 import 'mocks.dart'; 22 import 'mocks.dart';
23 import 'package:analysis_server/uri/resolver_provider.dart';
23 24
24 main() { 25 main() {
25 groupSep = ' | '; 26 groupSep = ' | ';
26 defineReflectiveTests(ContextManagerTest); 27 defineReflectiveTests(ContextManagerTest);
27 } 28 }
28 29
29 @reflectiveTest 30 @reflectiveTest
30 class ContextManagerTest { 31 class ContextManagerTest {
31 /** 32 /**
32 * The name of the 'bin' directory. 33 * The name of the 'bin' directory.
(...skipping 19 matching lines...) Expand all
52 * The name of the 'test' directory. 53 * The name of the 'test' directory.
53 */ 54 */
54 static const String TEST_NAME = 'test'; 55 static const String TEST_NAME = 'test';
55 56
56 TestContextManager manager; 57 TestContextManager manager;
57 58
58 MemoryResourceProvider resourceProvider; 59 MemoryResourceProvider resourceProvider;
59 60
60 MockPackageMapProvider packageMapProvider; 61 MockPackageMapProvider packageMapProvider;
61 62
63 UriResolver packageResolver = null;
64
62 String projPath = '/my/proj'; 65 String projPath = '/my/proj';
63 66
64 String newFile(List<String> pathComponents, [String content = '']) { 67 String newFile(List<String> pathComponents, [String content = '']) {
65 String filePath = posix.joinAll(pathComponents); 68 String filePath = posix.joinAll(pathComponents);
66 resourceProvider.newFile(filePath, content); 69 resourceProvider.newFile(filePath, content);
67 return filePath; 70 return filePath;
68 } 71 }
69 72
70 String newFolder(List<String> pathComponents) { 73 String newFolder(List<String> pathComponents) {
71 String folderPath = posix.joinAll(pathComponents); 74 String folderPath = posix.joinAll(pathComponents);
72 resourceProvider.newFolder(folderPath); 75 resourceProvider.newFolder(folderPath);
73 return folderPath; 76 return folderPath;
74 } 77 }
75 78
79 UriResolver providePackageResolver(Folder folder) {
80 return packageResolver;
81 }
82
76 void setUp() { 83 void setUp() {
77 resourceProvider = new MemoryResourceProvider(); 84 resourceProvider = new MemoryResourceProvider();
78 packageMapProvider = new MockPackageMapProvider(); 85 packageMapProvider = new MockPackageMapProvider();
79 manager = new TestContextManager(resourceProvider, packageMapProvider); 86 manager = new TestContextManager(resourceProvider, providePackageResolver, p ackageMapProvider);
80 resourceProvider.newFolder(projPath); 87 resourceProvider.newFolder(projPath);
81 } 88 }
82 89
83 test_ignoreFilesInPackagesFolder() { 90 test_ignoreFilesInPackagesFolder() {
84 // create a context with a pubspec.yaml file 91 // create a context with a pubspec.yaml file
85 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); 92 String pubspecPath = posix.join(projPath, 'pubspec.yaml');
86 resourceProvider.newFile(pubspecPath, 'pubspec'); 93 resourceProvider.newFile(pubspecPath, 'pubspec');
87 // create a file in the "packages" folder 94 // create a file in the "packages" folder
88 String filePath1 = posix.join(projPath, 'packages', 'file1.dart'); 95 String filePath1 = posix.join(projPath, 'packages', 'file1.dart');
89 resourceProvider.newFile(filePath1, 'contents'); 96 resourceProvider.newFile(filePath1, 'contents');
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 } 195 }
189 196
190 void test_setRoots_addFolderWithDartFile() { 197 void test_setRoots_addFolderWithDartFile() {
191 String filePath = posix.join(projPath, 'foo.dart'); 198 String filePath = posix.join(projPath, 'foo.dart');
192 resourceProvider.newFile(filePath, 'contents'); 199 resourceProvider.newFile(filePath, 'contents');
193 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); 200 manager.setRoots(<String>[projPath], <String>[], <String, String>{});
194 // verify 201 // verify
195 var filePaths = manager.currentContextFilePaths[projPath]; 202 var filePaths = manager.currentContextFilePaths[projPath];
196 expect(filePaths, hasLength(1)); 203 expect(filePaths, hasLength(1));
197 expect(filePaths, contains(filePath)); 204 expect(filePaths, contains(filePath));
205 List<AnalysisContext> contextsInAnalysisRoot = manager.contextsInAnalysisRoo t(resourceProvider.newFolder(projPath));
206 expect(contextsInAnalysisRoot, hasLength(1));
207 AnalysisContext context = contextsInAnalysisRoot[0];
208 expect(context, isNotNull);
209 Source result = context.sourceFactory.forUri('package:foo/foo.dart');
210 expect(result, isNotNull);
211 expect(result.exists(), isFalse);
212 }
213
214 void test_setRoots_packageResolver() {
215 Uri uri = Uri.parse('package:foo/foo.dart');
216 Source source = new TestSource();
217 packageResolver = new TestUriResolver({uri : source});
218 String filePath = posix.join(projPath, 'foo.dart');
219 resourceProvider.newFile(filePath, 'contents');
220 manager.setRoots(<String>[projPath], <String>[], <String, String>{});
221
222 List<AnalysisContext> contextsInAnalysisRoot = manager.contextsInAnalysisRoo t(resourceProvider.newFolder(projPath));
223 expect(contextsInAnalysisRoot, hasLength(1));
224 AnalysisContext context = contextsInAnalysisRoot[0];
225 expect(context, isNotNull);
226 Source result = context.sourceFactory.forUri2(uri);
227 expect(result, same(source));
198 } 228 }
199 229
200 void test_setRoots_addFolderWithDartFileInSubfolder() { 230 void test_setRoots_addFolderWithDartFileInSubfolder() {
201 String filePath = posix.join(projPath, 'foo', 'bar.dart'); 231 String filePath = posix.join(projPath, 'foo', 'bar.dart');
202 resourceProvider.newFile(filePath, 'contents'); 232 resourceProvider.newFile(filePath, 'contents');
203 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); 233 manager.setRoots(<String>[projPath], <String>[], <String, String>{});
204 // verify 234 // verify
205 var filePaths = manager.currentContextFilePaths[projPath]; 235 var filePaths = manager.currentContextFilePaths[projPath];
206 expect(filePaths, hasLength(1)); 236 expect(filePaths, hasLength(1));
207 expect(filePaths, contains(filePath)); 237 expect(filePaths, contains(filePath));
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 final Map<String, Set<Source>> currentContextSources = <String, Set<Source>>{ 1004 final Map<String, Set<Source>> currentContextSources = <String, Set<Source>>{
975 }; 1005 };
976 1006
977 /** 1007 /**
978 * Map from context to package URI resolver. 1008 * Map from context to package URI resolver.
979 */ 1009 */
980 final Map<String, UriResolver> currentContextPackageUriResolvers = 1010 final Map<String, UriResolver> currentContextPackageUriResolvers =
981 <String, UriResolver>{}; 1011 <String, UriResolver>{};
982 1012
983 TestContextManager(MemoryResourceProvider resourceProvider, 1013 TestContextManager(MemoryResourceProvider resourceProvider,
1014 ResolverProvider packageResolverProvider,
984 OptimizingPubPackageMapProvider packageMapProvider) 1015 OptimizingPubPackageMapProvider packageMapProvider)
985 : super(resourceProvider, packageMapProvider, 1016 : super(resourceProvider, packageResolverProvider, packageMapProvider,
986 InstrumentationService.NULL_SERVICE); 1017 InstrumentationService.NULL_SERVICE);
987 1018
988 /** 1019 /**
989 * Iterable of the paths to contexts that currently exist. 1020 * Iterable of the paths to contexts that currently exist.
990 */ 1021 */
991 Iterable<String> get currentContextPaths => currentContextTimestamps.keys; 1022 Iterable<String> get currentContextPaths => currentContextTimestamps.keys;
992 1023
993 @override 1024 @override
994 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver) { 1025 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver) {
995 String path = folder.path; 1026 String path = folder.path;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 // causing the analyzer to thrash, just ignore links to non-existent files. 1090 // causing the analyzer to thrash, just ignore links to non-existent files.
1060 return file.exists; 1091 return file.exists;
1061 } 1092 }
1062 1093
1063 @override 1094 @override
1064 void updateContextPackageUriResolver( 1095 void updateContextPackageUriResolver(
1065 Folder contextFolder, UriResolver packageUriResolver) { 1096 Folder contextFolder, UriResolver packageUriResolver) {
1066 currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver; 1097 currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver;
1067 } 1098 }
1068 } 1099 }
1100
1101 class TestUriResolver extends UriResolver {
1102 Map<Uri, Source> uriMap;
1103
1104 TestUriResolver(this.uriMap);
1105
1106 @override
1107 Source resolveAbsolute(Uri uri) {
1108 return uriMap[uri];
1109 }
1110 }
1111
1112 /**
1113 * A [Source] that knows it's [fullName].
1114 */
1115 class TestSource implements Source {
1116 TestSource();
1117
1118 @override
1119 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
1120 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698