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

Unified Diff: pkg/analyzer/test/src/summary/pub_summary_test.dart

Issue 2240593002: Compute the linked bundle for the SDK extension. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/summary/pub_summary.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/src/summary/pub_summary_test.dart
diff --git a/pkg/analyzer/test/src/summary/pub_summary_test.dart b/pkg/analyzer/test/src/summary/pub_summary_test.dart
index 42432b92a012e2258717f21fcff84f86f6c87a36..d14689e61a4c908f6047b24be59557f7e84e8946 100644
--- a/pkg/analyzer/test/src/summary/pub_summary_test.dart
+++ b/pkg/analyzer/test/src/summary/pub_summary_test.dart
@@ -35,6 +35,119 @@ class PubSummaryManagerTest extends AbstractContextTest {
manager = new PubSummaryManager(resourceProvider, '_.temp');
}
+ test_computeSdkExtension() async {
+ // Create package files.
+ resourceProvider.newFile(
+ '$CACHE/aaa/lib/a.dart',
+ '''
+class A {}
+''');
+ resourceProvider.newFile(
+ '$CACHE/aaa/sdk_ext/extA.dart',
+ '''
+library test.a;
+import 'dart:async';
+part 'src/p1.dart';
+part 'src/p2.dart';
+class ExtA {}
+int V0;
+''');
+ resourceProvider.newFile(
+ '$CACHE/aaa/sdk_ext/src/p1.dart',
+ '''
+part of test.a;
+class ExtAA {}
+double V1;
+''');
+ resourceProvider.newFile(
+ '$CACHE/aaa/sdk_ext/src/p2.dart',
+ '''
+part of test.a;
+class ExtAB {}
+Future V2;
+''');
+ resourceProvider.newFile(
+ '$CACHE/aaa/lib/_sdkext',
+ '''
+{
+ "dart:aaa.internal": "../sdk_ext/extA.dart"
+}
+''');
+ resourceProvider.newFile(
+ '$CACHE/bbb/lib/b.dart',
+ '''
+class B {}
+''');
+
+ // Configure packages resolution.
+ Folder libFolderA = resourceProvider.newFolder('$CACHE/aaa/lib');
+ Folder libFolderB = resourceProvider.newFolder('$CACHE/bbb/lib');
+ context.sourceFactory = new SourceFactory(<UriResolver>[
+ sdkResolver,
+ resourceResolver,
+ new PackageMapUriResolver(resourceProvider, {
+ 'aaa': [libFolderA],
+ 'bbb': [libFolderB],
+ })
+ ]);
+
+ PackageBundle sdkBundle = getSdkBundle(sdk);
+ PackageBundle bundle = manager.computeSdkExtension(context, sdkBundle);
+ expect(bundle, isNotNull);
+ expect(bundle.linkedLibraryUris, ['dart:aaa.internal']);
+ expect(bundle.unlinkedUnitUris, [
+ 'dart:aaa.internal',
+ 'dart:aaa.internal/src/p1.dart',
+ 'dart:aaa.internal/src/p2.dart'
+ ]);
+ expect(bundle.unlinkedUnits, hasLength(3));
+ expect(bundle.unlinkedUnits[0].classes.map((c) => c.name), ['ExtA']);
+ expect(bundle.unlinkedUnits[1].classes.map((c) => c.name), ['ExtAA']);
+ expect(bundle.unlinkedUnits[2].classes.map((c) => c.name), ['ExtAB']);
+ // The library is linked.
+ expect(bundle.linkedLibraries, hasLength(1));
+ LinkedLibrary linkedLibrary = bundle.linkedLibraries[0];
+ // V0 is linked
+ {
+ UnlinkedUnit unlinkedUnit = bundle.unlinkedUnits[0];
+ LinkedUnit linkedUnit = linkedLibrary.units[0];
+ expect(unlinkedUnit.variables, hasLength(1));
+ UnlinkedVariable variable = unlinkedUnit.variables[0];
+ expect(variable.name, 'V0');
+ int typeRef = variable.type.reference;
+ expect(unlinkedUnit.references[typeRef].name, 'int');
+ LinkedReference linkedReference = linkedUnit.references[typeRef];
+ expect(linkedLibrary.dependencies[linkedReference.dependency].uri,
+ 'dart:core');
+ }
+ // V1 is linked
+ {
+ UnlinkedUnit unlinkedUnit = bundle.unlinkedUnits[1];
+ LinkedUnit linkedUnit = linkedLibrary.units[1];
+ expect(unlinkedUnit.variables, hasLength(1));
+ UnlinkedVariable variable = unlinkedUnit.variables[0];
+ expect(variable.name, 'V1');
+ int typeRef = variable.type.reference;
+ expect(unlinkedUnit.references[typeRef].name, 'double');
+ LinkedReference linkedReference = linkedUnit.references[typeRef];
+ expect(linkedLibrary.dependencies[linkedReference.dependency].uri,
+ 'dart:core');
+ }
+ // V2 is linked
+ {
+ UnlinkedUnit unlinkedUnit = bundle.unlinkedUnits[2];
+ LinkedUnit linkedUnit = linkedLibrary.units[2];
+ expect(unlinkedUnit.variables, hasLength(1));
+ UnlinkedVariable variable = unlinkedUnit.variables[0];
+ expect(variable.name, 'V2');
+ int typeRef = variable.type.reference;
+ expect(unlinkedUnit.references[typeRef].name, 'Future');
+ LinkedReference linkedReference = linkedUnit.references[typeRef];
+ expect(linkedLibrary.dependencies[linkedReference.dependency].uri,
+ 'dart:async');
+ }
+ }
+
test_getLinkedBundles_hasCycle() async {
resourceProvider.newFile(
'$CACHE/aaa/lib/a.dart',
« 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