| 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(majorVersion: 12345); |
| 299 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context); |
| 300 expect(linkedPackages, isEmpty); |
| 301 } |
| 302 } |
| 303 |
| 263 test_getLinkedBundles_hasCycle() async { | 304 test_getLinkedBundles_hasCycle() async { |
| 264 resourceProvider.newFile( | 305 resourceProvider.newFile( |
| 265 '$CACHE/aaa/lib/a.dart', | 306 '$CACHE/aaa/lib/a.dart', |
| 266 ''' | 307 ''' |
| 267 import 'package:bbb/b.dart'; | 308 import 'package:bbb/b.dart'; |
| 268 class A {} | 309 class A {} |
| 269 int a1; | 310 int a1; |
| 270 B a2; | 311 B a2; |
| 271 '''); | 312 '''); |
| 272 resourceProvider.newFile( | 313 resourceProvider.newFile( |
| (...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 } | 958 } |
| 918 } | 959 } |
| 919 | 960 |
| 920 // The files must be created. | 961 // The files must be created. |
| 921 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_NAME); | 962 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_NAME); |
| 922 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 963 _assertFileExists(libFolderA.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 923 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); | 964 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_NAME); |
| 924 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); | 965 _assertFileExists(libFolderB.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 925 } | 966 } |
| 926 | 967 |
| 968 test_getUnlinkedBundles_inconsistent_majorVersion() async { |
| 969 // Create package files. |
| 970 resourceProvider.newFile( |
| 971 '$CACHE/aaa/lib/a.dart', |
| 972 ''' |
| 973 class A {} |
| 974 '''); |
| 975 |
| 976 // Configure packages resolution. |
| 977 Folder libFolder = resourceProvider.newFolder('$CACHE/aaa/lib'); |
| 978 context.sourceFactory = new SourceFactory(<UriResolver>[ |
| 979 sdkResolver, |
| 980 resourceResolver, |
| 981 new PackageMapUriResolver(resourceProvider, { |
| 982 'aaa': [libFolder], |
| 983 }) |
| 984 ]); |
| 985 |
| 986 /** |
| 987 * Verify that the [manager] has exactly one cache bundle `aaa`. |
| 988 */ |
| 989 void _assertSingleBundle() { |
| 990 Map<PubPackage, PackageBundle> bundles = |
| 991 manager.getUnlinkedBundles(context); |
| 992 expect(bundles, hasLength(1)); |
| 993 PackageBundle bundle = _getBundleByPackageName(bundles, 'aaa'); |
| 994 expect(bundle.unlinkedUnitUris, ['package:aaa/a.dart']); |
| 995 } |
| 996 |
| 997 // Compute the bundle using a non-default major version. |
| 998 _createManager(majorVersion: 12345); |
| 999 manager.getUnlinkedBundles(context); |
| 1000 await manager.onUnlinkedComplete; |
| 1001 _assertSingleBundle(); |
| 1002 |
| 1003 // Recompute when using the default major version. |
| 1004 _createManager(); |
| 1005 expect(manager.getUnlinkedBundles(context), isEmpty); |
| 1006 |
| 1007 // Wait for the bundle to be computed. |
| 1008 await manager.onUnlinkedComplete; |
| 1009 _assertSingleBundle(); |
| 1010 _assertFileExists(libFolder.parent, PubSummaryManager.UNLINKED_NAME); |
| 1011 _assertFileExists(libFolder.parent, PubSummaryManager.UNLINKED_SPEC_NAME); |
| 1012 |
| 1013 // Can read from the file again. |
| 1014 _createManager(); |
| 1015 _assertSingleBundle(); |
| 1016 } |
| 1017 |
| 927 test_getUnlinkedBundles_notPubCache_dontCreate() async { | 1018 test_getUnlinkedBundles_notPubCache_dontCreate() async { |
| 928 String aaaPath = '/Users/user/projects/aaa'; | 1019 String aaaPath = '/Users/user/projects/aaa'; |
| 929 // Create package files. | 1020 // Create package files. |
| 930 resourceProvider.newFile( | 1021 resourceProvider.newFile( |
| 931 '$aaaPath/lib/a.dart', | 1022 '$aaaPath/lib/a.dart', |
| 932 ''' | 1023 ''' |
| 933 class A {} | 1024 class A {} |
| 934 '''); | 1025 '''); |
| 935 resourceProvider.newFile( | 1026 resourceProvider.newFile( |
| 936 '$CACHE/bbb/lib/b.dart', | 1027 '$CACHE/bbb/lib/b.dart', |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1118 return; | 1209 return; |
| 1119 } | 1210 } |
| 1120 } | 1211 } |
| 1121 fail('Cannot find linked unit for $variableName in $linkedPackage'); | 1212 fail('Cannot find linked unit for $variableName in $linkedPackage'); |
| 1122 } | 1213 } |
| 1123 } | 1214 } |
| 1124 } | 1215 } |
| 1125 fail('Cannot find variable $variableName in $linkedPackage'); | 1216 fail('Cannot find variable $variableName in $linkedPackage'); |
| 1126 } | 1217 } |
| 1127 | 1218 |
| 1128 void _createManager() { | 1219 void _createManager( |
| 1129 manager = new PubSummaryManager(resourceProvider, '_.temp'); | 1220 {int majorVersion: PackageBundleAssembler.currentMajorVersion}) { |
| 1221 manager = new PubSummaryManager(resourceProvider, '_.temp', |
| 1222 majorVersion: majorVersion); |
| 1130 } | 1223 } |
| 1131 | 1224 |
| 1132 LinkedPubPackage _getLinkedPackage( | 1225 LinkedPubPackage _getLinkedPackage( |
| 1133 List<LinkedPubPackage> packages, String name) { | 1226 List<LinkedPubPackage> packages, String name) { |
| 1134 return packages | 1227 return packages |
| 1135 .singleWhere((linkedPackage) => linkedPackage.package.name == name); | 1228 .singleWhere((linkedPackage) => linkedPackage.package.name == name); |
| 1136 } | 1229 } |
| 1137 | 1230 |
| 1138 static PackageBundle _getBundleByPackageName( | 1231 static PackageBundle _getBundleByPackageName( |
| 1139 Map<PubPackage, PackageBundle> bundles, String name) { | 1232 Map<PubPackage, PackageBundle> bundles, String name) { |
| 1140 PubPackage package = | 1233 PubPackage package = |
| 1141 bundles.keys.singleWhere((package) => package.name == name); | 1234 bundles.keys.singleWhere((package) => package.name == name); |
| 1142 return bundles[package]; | 1235 return bundles[package]; |
| 1143 } | 1236 } |
| 1144 } | 1237 } |
| OLD | NEW |