Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: pkg/analyzer/test/src/summary/pub_summary_test.dart

Issue 2328613002: Verify that cache unlinked and linked bundles are majorVersion compatible. (Closed)
Patch Set: Make 'majorVersion' final. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/analyzer/lib/src/summary/pub_summary.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/pub_summary.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698