| 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:analyzer/file_system/file_system.dart'; | 11 import 'package:analyzer/file_system/file_system.dart'; |
| 11 import 'package:analyzer/file_system/memory_file_system.dart'; | 12 import 'package:analyzer/file_system/memory_file_system.dart'; |
| 12 import 'package:analyzer/instrumentation/instrumentation.dart'; | 13 import 'package:analyzer/instrumentation/instrumentation.dart'; |
| 13 import 'package:analyzer/source/package_map_provider.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:unittest/unittest.dart'; | 19 import 'package:unittest/unittest.dart'; |
| 20 | 20 |
| 21 import 'mocks.dart'; | 21 import 'mocks.dart'; |
| 22 import 'reflective_tests.dart'; | 22 import 'reflective_tests.dart'; |
| 23 | 23 |
| (...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 // Change the package map dependency so that the packageMapProvider is | 851 // Change the package map dependency so that the packageMapProvider is |
| 852 // re-run, and arrange for it to return null from computePackageMap(). | 852 // re-run, and arrange for it to return null from computePackageMap(). |
| 853 packageMapProvider.packageMap = null; | 853 packageMapProvider.packageMap = null; |
| 854 resourceProvider.modifyFile(dependencyPath, 'new contents'); | 854 resourceProvider.modifyFile(dependencyPath, 'new contents'); |
| 855 return pumpEventQueue().then((_) { | 855 return pumpEventQueue().then((_) { |
| 856 // The package map should have been changed to null. | 856 // The package map should have been changed to null. |
| 857 _checkPackageMap(projPath, isNull); | 857 _checkPackageMap(projPath, isNull); |
| 858 }); | 858 }); |
| 859 } | 859 } |
| 860 | 860 |
| 861 test_watch_modifyPackageMapDependency_redundantly() async { |
| 862 // Create two dependency files |
| 863 String dependencyPath1 = posix.join(projPath, 'dep1'); |
| 864 String dependencyPath2 = posix.join(projPath, 'dep2'); |
| 865 resourceProvider.newFile(dependencyPath1, 'contents'); |
| 866 resourceProvider.newFile(dependencyPath2, 'contents'); |
| 867 packageMapProvider.dependencies.add(dependencyPath1); |
| 868 packageMapProvider.dependencies.add(dependencyPath2); |
| 869 // Create a dart file |
| 870 String dartFilePath = posix.join(projPath, 'main.dart'); |
| 871 resourceProvider.newFile(dartFilePath, 'contents'); |
| 872 // Verify that the created context has the expected empty package map. |
| 873 manager.setRoots(<String>[projPath], <String>[], <String, String>{}); |
| 874 _checkPackageMap(projPath, isEmpty); |
| 875 expect(packageMapProvider.computeCount, 1); |
| 876 // Set up a different package map |
| 877 String packagePath = '/package/foo'; |
| 878 resourceProvider.newFolder(packagePath); |
| 879 packageMapProvider.packageMap = {'foo': projPath}; |
| 880 // Change both dependencies. |
| 881 resourceProvider.modifyFile(dependencyPath1, 'new contents'); |
| 882 resourceProvider.modifyFile(dependencyPath2, 'new contents'); |
| 883 // Arrange for the next call to computePackageMap to return the correct |
| 884 // timestamps for the dependencies. |
| 885 packageMapProvider.modificationTimes = <String, int>{}; |
| 886 for (String path in [dependencyPath1, dependencyPath2]) { |
| 887 File resource = resourceProvider.getResource(path); |
| 888 packageMapProvider.modificationTimes[path] = resource.modificationStamp; |
| 889 } |
| 890 // This should cause the new package map to be picked up, by executing |
| 891 // computePackageMap just one additional time. |
| 892 await pumpEventQueue(); |
| 893 _checkPackageMap(projPath, equals(packageMapProvider.packageMap)); |
| 894 expect(packageMapProvider.computeCount, 2); |
| 895 } |
| 896 |
| 861 /** | 897 /** |
| 862 * Verify that package URI's for source files in [path] will be resolved | 898 * Verify that package URI's for source files in [path] will be resolved |
| 863 * using a package map matching [expectation]. | 899 * using a package map matching [expectation]. |
| 864 */ | 900 */ |
| 865 void _checkPackageMap(String path, expectation) { | 901 void _checkPackageMap(String path, expectation) { |
| 866 UriResolver resolver = manager.currentContextPackageUriResolvers[path]; | 902 UriResolver resolver = manager.currentContextPackageUriResolvers[path]; |
| 867 Map<String, List<Folder>> packageMap = | 903 Map<String, List<Folder>> packageMap = |
| 868 resolver is PackageMapUriResolver ? resolver.packageMap : null; | 904 resolver is PackageMapUriResolver ? resolver.packageMap : null; |
| 869 expect(packageMap, expectation); | 905 expect(packageMap, expectation); |
| 870 } | 906 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 final Map<String, Set<Source>> currentContextSources = <String, Set<Source>>{ | 946 final Map<String, Set<Source>> currentContextSources = <String, Set<Source>>{ |
| 911 }; | 947 }; |
| 912 | 948 |
| 913 /** | 949 /** |
| 914 * Map from context to package URI resolver. | 950 * Map from context to package URI resolver. |
| 915 */ | 951 */ |
| 916 final Map<String, UriResolver> currentContextPackageUriResolvers = | 952 final Map<String, UriResolver> currentContextPackageUriResolvers = |
| 917 <String, UriResolver>{}; | 953 <String, UriResolver>{}; |
| 918 | 954 |
| 919 TestContextManager(MemoryResourceProvider resourceProvider, | 955 TestContextManager(MemoryResourceProvider resourceProvider, |
| 920 PackageMapProvider packageMapProvider) | 956 OptimizingPubPackageMapProvider packageMapProvider) |
| 921 : super(resourceProvider, packageMapProvider, | 957 : super(resourceProvider, packageMapProvider, |
| 922 InstrumentationService.NULL_SERVICE); | 958 InstrumentationService.NULL_SERVICE); |
| 923 | 959 |
| 924 /** | 960 /** |
| 925 * Iterable of the paths to contexts that currently exist. | 961 * Iterable of the paths to contexts that currently exist. |
| 926 */ | 962 */ |
| 927 Iterable<String> get currentContextPaths => currentContextTimestamps.keys; | 963 Iterable<String> get currentContextPaths => currentContextTimestamps.keys; |
| 928 | 964 |
| 929 @override | 965 @override |
| 930 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver) { | 966 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver) { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 981 currentContextSources.remove(path); | 1017 currentContextSources.remove(path); |
| 982 currentContextPackageUriResolvers.remove(path); | 1018 currentContextPackageUriResolvers.remove(path); |
| 983 } | 1019 } |
| 984 | 1020 |
| 985 @override | 1021 @override |
| 986 void updateContextPackageUriResolver( | 1022 void updateContextPackageUriResolver( |
| 987 Folder contextFolder, UriResolver packageUriResolver) { | 1023 Folder contextFolder, UriResolver packageUriResolver) { |
| 988 currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver; | 1024 currentContextPackageUriResolvers[contextFolder.path] = packageUriResolver; |
| 989 } | 1025 } |
| 990 } | 1026 } |
| OLD | NEW |