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 |