| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'package:analyzer/file_system/file_system.dart'; | 5 import 'package:analyzer/file_system/file_system.dart'; |
| 6 import 'package:analyzer/source/package_map_resolver.dart'; | 6 import 'package:analyzer/source/package_map_resolver.dart'; |
| 7 import 'package:analyzer/src/generated/source.dart'; | 7 import 'package:analyzer/src/generated/source.dart'; |
| 8 import 'package:analyzer/src/summary/format.dart'; | 8 import 'package:analyzer/src/summary/format.dart'; |
| 9 import 'package:analyzer/src/summary/idl.dart'; | 9 import 'package:analyzer/src/summary/idl.dart'; |
| 10 import 'package:analyzer/src/summary/pub_summary.dart'; | 10 import 'package:analyzer/src/summary/pub_summary.dart'; |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 // Verify that new files with linked bundles were created. | 253 // Verify that new files with linked bundles were created. |
| 254 LinkedPubPackage packageA = _getLinkedPackage(linkedPackages, 'aaa'); | 254 LinkedPubPackage packageA = _getLinkedPackage(linkedPackages, 'aaa'); |
| 255 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb'); | 255 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb'); |
| 256 expect(packageA.linkedHash, isNot(linkedHashA)); | 256 expect(packageA.linkedHash, isNot(linkedHashA)); |
| 257 expect(packageB.linkedHash, isNot(linkedHashB)); | 257 expect(packageB.linkedHash, isNot(linkedHashB)); |
| 258 _assertFileExists(folderA, 'linked_spec_${packageA.linkedHash}.ds'); | 258 _assertFileExists(folderA, 'linked_spec_${packageA.linkedHash}.ds'); |
| 259 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds'); | 259 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds'); |
| 260 } | 260 } |
| 261 } | 261 } |
| 262 | 262 |
| 263 test_getLinkedBundles_cached_inconsistent_majorVersion() async { |
| 264 String pathA = '$CACHE/aaa'; |
| 265 resourceProvider.newFile( |
| 266 '$pathA/lib/a.dart', |
| 267 ''' |
| 268 class A {} |
| 269 int a; |
| 270 '''); |
| 271 // Configure packages resolution. |
| 272 Folder libFolderA = resourceProvider.newFolder('$pathA/lib'); |
| 273 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 274 sdkResolver, |
| 275 resourceResolver, |
| 276 new PackageMapUriResolver(resourceProvider, { |
| 277 'aaa': [libFolderA], |
| 278 }) |
| 279 ]); |
| 280 |
| 281 // Session 1. |
| 282 // Create the linked bundle and cache it in a file. |
| 283 { |
| 284 // Ensure unlinked bundles. |
| 285 manager.getUnlinkedBundles(context); |
| 286 await manager.onUnlinkedComplete; |
| 287 |
| 288 // Now we should be able to get the linked bundle. |
| 289 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 290 expect(linkedPackages, hasLength(1)); |
| 291 } |
| 292 |
| 293 // Session 2. |
| 294 // Recreate manager with a different major version. |
| 295 // It cannot use the previously cache linked bundle. |
| 296 // The reason is that we cannot use the cached unlinked bundle. |
| 297 { |
| 298 _createManager(); |
| 299 manager.majorVersion = 12345; |
| 300 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 301 expect(linkedPackages, isEmpty); |
| 302 } |
| 303 } |
| 304 |
| 263 test_getLinkedBundles_hasCycle() async { | 305 test_getLinkedBundles_hasCycle() async { |
| 264 resourceProvider.newFile( | 306 resourceProvider.newFile( |
| 265 '$CACHE/aaa/lib/a.dart', | 307 '$CACHE/aaa/lib/a.dart', |
| 266 ''' | 308 ''' |
| 267 import 'package:bbb/b.dart'; | 309 import 'package:bbb/b.dart'; |
| 268 class A {} | 310 class A {} |
| 269 int a1; | 311 int a1; |
| 270 B a2; | 312 B a2; |
| 271 '''); | 313 '''); |
| 272 resourceProvider.newFile( | 314 resourceProvider.newFile( |
| (...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 } | 959 } |
| 918 } | 960 } |
| 919 | 961 |
| 920 // The files must be created. | 962 // The files must be created. |
| 921 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_NAME); | 963 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_NAME); |
| 922 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 964 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 923 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); | 965 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); |
| 924 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 966 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 925 } | 967 } |
| 926 | 968 |
| 969 test_getUnlinkedBundles_inconsistent_majorVersion() async { |
| 970 // Create package files. |
| 971 resourceProvider.newFile( |
| 972 '$CACHE/aaa/lib/a.dart', |
| 973 ''' |
| 974 class A {} |
| 975 '''); |
| 976 |
| 977 // Configure packages resolution. |
| 978 Folder libFolder = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 979 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 980 sdkResolver, |
| 981 resourceResolver, |
| 982 new PackageMapUriResolver(resourceProvider, { |
| 983 'aaa': [libFolder], |
| 984 }) |
| 985 ]); |
| 986 |
| 987 /** |
| 988 * Verify that the [manager] has exactly one cache bundle `aaa`. |
| 989 */ |
| 990 void _assertSingleBundle() { |
| 991 Map<PubPackage, PackageBundle> bundles = |
| 992 manager.getUnlinkedBundles(context); |
| 993 expect(bundles, hasLength(1)); |
| 994 PackageBundle bundle = _getBundleByPackageName(bundles, 'aaa'); |
| 995 expect(bundle.unlinkedUnitUris, ['package:aaa/a.dart']); |
| 996 } |
| 997 |
| 998 // Compute the bundle using a non-default major version. |
| 999 manager.majorVersion = 123456789; |
| 1000 manager.getUnlinkedBundles(context); |
| 1001 await manager.onUnlinkedComplete; |
| 1002 _assertSingleBundle(); |
| 1003 |
| 1004 // Recompute when using the default major version. |
| 1005 _createManager(); |
| 1006 expect(manager.getUnlinkedBundles(context), isEmpty); |
| 1007 |
| 1008 // Wait for the bundle to be computed. |
| 1009 await manager.onUnlinkedComplete; |
| 1010 _assertSingleBundle(); |
| 1011 _assertFileExists(libFolder.parent, PubSummaryManager.UNLINKED_NAME); |
| 1012 _assertFileExists(libFolder.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 1013 |
| 1014 // Can read from the file again. |
| 1015 _createManager(); |
| 1016 _assertSingleBundle(); |
| 1017 } |
| 1018 |
| 927 test_getUnlinkedBundles_notPubCache_dontCreate() async { | 1019 test_getUnlinkedBundles_notPubCache_dontCreate() async { |
| 928 String aaaPath = '/Users/user/projects/aaa'; | 1020 String aaaPath = '/Users/user/projects/aaa'; |
| 929 // Create package files. | 1021 // Create package files. |
| 930 resourceProvider.newFile( | 1022 resourceProvider.newFile( |
| 931 '$aaaPath/lib/a.dart', | 1023 '$aaaPath/lib/a.dart', |
| 932 ''' | 1024 ''' |
| 933 class A {} | 1025 class A {} |
| 934 '''); | 1026 '''); |
| 935 resourceProvider.newFile( | 1027 resourceProvider.newFile( |
| 936 '$CACHE/bbb/lib/b.dart', | 1028 '$CACHE/bbb/lib/b.dart', |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1135 .singleWhere((linkedPackage) => linkedPackage.package.name == name); | 1227 .singleWhere((linkedPackage) => linkedPackage.package.name == name); |
| 1136 } | 1228 } |
| 1137 | 1229 |
| 1138 static PackageBundle _getBundleByPackageName( | 1230 static PackageBundle _getBundleByPackageName( |
| 1139 Map<PubPackage, PackageBundle> bundles, String name) { | 1231 Map<PubPackage, PackageBundle> bundles, String name) { |
| 1140 PubPackage package = | 1232 PubPackage package = |
| 1141 bundles.keys.singleWhere((package) => package.name == name); | 1233 bundles.keys.singleWhere((package) => package.name == name); |
| 1142 return bundles[package]; | 1234 return bundles[package]; |
| 1143 } | 1235 } |
| 1144 } | 1236 } |
| OLD | NEW |