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

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

Issue 2278603003: Remove SDK extension support from PubSummaryManager. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
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
« 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 16 matching lines...) Expand all
27 class PubSummaryManagerTest extends AbstractContextTest { 27 class PubSummaryManagerTest extends AbstractContextTest {
28 static const String CACHE = '/home/.pub-cache/hosted/pub.dartlang.org'; 28 static const String CACHE = '/home/.pub-cache/hosted/pub.dartlang.org';
29 29
30 PubSummaryManager manager; 30 PubSummaryManager manager;
31 31
32 void setUp() { 32 void setUp() {
33 super.setUp(); 33 super.setUp();
34 _createManager(); 34 _createManager();
35 } 35 }
36 36
37 test_computeSdkExtension() async {
38 // Create package files.
39 resourceProvider.newFile(
40 '$CACHE/aaa/lib/a.dart',
41 '''
42 class A {}
43 ''');
44 resourceProvider.newFile(
45 '$CACHE/aaa/sdk_ext/extA.dart',
46 '''
47 library test.a;
48 import 'dart:async';
49 part 'src/p1.dart';
50 part 'src/p2.dart';
51 class ExtA {}
52 int V0;
53 ''');
54 resourceProvider.newFile(
55 '$CACHE/aaa/sdk_ext/src/p1.dart',
56 '''
57 part of test.a;
58 class ExtAA {}
59 double V1;
60 ''');
61 resourceProvider.newFile(
62 '$CACHE/aaa/sdk_ext/src/p2.dart',
63 '''
64 part of test.a;
65 class ExtAB {}
66 Future V2;
67 ''');
68 resourceProvider.newFile(
69 '$CACHE/aaa/lib/_sdkext',
70 '''
71 {
72 "dart:aaa.internal": "../sdk_ext/extA.dart"
73 }
74 ''');
75 resourceProvider.newFile(
76 '$CACHE/bbb/lib/b.dart',
77 '''
78 class B {}
79 ''');
80
81 // Configure packages resolution.
82 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib');
83 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib');
84 context.sourceFactory = new SourceFactory(<UriResolver>[
85 sdkResolver,
86 resourceResolver,
87 new PackageMapUriResolver(resourceProvider, {
88 'aaa': [libFolderA],
89 'bbb': [libFolderB],
90 })
91 ]);
92
93 PackageBundle sdkBundle = sdk.getLinkedBundle();
94 PackageBundle bundle = manager.computeSdkExtension(context, sdkBundle);
95 expect(bundle, isNotNull);
96 expect(bundle.linkedLibraryUris, ['dart:aaa.internal']);
97 expect(bundle.unlinkedUnitUris, [
98 'dart:aaa.internal',
99 'dart:aaa.internal/src/p1.dart',
100 'dart:aaa.internal/src/p2.dart'
101 ]);
102 expect(bundle.unlinkedUnits, hasLength(3));
103 expect(bundle.unlinkedUnits[0].classes.map((c) => c.name), ['ExtA']);
104 expect(bundle.unlinkedUnits[1].classes.map((c) => c.name), ['ExtAA']);
105 expect(bundle.unlinkedUnits[2].classes.map((c) => c.name), ['ExtAB']);
106 // The library is linked.
107 expect(bundle.linkedLibraries, hasLength(1));
108 LinkedLibrary linkedLibrary = bundle.linkedLibraries[0];
109 // V0 is linked
110 {
111 UnlinkedUnit unlinkedUnit = bundle.unlinkedUnits[0];
112 LinkedUnit linkedUnit = linkedLibrary.units[0];
113 expect(unlinkedUnit.variables, hasLength(1));
114 UnlinkedVariable variable = unlinkedUnit.variables[0];
115 expect(variable.name, 'V0');
116 int typeRef = variable.type.reference;
117 expect(unlinkedUnit.references[typeRef].name, 'int');
118 LinkedReference linkedReference = linkedUnit.references[typeRef];
119 expect(linkedLibrary.dependencies[linkedReference.dependency].uri,
120 'dart:core');
121 }
122 // V1 is linked
123 {
124 UnlinkedUnit unlinkedUnit = bundle.unlinkedUnits[1];
125 LinkedUnit linkedUnit = linkedLibrary.units[1];
126 expect(unlinkedUnit.variables, hasLength(1));
127 UnlinkedVariable variable = unlinkedUnit.variables[0];
128 expect(variable.name, 'V1');
129 int typeRef = variable.type.reference;
130 expect(unlinkedUnit.references[typeRef].name, 'double');
131 LinkedReference linkedReference = linkedUnit.references[typeRef];
132 expect(linkedLibrary.dependencies[linkedReference.dependency].uri,
133 'dart:core');
134 }
135 // V2 is linked
136 {
137 UnlinkedUnit unlinkedUnit = bundle.unlinkedUnits[2];
138 LinkedUnit linkedUnit = linkedLibrary.units[2];
139 expect(unlinkedUnit.variables, hasLength(1));
140 UnlinkedVariable variable = unlinkedUnit.variables[0];
141 expect(variable.name, 'V2');
142 int typeRef = variable.type.reference;
143 expect(unlinkedUnit.references[typeRef].name, 'Future');
144 LinkedReference linkedReference = linkedUnit.references[typeRef];
145 expect(linkedLibrary.dependencies[linkedReference.dependency].uri,
146 'dart:async');
147 }
148 }
149
150 test_computeUnlinkedForFolder() async { 37 test_computeUnlinkedForFolder() async {
151 // Create package files. 38 // Create package files.
152 resourceProvider.newFile( 39 resourceProvider.newFile(
153 '/flutter/aaa/lib/a.dart', 40 '/flutter/aaa/lib/a.dart',
154 ''' 41 '''
155 class A {} 42 class A {}
156 '''); 43 ''');
157 resourceProvider.newFile( 44 resourceProvider.newFile(
158 '/flutter/bbb/lib/b.dart', 45 '/flutter/bbb/lib/b.dart',
159 ''' 46 '''
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 // Verify that new files with linked bundles were created. 253 // Verify that new files with linked bundles were created.
367 LinkedPubPackage packageA = _getLinkedPackage(linkedPackages, 'aaa'); 254 LinkedPubPackage packageA = _getLinkedPackage(linkedPackages, 'aaa');
368 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb'); 255 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb');
369 expect(packageA.linkedHash, isNot(linkedHashA)); 256 expect(packageA.linkedHash, isNot(linkedHashA));
370 expect(packageB.linkedHash, isNot(linkedHashB)); 257 expect(packageB.linkedHash, isNot(linkedHashB));
371 _assertFileExists(folderA, 'linked_spec_${packageA.linkedHash}.ds'); 258 _assertFileExists(folderA, 'linked_spec_${packageA.linkedHash}.ds');
372 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds'); 259 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds');
373 } 260 }
374 } 261 }
375 262
376 test_getLinkedBundles_cached_useSdkExtension() async {
377 String pathA1 = '$CACHE/aaa-1.0.0';
378 String pathA2 = '$CACHE/aaa-2.0.0';
379 // aaa-1.0.0
380 resourceProvider.newFile(
381 '$pathA1/lib/a.dart',
382 '''
383 class A {}
384 int a;
385 ''');
386 resourceProvider.newFile(
387 '$pathA1/sdk_ext/extA.dart',
388 '''
389 class ExtA1 {}
390 ''');
391 resourceProvider.newFile(
392 '$pathA1/lib/_sdkext',
393 '''
394 {
395 "dart:aaa": "../sdk_ext/extA.dart"
396 }
397 ''');
398 // aaa-2.0.0
399 resourceProvider.newFile(
400 '$pathA2/lib/a.dart',
401 '''
402 class A {}
403 int a;
404 ''');
405 resourceProvider.newFile(
406 '$pathA2/sdk_ext/extA.dart',
407 '''
408 class ExtA2 {}
409 ''');
410 resourceProvider.newFile(
411 '$pathA2/lib/_sdkext',
412 '''
413 {
414 "dart:aaa": "../sdk_ext/extA.dart"
415 }
416 ''');
417 // bbb
418 resourceProvider.newFile(
419 '$CACHE/bbb/lib/b.dart',
420 '''
421 import 'package:aaa/a.dart';
422 A b;
423 ''');
424 Folder folderA1 = resourceProvider.getFolder(pathA1);
425 Folder folderA2 = resourceProvider.getFolder(pathA2);
426 Folder folderB = resourceProvider.getFolder('$CACHE/bbb');
427
428 // Configure packages resolution.
429 Folder libFolderA1 = resourceProvider.newFolder('$pathA1/lib');
430 Folder libFolderA2 = resourceProvider.newFolder('$pathA2/lib');
431 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib');
432 context.sourceFactory = new SourceFactory(<UriResolver>[
433 sdkResolver,
434 resourceResolver,
435 new PackageMapUriResolver(resourceProvider, {
436 'aaa': [libFolderA1],
437 'bbb': [libFolderB],
438 })
439 ]);
440
441 // Session 1.
442 // Create linked bundles and store them in files.
443 String linkedHashA;
444 String linkedHashB;
445 {
446 // Ensure unlinked bundles.
447 manager.getUnlinkedBundles(context);
448 await manager.onUnlinkedComplete;
449
450 // Now we should be able to get linked bundles.
451 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context);
452 expect(linkedPackages, hasLength(2));
453
454 // Verify that files with linked bundles were created.
455 LinkedPubPackage packageA = _getLinkedPackage(linkedPackages, 'aaa');
456 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb');
457 linkedHashA = packageA.linkedHash;
458 linkedHashB = packageB.linkedHash;
459 _assertFileExists(folderA1, 'linked_spec_$linkedHashA.ds');
460 _assertFileExists(folderB, 'linked_spec_$linkedHashB.ds');
461 }
462
463 // Session 2.
464 // Use 'aaa-2.0.0', with a different SDK extension.
465 {
466 context.sourceFactory = new SourceFactory(<UriResolver>[
467 sdkResolver,
468 resourceResolver,
469 new PackageMapUriResolver(resourceProvider, {
470 'aaa': [libFolderA2],
471 'bbb': [libFolderB],
472 })
473 ]);
474
475 // Ensure unlinked bundles.
476 manager.getUnlinkedBundles(context);
477 await manager.onUnlinkedComplete;
478
479 // Now we should be able to get linked bundles.
480 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context);
481 expect(linkedPackages, hasLength(2));
482
483 // Verify that new files with linked bundles were created.
484 LinkedPubPackage packageA = _getLinkedPackage(linkedPackages, 'aaa');
485 LinkedPubPackage packageB = _getLinkedPackage(linkedPackages, 'bbb');
486 expect(packageA.linkedHash, isNot(linkedHashA));
487 expect(packageB.linkedHash, isNot(linkedHashB));
488 _assertFileExists(folderA2, 'linked_spec_${packageA.linkedHash}.ds');
489 _assertFileExists(folderB, 'linked_spec_${packageB.linkedHash}.ds');
490 }
491 }
492
493 test_getLinkedBundles_hasCycle() async { 263 test_getLinkedBundles_hasCycle() async {
494 resourceProvider.newFile( 264 resourceProvider.newFile(
495 '$CACHE/aaa/lib/a.dart', 265 '$CACHE/aaa/lib/a.dart',
496 ''' 266 '''
497 import 'package:bbb/b.dart'; 267 import 'package:bbb/b.dart';
498 class A {} 268 class A {}
499 int a1; 269 int a1;
500 B a2; 270 B a2;
501 '''); 271 ''');
502 resourceProvider.newFile( 272 resourceProvider.newFile(
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 808
1039 // package:aaa 809 // package:aaa
1040 { 810 {
1041 LinkedPubPackage linkedPackage = linkedPackages 811 LinkedPubPackage linkedPackage = linkedPackages
1042 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa'); 812 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa');
1043 _assertHasLinkedVariable(linkedPackage, 'a', 'C', 813 _assertHasLinkedVariable(linkedPackage, 'a', 'C',
1044 expectedTypeNameUri: 'package:ccc/c.dart'); 814 expectedTypeNameUri: 'package:ccc/c.dart');
1045 } 815 }
1046 } 816 }
1047 817
1048 test_getLinkedBundles_useSdkExtension() async {
1049 resourceProvider.newFile(
1050 '$CACHE/aaa/lib/a.dart',
1051 '''
1052 import 'dart:bbb';
1053 ExtB a;
1054 ''');
1055 resourceProvider.newFile(
1056 '$CACHE/bbb/lib/b.dart',
1057 '''
1058 import 'dart:bbb';
1059 ExtB b;
1060 ''');
1061 resourceProvider.newFile(
1062 '$CACHE/bbb/sdk_ext/extB.dart',
1063 '''
1064 class ExtB {}
1065 ''');
1066 resourceProvider.newFile(
1067 '$CACHE/bbb/lib/_sdkext',
1068 '''
1069 {
1070 "dart:bbb": "../sdk_ext/extB.dart"
1071 }
1072 ''');
1073
1074 // Configure packages resolution.
1075 Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib');
1076 Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib');
1077 context.sourceFactory = new SourceFactory(<UriResolver>[
1078 sdkResolver,
1079 resourceResolver,
1080 new PackageMapUriResolver(resourceProvider, {
1081 'aaa': [libFolderA],
1082 'bbb': [libFolderB],
1083 })
1084 ]);
1085
1086 // Ensure unlinked bundles.
1087 manager.getUnlinkedBundles(context);
1088 await manager.onUnlinkedComplete;
1089
1090 // Now we should be able to get linked bundles.
1091 List<LinkedPubPackage> linkedPackages = manager.getLinkedBundles(context);
1092 expect(linkedPackages, hasLength(2));
1093
1094 // package:aaa
1095 {
1096 LinkedPubPackage linkedPackage = linkedPackages
1097 .singleWhere((linkedPackage) => linkedPackage.package.name == 'aaa');
1098 _assertHasLinkedVariable(linkedPackage, 'a', 'ExtB',
1099 expectedTypeNameUri: 'dart:bbb');
1100 }
1101
1102 // package:bbb
1103 {
1104 LinkedPubPackage linkedPackage = linkedPackages
1105 .singleWhere((linkedPackage) => linkedPackage.package.name == 'bbb');
1106 _assertHasLinkedVariable(linkedPackage, 'b', 'ExtB',
1107 expectedTypeNameUri: 'dart:bbb');
1108 }
1109 }
1110
1111 test_getLinkedBundles_wrongScheme() async { 818 test_getLinkedBundles_wrongScheme() async {
1112 resourceProvider.newFile( 819 resourceProvider.newFile(
1113 '$CACHE/aaa/lib/a.dart', 820 '$CACHE/aaa/lib/a.dart',
1114 ''' 821 '''
1115 import 'xxx:yyy/zzz.dart'; 822 import 'xxx:yyy/zzz.dart';
1116 int a1; 823 int a1;
1117 Z a2; 824 Z a2;
1118 '''); 825 ''');
1119 826
1120 // Configure packages resolution. 827 // Configure packages resolution.
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1428 .singleWhere((linkedPackage) => linkedPackage.package.name == name); 1135 .singleWhere((linkedPackage) => linkedPackage.package.name == name);
1429 } 1136 }
1430 1137
1431 static PackageBundle _getBundleByPackageName( 1138 static PackageBundle _getBundleByPackageName(
1432 Map<PubPackage, PackageBundle> bundles, String name) { 1139 Map<PubPackage, PackageBundle> bundles, String name) {
1433 PubPackage package = 1140 PubPackage package =
1434 bundles.keys.singleWhere((package) => package.name == name); 1141 bundles.keys.singleWhere((package) => package.name == name);
1435 return bundles[package]; 1142 return bundles[package];
1436 } 1143 }
1437 } 1144 }
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