OLD | NEW |
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:analysis_server/uri/resolver_provider.dart'; | 11 import 'package:analysis_server/uri/resolver_provider.dart'; |
12 import 'package:analyzer/file_system/file_system.dart'; | 12 import 'package:analyzer/file_system/file_system.dart'; |
13 import 'package:analyzer/file_system/memory_file_system.dart'; | 13 import 'package:analyzer/file_system/memory_file_system.dart'; |
14 import 'package:analyzer/instrumentation/instrumentation.dart'; | 14 import 'package:analyzer/instrumentation/instrumentation.dart'; |
15 import 'package:analyzer/source/package_map_resolver.dart'; | 15 import 'package:analyzer/source/package_map_resolver.dart'; |
16 import 'package:analyzer/src/generated/engine.dart'; | 16 import 'package:analyzer/src/generated/engine.dart'; |
17 import 'package:analyzer/src/generated/source.dart'; | 17 import 'package:analyzer/src/generated/source.dart'; |
18 import 'package:analyzer/src/generated/source_io.dart'; | 18 import 'package:analyzer/src/generated/source_io.dart'; |
| 19 import 'package:package_config/packages.dart'; |
19 import 'package:path/path.dart'; | 20 import 'package:path/path.dart'; |
20 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 21 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
21 import 'package:unittest/unittest.dart'; | 22 import 'package:unittest/unittest.dart'; |
22 | 23 |
23 import 'mocks.dart'; | 24 import 'mocks.dart'; |
24 | 25 |
25 main() { | 26 main() { |
26 groupSep = ' | '; | 27 groupSep = ' | '; |
27 defineReflectiveTests(AbstractContextManagerTest); | 28 defineReflectiveTests(AbstractContextManagerTest); |
28 } | 29 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 UriResolver providePackageResolver(Folder folder) { | 80 UriResolver providePackageResolver(Folder folder) { |
80 return packageResolver; | 81 return packageResolver; |
81 } | 82 } |
82 | 83 |
83 void setUp() { | 84 void setUp() { |
84 resourceProvider = new MemoryResourceProvider(); | 85 resourceProvider = new MemoryResourceProvider(); |
85 packageMapProvider = new MockPackageMapProvider(); | 86 packageMapProvider = new MockPackageMapProvider(); |
86 manager = new TestContextManager( | 87 manager = new TestContextManager( |
87 resourceProvider, providePackageResolver, packageMapProvider); | 88 resourceProvider, providePackageResolver, packageMapProvider); |
88 resourceProvider.newFolder(projPath); | 89 resourceProvider.newFolder(projPath); |
| 90 AbstractContextManager.ENABLE_PACKAGESPEC_SUPPORT = true; |
| 91 } |
| 92 |
| 93 void tearDown() { |
| 94 AbstractContextManager.ENABLE_PACKAGESPEC_SUPPORT = false; |
89 } | 95 } |
90 | 96 |
91 test_ignoreFilesInPackagesFolder() { | 97 test_ignoreFilesInPackagesFolder() { |
92 // create a context with a pubspec.yaml file | 98 // create a context with a pubspec.yaml file |
93 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); | 99 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); |
94 resourceProvider.newFile(pubspecPath, 'pubspec'); | 100 resourceProvider.newFile(pubspecPath, 'pubspec'); |
95 // create a file in the "packages" folder | 101 // create a file in the "packages" folder |
96 String filePath1 = posix.join(projPath, 'packages', 'file1.dart'); | 102 String filePath1 = posix.join(projPath, 'packages', 'file1.dart'); |
97 resourceProvider.newFile(filePath1, 'contents'); | 103 resourceProvider.newFile(filePath1, 'contents'); |
98 // "packages" files are ignored initially | 104 // "packages" files are ignored initially |
(...skipping 23 matching lines...) Expand all Loading... |
122 void test_isInAnalysisRoot_inRoot() { | 128 void test_isInAnalysisRoot_inRoot() { |
123 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 129 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
124 expect(manager.isInAnalysisRoot('$projPath/test.dart'), isTrue); | 130 expect(manager.isInAnalysisRoot('$projPath/test.dart'), isTrue); |
125 } | 131 } |
126 | 132 |
127 void test_isInAnalysisRoot_notInRoot() { | 133 void test_isInAnalysisRoot_notInRoot() { |
128 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 134 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
129 expect(manager.isInAnalysisRoot('/test.dart'), isFalse); | 135 expect(manager.isInAnalysisRoot('/test.dart'), isFalse); |
130 } | 136 } |
131 | 137 |
| 138 test_refresh_folder_with_packagespec() { |
| 139 // create a context with a .packages file |
| 140 String packagespecFile = posix.join(projPath, '.packages'); |
| 141 resourceProvider.newFile(packagespecFile, ''); |
| 142 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
| 143 return pumpEventQueue().then((_) { |
| 144 expect(manager.currentContextPaths.toList(), [projPath]); |
| 145 manager.now++; |
| 146 manager.refresh(null); |
| 147 return pumpEventQueue().then((_) { |
| 148 expect(manager.currentContextPaths.toList(), [projPath]); |
| 149 expect(manager.currentContextTimestamps[projPath], manager.now); |
| 150 }); |
| 151 }); |
| 152 } |
| 153 |
| 154 test_refresh_folder_with_packagespec_subfolders() { |
| 155 // Create a folder with no .packages file, containing two subfolders with |
| 156 // .packages files. |
| 157 String subdir1Path = posix.join(projPath, 'subdir1'); |
| 158 String subdir2Path = posix.join(projPath, 'subdir2'); |
| 159 String packagespec1Path = posix.join(subdir1Path, '.packages'); |
| 160 String packagespec2Path = posix.join(subdir2Path, '.packages'); |
| 161 resourceProvider.newFile(packagespec1Path, ''); |
| 162 resourceProvider.newFile(packagespec2Path, ''); |
| 163 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
| 164 return pumpEventQueue().then((_) { |
| 165 expect(manager.currentContextPaths.toSet(), |
| 166 [subdir1Path, subdir2Path, projPath].toSet()); |
| 167 manager.now++; |
| 168 manager.refresh(null); |
| 169 return pumpEventQueue().then((_) { |
| 170 expect(manager.currentContextPaths.toSet(), |
| 171 [subdir1Path, subdir2Path, projPath].toSet()); |
| 172 expect(manager.currentContextTimestamps[projPath], manager.now); |
| 173 expect(manager.currentContextTimestamps[subdir1Path], manager.now); |
| 174 expect(manager.currentContextTimestamps[subdir2Path], manager.now); |
| 175 }); |
| 176 }); |
| 177 } |
| 178 |
132 test_refresh_folder_with_pubspec() { | 179 test_refresh_folder_with_pubspec() { |
133 // create a context with a pubspec.yaml file | 180 // create a context with a pubspec.yaml file |
134 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); | 181 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); |
135 resourceProvider.newFile(pubspecPath, 'pubspec'); | 182 resourceProvider.newFile(pubspecPath, 'pubspec'); |
136 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 183 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
137 return pumpEventQueue().then((_) { | 184 return pumpEventQueue().then((_) { |
138 expect(manager.currentContextPaths.toList(), [projPath]); | 185 expect(manager.currentContextPaths.toList(), [projPath]); |
139 manager.now++; | 186 manager.now++; |
140 manager.refresh(null); | 187 manager.refresh(null); |
141 return pumpEventQueue().then((_) { | 188 return pumpEventQueue().then((_) { |
(...skipping 27 matching lines...) Expand all Loading... |
169 }); | 216 }); |
170 }); | 217 }); |
171 } | 218 } |
172 | 219 |
173 test_path_filter() async { | 220 test_path_filter() async { |
174 // Setup context. | 221 // Setup context. |
175 Folder root = resourceProvider.newFolder(projPath); | 222 Folder root = resourceProvider.newFolder(projPath); |
176 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 223 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
177 expect(manager.currentContextFilePaths[projPath], isEmpty); | 224 expect(manager.currentContextFilePaths[projPath], isEmpty); |
178 // Set ignore patterns for context. | 225 // Set ignore patterns for context. |
179 manager.setIgnorePatternsForContext(root, | 226 manager.setIgnorePatternsForContext( |
180 ['sdk_ext/**', 'lib/ignoreme.dart']); | 227 root, ['sdk_ext/**', 'lib/ignoreme.dart']); |
181 // Start creating files. | 228 // Start creating files. |
182 newFile([projPath, AbstractContextManager.PUBSPEC_NAME]); | 229 newFile([projPath, AbstractContextManager.PUBSPEC_NAME]); |
183 String libPath = newFolder([projPath, LIB_NAME]); | 230 String libPath = newFolder([projPath, LIB_NAME]); |
184 newFile([libPath, 'main.dart']); | 231 newFile([libPath, 'main.dart']); |
185 newFile([libPath, 'ignoreme.dart']); | 232 newFile([libPath, 'ignoreme.dart']); |
186 String sdkExtPath = newFolder([projPath, 'sdk_ext']); | 233 String sdkExtPath = newFolder([projPath, 'sdk_ext']); |
187 newFile([sdkExtPath, 'entry.dart']); | 234 newFile([sdkExtPath, 'entry.dart']); |
188 String sdkExtSrcPath = newFolder([projPath, 'sdk_ext', 'src']); | 235 String sdkExtSrcPath = newFolder([projPath, 'sdk_ext', 'src']); |
189 newFile([sdkExtSrcPath, 'part.dart']); | 236 newFile([sdkExtSrcPath, 'part.dart']); |
190 // Pump event loop so new files are discovered and added to context. | 237 // Pump event loop so new files are discovered and added to context. |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 | 325 |
279 void test_setRoots_addFolderWithDummyLink() { | 326 void test_setRoots_addFolderWithDummyLink() { |
280 String filePath = posix.join(projPath, 'foo.dart'); | 327 String filePath = posix.join(projPath, 'foo.dart'); |
281 resourceProvider.newDummyLink(filePath); | 328 resourceProvider.newDummyLink(filePath); |
282 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 329 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
283 // verify | 330 // verify |
284 var filePaths = manager.currentContextFilePaths[projPath]; | 331 var filePaths = manager.currentContextFilePaths[projPath]; |
285 expect(filePaths, isEmpty); | 332 expect(filePaths, isEmpty); |
286 } | 333 } |
287 | 334 |
| 335 void test_setRoots_addFolderWithNestedPackageSpec() { |
| 336 String examplePath = newFolder([projPath, EXAMPLE_NAME]); |
| 337 String libPath = newFolder([projPath, LIB_NAME]); |
| 338 |
| 339 newFile([projPath, AbstractContextManager.PACKAGE_SPEC_NAME]); |
| 340 newFile([libPath, 'main.dart']); |
| 341 newFile([examplePath, AbstractContextManager.PACKAGE_SPEC_NAME]); |
| 342 newFile([examplePath, 'example.dart']); |
| 343 |
| 344 packageMapProvider.packageMap['proj'] = |
| 345 [resourceProvider.getResource(libPath)]; |
| 346 |
| 347 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
| 348 |
| 349 expect(manager.currentContextPaths, hasLength(2)); |
| 350 |
| 351 expect(manager.currentContextPaths, contains(projPath)); |
| 352 Set<Source> projSources = manager.currentContextSources[projPath]; |
| 353 expect(projSources, hasLength(1)); |
| 354 expect(projSources.first.uri.toString(), 'file:///my/proj/lib/main.dart'); |
| 355 |
| 356 expect(manager.currentContextPaths, contains(examplePath)); |
| 357 Set<Source> exampleSources = manager.currentContextSources[examplePath]; |
| 358 expect(exampleSources, hasLength(1)); |
| 359 expect(exampleSources.first.uri.toString(), |
| 360 'file:///my/proj/example/example.dart'); |
| 361 } |
| 362 |
288 void test_setRoots_addFolderWithNestedPubspec() { | 363 void test_setRoots_addFolderWithNestedPubspec() { |
289 String examplePath = newFolder([projPath, EXAMPLE_NAME]); | 364 String examplePath = newFolder([projPath, EXAMPLE_NAME]); |
290 String libPath = newFolder([projPath, LIB_NAME]); | 365 String libPath = newFolder([projPath, LIB_NAME]); |
291 | 366 |
292 newFile([projPath, AbstractContextManager.PUBSPEC_NAME]); | 367 newFile([projPath, AbstractContextManager.PUBSPEC_NAME]); |
293 newFile([libPath, 'main.dart']); | 368 newFile([libPath, 'main.dart']); |
294 newFile([examplePath, AbstractContextManager.PUBSPEC_NAME]); | 369 newFile([examplePath, AbstractContextManager.PUBSPEC_NAME]); |
295 newFile([examplePath, 'example.dart']); | 370 newFile([examplePath, 'example.dart']); |
296 | 371 |
297 packageMapProvider.packageMap['proj'] = | 372 packageMapProvider.packageMap['proj'] = |
(...skipping 17 matching lines...) Expand all Loading... |
315 | 390 |
316 void test_setRoots_addFolderWithoutPubspec() { | 391 void test_setRoots_addFolderWithoutPubspec() { |
317 packageMapProvider.packageMap = null; | 392 packageMapProvider.packageMap = null; |
318 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 393 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
319 // verify | 394 // verify |
320 expect(manager.currentContextPaths, hasLength(1)); | 395 expect(manager.currentContextPaths, hasLength(1)); |
321 expect(manager.currentContextPaths, contains(projPath)); | 396 expect(manager.currentContextPaths, contains(projPath)); |
322 expect(manager.currentContextFilePaths[projPath], hasLength(0)); | 397 expect(manager.currentContextFilePaths[projPath], hasLength(0)); |
323 } | 398 } |
324 | 399 |
| 400 void test_setRoots_addFolderWithPackagespec() { |
| 401 String packagespecPath = posix.join(projPath, '.packages'); |
| 402 resourceProvider.newFile(packagespecPath, |
| 403 'unittest:file:///home/somebody/.pub/cache/unittest-0.9.9/lib/'); |
| 404 String libPath = newFolder([projPath, LIB_NAME]); |
| 405 File mainFile = |
| 406 resourceProvider.newFile(posix.join(libPath, 'main.dart'), ''); |
| 407 Source source = mainFile.createSource(); |
| 408 |
| 409 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
| 410 |
| 411 // verify |
| 412 expect(manager.currentContextPaths, hasLength(1)); |
| 413 expect(manager.currentContextPaths, contains(projPath)); |
| 414 expect(manager.currentContextFilePaths[projPath], hasLength(1)); |
| 415 |
| 416 // smoketest resolution |
| 417 SourceFactory sourceFactory = manager.currentContext.sourceFactory; |
| 418 Source resolvedSource = |
| 419 sourceFactory.resolveUri(source, 'package:unittest/unittest.dart'); |
| 420 expect(resolvedSource, isNotNull); |
| 421 expect(resolvedSource.fullName, |
| 422 equals('/home/somebody/.pub/cache/unittest-0.9.9/lib/unittest.dart')); |
| 423 } |
| 424 |
325 void test_setRoots_addFolderWithPubspec() { | 425 void test_setRoots_addFolderWithPubspec() { |
326 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); | 426 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); |
327 resourceProvider.newFile(pubspecPath, 'pubspec'); | 427 resourceProvider.newFile(pubspecPath, 'pubspec'); |
328 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 428 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
329 // verify | 429 // verify |
330 expect(manager.currentContextPaths, hasLength(1)); | 430 expect(manager.currentContextPaths, hasLength(1)); |
331 expect(manager.currentContextPaths, contains(projPath)); | 431 expect(manager.currentContextPaths, contains(projPath)); |
332 expect(manager.currentContextFilePaths[projPath], hasLength(0)); | 432 expect(manager.currentContextFilePaths[projPath], hasLength(0)); |
333 } | 433 } |
334 | 434 |
| 435 void test_setRoots_addFolderWithPubspec_andPackagespec() { |
| 436 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); |
| 437 String packagespecPath = posix.join(projPath, '.packages'); |
| 438 resourceProvider.newFile(pubspecPath, 'pubspec'); |
| 439 resourceProvider.newFile(packagespecPath, ''); |
| 440 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
| 441 // verify |
| 442 manager.assertContextPaths([projPath]); |
| 443 } |
| 444 |
335 void test_setRoots_addFolderWithPubspecAndLib() { | 445 void test_setRoots_addFolderWithPubspecAndLib() { |
336 String binPath = newFolder([projPath, BIN_NAME]); | 446 String binPath = newFolder([projPath, BIN_NAME]); |
337 String libPath = newFolder([projPath, LIB_NAME]); | 447 String libPath = newFolder([projPath, LIB_NAME]); |
338 String srcPath = newFolder([libPath, SRC_NAME]); | 448 String srcPath = newFolder([libPath, SRC_NAME]); |
339 String testPath = newFolder([projPath, TEST_NAME]); | 449 String testPath = newFolder([projPath, TEST_NAME]); |
340 | 450 |
341 newFile([projPath, AbstractContextManager.PUBSPEC_NAME]); | 451 newFile([projPath, AbstractContextManager.PUBSPEC_NAME]); |
342 String appPath = newFile([binPath, 'app.dart']); | 452 String appPath = newFile([binPath, 'app.dart']); |
343 newFile([libPath, 'main.dart']); | 453 newFile([libPath, 'main.dart']); |
344 newFile([srcPath, 'internal.dart']); | 454 newFile([srcPath, 'internal.dart']); |
345 String testFilePath = newFile([testPath, 'main_test.dart']); | 455 String testFilePath = newFile([testPath, 'main_test.dart']); |
346 | 456 |
347 packageMapProvider.packageMap['proj'] = | 457 packageMapProvider.packageMap['proj'] = |
348 [resourceProvider.getResource(libPath)]; | 458 [resourceProvider.getResource(libPath)]; |
349 | 459 |
350 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 460 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
351 Set<Source> sources = manager.currentContextSources[projPath]; | 461 Set<Source> sources = manager.currentContextSources[projPath]; |
352 | 462 |
353 expect(manager.currentContextPaths, hasLength(1)); | 463 expect(manager.currentContextPaths, hasLength(1)); |
354 expect(manager.currentContextPaths, contains(projPath)); | 464 expect(manager.currentContextPaths, contains(projPath)); |
355 expect(sources, hasLength(4)); | 465 expect(sources, hasLength(4)); |
356 List<String> uris = | 466 List<String> uris = |
357 sources.map((Source source) => source.uri.toString()).toList(); | 467 sources.map((Source source) => source.uri.toString()).toList(); |
358 expect(uris, contains('file://$appPath')); | 468 expect(uris, contains('file://$appPath')); |
359 expect(uris, contains('package:proj/main.dart')); | 469 expect(uris, contains('package:proj/main.dart')); |
360 expect(uris, contains('package:proj/src/internal.dart')); | 470 expect(uris, contains('package:proj/src/internal.dart')); |
361 expect(uris, contains('file://$testFilePath')); | 471 expect(uris, contains('file://$testFilePath')); |
362 } | 472 } |
363 | 473 |
| 474 void test_setRoots_addFolderWithPubspecAndPackagespecFolders() { |
| 475 // prepare paths |
| 476 String root = '/root'; |
| 477 String rootFile = '$root/root.dart'; |
| 478 String subProjectA = '$root/sub/aaa'; |
| 479 String subProjectB = '$root/sub/sub2/bbb'; |
| 480 String subProjectA_file = '$subProjectA/bin/a.dart'; |
| 481 String subProjectB_file = '$subProjectB/bin/b.dart'; |
| 482 // create files |
| 483 resourceProvider.newFile('$subProjectA/pubspec.yaml', 'pubspec'); |
| 484 resourceProvider.newFile('$subProjectB/pubspec.yaml', 'pubspec'); |
| 485 resourceProvider.newFile('$subProjectA/.packages', ''); |
| 486 resourceProvider.newFile('$subProjectB/.packages', ''); |
| 487 |
| 488 resourceProvider.newFile(rootFile, 'library root;'); |
| 489 resourceProvider.newFile(subProjectA_file, 'library a;'); |
| 490 resourceProvider.newFile(subProjectB_file, 'library b;'); |
| 491 |
| 492 // set roots |
| 493 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
| 494 manager.assertContextPaths([root, subProjectA, subProjectB]); |
| 495 // verify files |
| 496 manager.assertContextFiles(root, [rootFile]); |
| 497 manager.assertContextFiles(subProjectA, [subProjectA_file]); |
| 498 manager.assertContextFiles(subProjectB, [subProjectB_file]); |
| 499 } |
| 500 |
364 void test_setRoots_addFolderWithPubspecFolders() { | 501 void test_setRoots_addFolderWithPubspecFolders() { |
365 // prepare paths | 502 // prepare paths |
366 String root = '/root'; | 503 String root = '/root'; |
367 String rootFile = '$root/root.dart'; | 504 String rootFile = '$root/root.dart'; |
368 String subProjectA = '$root/sub/aaa'; | 505 String subProjectA = '$root/sub/aaa'; |
369 String subProjectB = '$root/sub/sub2/bbb'; | 506 String subProjectB = '$root/sub/sub2/bbb'; |
370 String subProjectA_file = '$subProjectA/bin/a.dart'; | 507 String subProjectA_file = '$subProjectA/bin/a.dart'; |
371 String subProjectB_file = '$subProjectB/bin/b.dart'; | 508 String subProjectB_file = '$subProjectB/bin/b.dart'; |
372 // create files | 509 // create files |
373 resourceProvider.newFile('$subProjectA/pubspec.yaml', 'pubspec'); | 510 resourceProvider.newFile('$subProjectA/pubspec.yaml', 'pubspec'); |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 packageMapProvider.packageMap = null; | 723 packageMapProvider.packageMap = null; |
587 // add one root - there is a context | 724 // add one root - there is a context |
588 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 725 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
589 expect(manager.currentContextPaths, hasLength(1)); | 726 expect(manager.currentContextPaths, hasLength(1)); |
590 // set empty roots - no contexts | 727 // set empty roots - no contexts |
591 manager.setRoots(<String>[], <String>[], <String, String>{}); | 728 manager.setRoots(<String>[], <String>[], <String, String>{}); |
592 expect(manager.currentContextPaths, hasLength(0)); | 729 expect(manager.currentContextPaths, hasLength(0)); |
593 expect(manager.currentContextFilePaths, hasLength(0)); | 730 expect(manager.currentContextFilePaths, hasLength(0)); |
594 } | 731 } |
595 | 732 |
| 733 void test_setRoots_removeFolderWithPackagespec() { |
| 734 // create a pubspec |
| 735 String pubspecPath = posix.join(projPath, '.packages'); |
| 736 resourceProvider.newFile(pubspecPath, ''); |
| 737 // add one root - there is a context |
| 738 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
| 739 expect(manager.currentContextPaths, hasLength(1)); |
| 740 // set empty roots - no contexts |
| 741 manager.setRoots(<String>[], <String>[], <String, String>{}); |
| 742 expect(manager.currentContextPaths, hasLength(0)); |
| 743 expect(manager.currentContextFilePaths, hasLength(0)); |
| 744 } |
| 745 |
| 746 void test_setRoots_removeFolderWithPackagespecFolder() { |
| 747 // prepare paths |
| 748 String projectA = '/projectA'; |
| 749 String projectB = '/projectB'; |
| 750 String subProjectA = '$projectA/sub'; |
| 751 String subProjectB = '$projectB/sub'; |
| 752 String projectA_file = '$projectA/a.dart'; |
| 753 String projectB_file = '$projectB/a.dart'; |
| 754 String subProjectA_pubspec = '$subProjectA/.packages'; |
| 755 String subProjectB_pubspec = '$subProjectB/.packages'; |
| 756 String subProjectA_file = '$subProjectA/bin/sub_a.dart'; |
| 757 String subProjectB_file = '$subProjectB/bin/sub_b.dart'; |
| 758 // create files |
| 759 resourceProvider.newFile(projectA_file, '// a'); |
| 760 resourceProvider.newFile(projectB_file, '// b'); |
| 761 resourceProvider.newFile(subProjectA_pubspec, ''); |
| 762 resourceProvider.newFile(subProjectB_pubspec, ''); |
| 763 resourceProvider.newFile(subProjectA_file, '// sub-a'); |
| 764 resourceProvider.newFile(subProjectB_file, '// sub-b'); |
| 765 // set roots |
| 766 manager.setRoots( |
| 767 <String>[projectA, projectB], <String>[], <String, String>{}); |
| 768 manager.assertContextPaths([projectA, subProjectA, projectB, subProjectB]); |
| 769 manager.assertContextFiles(projectA, [projectA_file]); |
| 770 manager.assertContextFiles(projectB, [projectB_file]); |
| 771 manager.assertContextFiles(subProjectA, [subProjectA_file]); |
| 772 manager.assertContextFiles(subProjectB, [subProjectB_file]); |
| 773 // remove "projectB" |
| 774 manager.setRoots(<String>[projectA], <String>[], <String, String>{}); |
| 775 manager.assertContextPaths([projectA, subProjectA]); |
| 776 manager.assertContextFiles(projectA, [projectA_file]); |
| 777 manager.assertContextFiles(subProjectA, [subProjectA_file]); |
| 778 } |
| 779 |
596 void test_setRoots_removeFolderWithPubspec() { | 780 void test_setRoots_removeFolderWithPubspec() { |
597 // create a pubspec | 781 // create a pubspec |
598 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); | 782 String pubspecPath = posix.join(projPath, 'pubspec.yaml'); |
599 resourceProvider.newFile(pubspecPath, 'pubspec'); | 783 resourceProvider.newFile(pubspecPath, 'pubspec'); |
600 // add one root - there is a context | 784 // add one root - there is a context |
601 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); | 785 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
602 expect(manager.currentContextPaths, hasLength(1)); | 786 expect(manager.currentContextPaths, hasLength(1)); |
603 // set empty roots - no contexts | 787 // set empty roots - no contexts |
604 manager.setRoots(<String>[], <String>[], <String, String>{}); | 788 manager.setRoots(<String>[], <String>[], <String, String>{}); |
605 expect(manager.currentContextPaths, hasLength(0)); | 789 expect(manager.currentContextPaths, hasLength(0)); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 // add file in subfolder | 897 // add file in subfolder |
714 String filePath = posix.join(projPath, 'foo', 'bar.dart'); | 898 String filePath = posix.join(projPath, 'foo', 'bar.dart'); |
715 resourceProvider.newFile(filePath, 'contents'); | 899 resourceProvider.newFile(filePath, 'contents'); |
716 // the file was added | 900 // the file was added |
717 return pumpEventQueue().then((_) { | 901 return pumpEventQueue().then((_) { |
718 expect(filePaths, hasLength(1)); | 902 expect(filePaths, hasLength(1)); |
719 expect(filePaths, contains(filePath)); | 903 expect(filePaths, contains(filePath)); |
720 }); | 904 }); |
721 } | 905 } |
722 | 906 |
| 907 test_watch_addPackagespec_toRoot() { |
| 908 // prepare paths |
| 909 String root = '/root'; |
| 910 String rootFile = '$root/root.dart'; |
| 911 String rootPackagespec = '$root/.packages'; |
| 912 // create files |
| 913 resourceProvider.newFile(rootFile, 'library root;'); |
| 914 // set roots |
| 915 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
| 916 manager.assertContextPaths([root]); |
| 917 // verify files |
| 918 manager.assertContextFiles(root, [rootFile]); |
| 919 // add packagespec - still just one root |
| 920 resourceProvider.newFile(rootPackagespec, ''); |
| 921 return pumpEventQueue().then((_) { |
| 922 manager.assertContextPaths([root]); |
| 923 manager.assertContextFiles(root, [rootFile]); |
| 924 // TODO(pquitslund): verify that a new source factory is created -- |
| 925 // likely this will need to happen in a corresponding ServerContextManager
Test. |
| 926 }); |
| 927 } |
| 928 |
| 929 test_watch_addPackagespec_toSubFolder() { |
| 930 // prepare paths |
| 931 String root = '/root'; |
| 932 String rootFile = '$root/root.dart'; |
| 933 String subProject = '$root/sub/aaa'; |
| 934 String subPubspec = '$subProject/.packages'; |
| 935 String subFile = '$subProject/bin/a.dart'; |
| 936 // create files |
| 937 resourceProvider.newFile(rootFile, 'library root;'); |
| 938 resourceProvider.newFile(subFile, 'library a;'); |
| 939 // set roots |
| 940 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
| 941 manager.assertContextPaths([root]); |
| 942 // verify files |
| 943 manager.assertContextFiles(root, [rootFile, subFile]); |
| 944 // add .packages |
| 945 resourceProvider.newFile(subPubspec, ''); |
| 946 return pumpEventQueue().then((_) { |
| 947 manager.assertContextPaths([root, subProject]); |
| 948 manager.assertContextFiles(root, [rootFile]); |
| 949 manager.assertContextFiles(subProject, [subFile]); |
| 950 }); |
| 951 } |
| 952 |
| 953 test_watch_addPackagespec_toSubFolder_ofSubFolder() { |
| 954 // prepare paths |
| 955 String root = '/root'; |
| 956 String rootFile = '$root/root.dart'; |
| 957 String subProject = '$root/sub'; |
| 958 String subPubspec = '$subProject/.packages'; |
| 959 String subFile = '$subProject/bin/sub.dart'; |
| 960 String subSubPubspec = '$subProject/subsub/.packages'; |
| 961 // create files |
| 962 resourceProvider.newFile(rootFile, 'library root;'); |
| 963 resourceProvider.newFile(subPubspec, ''); |
| 964 resourceProvider.newFile(subFile, 'library sub;'); |
| 965 // set roots |
| 966 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
| 967 manager.assertContextPaths([root, subProject]); |
| 968 manager.assertContextFiles(root, [rootFile]); |
| 969 manager.assertContextFiles(subProject, [subFile]); |
| 970 // add pubspec - ignore, because is already in a packagespec-based context |
| 971 resourceProvider.newFile(subSubPubspec, ''); |
| 972 return pumpEventQueue().then((_) { |
| 973 manager.assertContextPaths([root, subProject]); |
| 974 manager.assertContextFiles(root, [rootFile]); |
| 975 manager.assertContextFiles(subProject, [subFile]); |
| 976 }); |
| 977 } |
| 978 |
| 979 test_watch_addPackagespec_toSubFolder_withPubspec() { |
| 980 // prepare paths |
| 981 String root = '/root'; |
| 982 String rootFile = '$root/root.dart'; |
| 983 String subProject = '$root/sub/aaa'; |
| 984 String subPackagespec = '$subProject/.packages'; |
| 985 String subPubspec = '$subProject/pubspec.yaml'; |
| 986 String subFile = '$subProject/bin/a.dart'; |
| 987 // create files |
| 988 resourceProvider.newFile(subPubspec, 'pubspec'); |
| 989 resourceProvider.newFile(rootFile, 'library root;'); |
| 990 resourceProvider.newFile(subFile, 'library a;'); |
| 991 // set roots |
| 992 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
| 993 manager.assertContextPaths([root, subProject]); |
| 994 // verify files |
| 995 manager.assertContextFiles(root, [rootFile]); |
| 996 manager.assertContextFiles(subProject, [subFile]); |
| 997 |
| 998 // add .packages |
| 999 resourceProvider.newFile(subPackagespec, ''); |
| 1000 return pumpEventQueue().then((_) { |
| 1001 // Should NOT create another context. |
| 1002 manager.assertContextPaths([root, subProject]); |
| 1003 manager.assertContextFiles(root, [rootFile]); |
| 1004 manager.assertContextFiles(subProject, [subFile]); |
| 1005 }); |
| 1006 } |
| 1007 |
723 test_watch_addPubspec_toRoot() { | 1008 test_watch_addPubspec_toRoot() { |
724 // prepare paths | 1009 // prepare paths |
725 String root = '/root'; | 1010 String root = '/root'; |
726 String rootFile = '$root/root.dart'; | 1011 String rootFile = '$root/root.dart'; |
727 String rootPubspec = '$root/pubspec.yaml'; | 1012 String rootPubspec = '$root/pubspec.yaml'; |
728 // create files | 1013 // create files |
729 resourceProvider.newFile(rootFile, 'library root;'); | 1014 resourceProvider.newFile(rootFile, 'library root;'); |
730 // set roots | 1015 // set roots |
731 manager.setRoots(<String>[root], <String>[], <String, String>{}); | 1016 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
732 manager.assertContextPaths([root]); | 1017 manager.assertContextPaths([root]); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 expect(projFolder.exists, isTrue); | 1110 expect(projFolder.exists, isTrue); |
826 // delete the folder | 1111 // delete the folder |
827 resourceProvider.deleteFolder(projPath); | 1112 resourceProvider.deleteFolder(projPath); |
828 return pumpEventQueue().then((_) { | 1113 return pumpEventQueue().then((_) { |
829 expect(file.exists, isFalse); | 1114 expect(file.exists, isFalse); |
830 expect(projFolder.exists, isFalse); | 1115 expect(projFolder.exists, isFalse); |
831 return expect(filePaths, hasLength(0)); | 1116 return expect(filePaths, hasLength(0)); |
832 }); | 1117 }); |
833 } | 1118 } |
834 | 1119 |
| 1120 test_watch_deletePackagespec_fromRoot() { |
| 1121 // prepare paths |
| 1122 String root = '/root'; |
| 1123 String rootPubspec = '$root/.packages'; |
| 1124 String rootFile = '$root/root.dart'; |
| 1125 // create files |
| 1126 resourceProvider.newFile(rootPubspec, ''); |
| 1127 resourceProvider.newFile(rootFile, 'library root;'); |
| 1128 // set roots |
| 1129 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
| 1130 manager.assertContextPaths([root]); |
| 1131 manager.assertContextFiles(root, [rootFile]); |
| 1132 // delete the pubspec |
| 1133 resourceProvider.deleteFile(rootPubspec); |
| 1134 return pumpEventQueue().then((_) { |
| 1135 manager.assertContextPaths([root]); |
| 1136 manager.assertContextFiles(root, [rootFile]); |
| 1137 }); |
| 1138 } |
| 1139 |
| 1140 test_watch_deletePackagespec_fromSubFolder() { |
| 1141 // prepare paths |
| 1142 String root = '/root'; |
| 1143 String rootFile = '$root/root.dart'; |
| 1144 String subProject = '$root/sub/aaa'; |
| 1145 String subPubspec = '$subProject/.packages'; |
| 1146 String subFile = '$subProject/bin/a.dart'; |
| 1147 // create files |
| 1148 resourceProvider.newFile(subPubspec, ''); |
| 1149 resourceProvider.newFile(rootFile, 'library root;'); |
| 1150 resourceProvider.newFile(subFile, 'library a;'); |
| 1151 // set roots |
| 1152 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
| 1153 manager.assertContextPaths([root, subProject]); |
| 1154 // verify files |
| 1155 manager.assertContextFiles(root, [rootFile]); |
| 1156 manager.assertContextFiles(subProject, [subFile]); |
| 1157 // delete the pubspec |
| 1158 resourceProvider.deleteFile(subPubspec); |
| 1159 return pumpEventQueue().then((_) { |
| 1160 manager.assertContextPaths([root]); |
| 1161 manager.assertContextFiles(root, [rootFile, subFile]); |
| 1162 }); |
| 1163 } |
| 1164 |
| 1165 test_watch_deletePackagespec_fromSubFolder_withPubspec() { |
| 1166 // prepare paths |
| 1167 String root = '/root'; |
| 1168 String rootFile = '$root/root.dart'; |
| 1169 String subProject = '$root/sub/aaa'; |
| 1170 String subPackagespec = '$subProject/.packages'; |
| 1171 String subPubspec = '$subProject/pubspec.yaml'; |
| 1172 String subFile = '$subProject/bin/a.dart'; |
| 1173 // create files |
| 1174 resourceProvider.newFile(subPackagespec, ''); |
| 1175 resourceProvider.newFile(subPubspec, 'pubspec'); |
| 1176 resourceProvider.newFile(rootFile, 'library root;'); |
| 1177 resourceProvider.newFile(subFile, 'library a;'); |
| 1178 // set roots |
| 1179 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
| 1180 manager.assertContextPaths([root, subProject]); |
| 1181 // verify files |
| 1182 manager.assertContextFiles(root, [rootFile]); |
| 1183 manager.assertContextFiles(subProject, [subFile]); |
| 1184 // delete the packagespec |
| 1185 resourceProvider.deleteFile(subPackagespec); |
| 1186 return pumpEventQueue().then((_) { |
| 1187 // Should NOT merge |
| 1188 manager.assertContextPaths([root, subProject]); |
| 1189 manager.assertContextFiles(subProject, [subFile]); |
| 1190 }); |
| 1191 } |
| 1192 |
835 test_watch_deletePubspec_fromRoot() { | 1193 test_watch_deletePubspec_fromRoot() { |
836 // prepare paths | 1194 // prepare paths |
837 String root = '/root'; | 1195 String root = '/root'; |
838 String rootPubspec = '$root/pubspec.yaml'; | 1196 String rootPubspec = '$root/pubspec.yaml'; |
839 String rootFile = '$root/root.dart'; | 1197 String rootFile = '$root/root.dart'; |
840 // create files | 1198 // create files |
841 resourceProvider.newFile(rootPubspec, 'pubspec'); | 1199 resourceProvider.newFile(rootPubspec, 'pubspec'); |
842 resourceProvider.newFile(rootFile, 'library root;'); | 1200 resourceProvider.newFile(rootFile, 'library root;'); |
843 // set roots | 1201 // set roots |
844 manager.setRoots(<String>[root], <String>[], <String, String>{}); | 1202 manager.setRoots(<String>[root], <String>[], <String, String>{}); |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1001 File resource = resourceProvider.getResource(path); | 1359 File resource = resourceProvider.getResource(path); |
1002 packageMapProvider.modificationTimes[path] = resource.modificationStamp; | 1360 packageMapProvider.modificationTimes[path] = resource.modificationStamp; |
1003 } | 1361 } |
1004 // This should cause the new package map to be picked up, by executing | 1362 // This should cause the new package map to be picked up, by executing |
1005 // computePackageMap just one additional time. | 1363 // computePackageMap just one additional time. |
1006 await pumpEventQueue(); | 1364 await pumpEventQueue(); |
1007 _checkPackageMap(projPath, equals(packageMapProvider.packageMap)); | 1365 _checkPackageMap(projPath, equals(packageMapProvider.packageMap)); |
1008 expect(packageMapProvider.computeCount, 2); | 1366 expect(packageMapProvider.computeCount, 2); |
1009 } | 1367 } |
1010 | 1368 |
| 1369 test_watch_modifyPackagespec() { |
| 1370 String packagesPath = '$projPath/.packages'; |
| 1371 String filePath = '$projPath/bin/main.dart'; |
| 1372 |
| 1373 resourceProvider.newFile(packagesPath, ''); |
| 1374 resourceProvider.newFile(filePath, 'library main;'); |
| 1375 |
| 1376 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
| 1377 |
| 1378 Map<String, int> filePaths = manager.currentContextFilePaths[projPath]; |
| 1379 expect(filePaths, hasLength(1)); |
| 1380 expect(filePaths, contains(filePath)); |
| 1381 Packages packages = manager.currentContextPackagespecs[projPath]; |
| 1382 expect(packages.packages, isEmpty); |
| 1383 |
| 1384 // update .packages |
| 1385 manager.now++; |
| 1386 resourceProvider.modifyFile(packagesPath, 'main:./lib/'); |
| 1387 return pumpEventQueue().then((_) { |
| 1388 // verify new package info |
| 1389 packages = manager.currentContextPackagespecs[projPath]; |
| 1390 expect(packages.packages, unorderedEquals(['main'])); |
| 1391 }); |
| 1392 } |
| 1393 |
1011 /** | 1394 /** |
1012 * Verify that package URI's for source files in [path] will be resolved | 1395 * Verify that package URI's for source files in [path] will be resolved |
1013 * using a package map matching [expectation]. | 1396 * using a package map matching [expectation]. |
1014 */ | 1397 */ |
1015 void _checkPackageMap(String path, expectation) { | 1398 void _checkPackageMap(String path, expectation) { |
1016 UriResolver resolver = manager.currentContextPackageUriResolvers[path]; | 1399 UriResolver resolver = manager.currentContextPackageUriResolvers[path]; |
1017 Map<String, List<Folder>> packageMap = | 1400 Map<String, List<Folder>> packageMap = |
1018 resolver is PackageMapUriResolver ? resolver.packageMap : null; | 1401 resolver is PackageMapUriResolver ? resolver.packageMap : null; |
1019 expect(packageMap, expectation); | 1402 expect(packageMap, expectation); |
1020 } | 1403 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1059 */ | 1442 */ |
1060 final Map<String, Set<Source>> currentContextSources = <String, Set<Source>>{ | 1443 final Map<String, Set<Source>> currentContextSources = <String, Set<Source>>{ |
1061 }; | 1444 }; |
1062 | 1445 |
1063 /** | 1446 /** |
1064 * Map from context to package URI resolver. | 1447 * Map from context to package URI resolver. |
1065 */ | 1448 */ |
1066 final Map<String, UriResolver> currentContextPackageUriResolvers = | 1449 final Map<String, UriResolver> currentContextPackageUriResolvers = |
1067 <String, UriResolver>{}; | 1450 <String, UriResolver>{}; |
1068 | 1451 |
| 1452 /** |
| 1453 * Map from context to packages object. |
| 1454 */ |
| 1455 final Map<String, Packages> currentContextPackagespecs = <String, Packages>{}; |
| 1456 |
1069 TestContextManager(MemoryResourceProvider resourceProvider, | 1457 TestContextManager(MemoryResourceProvider resourceProvider, |
1070 ResolverProvider packageResolverProvider, | 1458 ResolverProvider packageResolverProvider, |
1071 OptimizingPubPackageMapProvider packageMapProvider) | 1459 OptimizingPubPackageMapProvider packageMapProvider) |
1072 : super(resourceProvider, packageResolverProvider, packageMapProvider, | 1460 : super(resourceProvider, packageResolverProvider, packageMapProvider, |
1073 InstrumentationService.NULL_SERVICE); | 1461 InstrumentationService.NULL_SERVICE); |
1074 | 1462 |
1075 /** | 1463 /** |
1076 * Iterable of the paths to contexts that currently exist. | 1464 * Iterable of the paths to contexts that currently exist. |
1077 */ | 1465 */ |
1078 Iterable<String> get currentContextPaths => currentContextTimestamps.keys; | 1466 Iterable<String> get currentContextPaths => currentContextTimestamps.keys; |
1079 | 1467 |
1080 @override | 1468 @override |
1081 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver) { | 1469 AnalysisContext addContext( |
| 1470 Folder folder, UriResolver packageUriResolver, Packages packages) { |
1082 String path = folder.path; | 1471 String path = folder.path; |
1083 expect(currentContextPaths, isNot(contains(path))); | 1472 expect(currentContextPaths, isNot(contains(path))); |
1084 currentContextTimestamps[path] = now; | 1473 currentContextTimestamps[path] = now; |
1085 currentContextFilePaths[path] = <String, int>{}; | 1474 currentContextFilePaths[path] = <String, int>{}; |
1086 currentContextSources[path] = new HashSet<Source>(); | 1475 currentContextSources[path] = new HashSet<Source>(); |
1087 currentContextPackageUriResolvers[path] = packageUriResolver; | 1476 currentContextPackageUriResolvers[path] = packageUriResolver; |
| 1477 currentContextPackagespecs[path] = packages; |
1088 currentContext = AnalysisEngine.instance.createAnalysisContext(); | 1478 currentContext = AnalysisEngine.instance.createAnalysisContext(); |
1089 currentContext.sourceFactory = new SourceFactory( | 1479 List<UriResolver> resolvers = [new FileUriResolver()]; |
1090 packageUriResolver == null ? [] : [packageUriResolver]); | 1480 if (packageUriResolver != null) { |
| 1481 resolvers.add(packageUriResolver); |
| 1482 } |
| 1483 currentContext.sourceFactory = new SourceFactory(resolvers, packages); |
1091 return currentContext; | 1484 return currentContext; |
1092 } | 1485 } |
1093 | 1486 |
1094 @override | 1487 @override |
1095 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet) { | 1488 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet) { |
1096 Map<String, int> filePaths = currentContextFilePaths[contextFolder.path]; | 1489 Map<String, int> filePaths = currentContextFilePaths[contextFolder.path]; |
1097 Set<Source> sources = currentContextSources[contextFolder.path]; | 1490 Set<Source> sources = currentContextSources[contextFolder.path]; |
1098 | 1491 |
1099 for (Source source in changeSet.addedSources) { | 1492 for (Source source in changeSet.addedSources) { |
1100 expect(filePaths, isNot(contains(source.fullName))); | 1493 expect(filePaths, isNot(contains(source.fullName))); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1142 // Emacs creates dummy links to track the fact that a file is open for | 1535 // Emacs creates dummy links to track the fact that a file is open for |
1143 // editing and has unsaved changes (e.g. having unsaved changes to | 1536 // editing and has unsaved changes (e.g. having unsaved changes to |
1144 // 'foo.dart' causes a link '.#foo.dart' to be created, which points to the | 1537 // 'foo.dart' causes a link '.#foo.dart' to be created, which points to the |
1145 // non-existent file 'username@hostname.pid'. To avoid these dummy links | 1538 // non-existent file 'username@hostname.pid'. To avoid these dummy links |
1146 // causing the analyzer to thrash, just ignore links to non-existent files. | 1539 // causing the analyzer to thrash, just ignore links to non-existent files. |
1147 return file.exists; | 1540 return file.exists; |
1148 } | 1541 } |
1149 | 1542 |
1150 @override | 1543 @override |
1151 void updateContextPackageUriResolver( | 1544 void updateContextPackageUriResolver( |
1152 Folder contextFolder, UriResolver packageUriResolver) { | 1545 Folder contextFolder, UriResolver packageUriResolver, Packages packages) { |
1153 currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver; | 1546 currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver; |
| 1547 currentContextPackagespecs[contextFolder.path] = packages; |
1154 } | 1548 } |
1155 } | 1549 } |
1156 | 1550 |
1157 /** | 1551 /** |
1158 * A [Source] that knows it's [fullName]. | 1552 * A [Source] that knows it's [fullName]. |
1159 */ | 1553 */ |
1160 class TestSource implements Source { | 1554 class TestSource implements Source { |
1161 TestSource(); | 1555 TestSource(); |
1162 | 1556 |
1163 @override | 1557 @override |
1164 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 1558 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
1165 } | 1559 } |
1166 | 1560 |
1167 class TestUriResolver extends UriResolver { | 1561 class TestUriResolver extends UriResolver { |
1168 Map<Uri, Source> uriMap; | 1562 Map<Uri, Source> uriMap; |
1169 | 1563 |
1170 TestUriResolver(this.uriMap); | 1564 TestUriResolver(this.uriMap); |
1171 | 1565 |
1172 @override | 1566 @override |
1173 Source resolveAbsolute(Uri uri) { | 1567 Source resolveAbsolute(Uri uri) { |
1174 return uriMap[uri]; | 1568 return uriMap[uri]; |
1175 } | 1569 } |
1176 } | 1570 } |
OLD | NEW |