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

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: 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
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();
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698