| Index: tests/compiler/dart2js/deferred_not_in_main_test.dart
|
| diff --git a/tests/compiler/dart2js/deferred_not_in_main_test.dart b/tests/compiler/dart2js/deferred_not_in_main_test.dart
|
| index 80f2a230f9ddc31ea255754225a4404548aa80c7..2955879efcd3d0148da923ba04c0dd61c0f43633 100644
|
| --- a/tests/compiler/dart2js/deferred_not_in_main_test.dart
|
| +++ b/tests/compiler/dart2js/deferred_not_in_main_test.dart
|
| @@ -12,9 +12,14 @@ import 'package:expect/expect.dart';
|
| import 'memory_compiler.dart';
|
|
|
| void main() {
|
| + deferredTest1();
|
| + deferredTest2();
|
| +}
|
| +
|
| +void deferredTest1() {
|
| asyncTest(() async {
|
| CompilationResult result =
|
| - await runCompiler(memorySourceFiles: MEMORY_SOURCE_FILES);
|
| + await runCompiler(memorySourceFiles: TEST1);
|
| Compiler compiler = result.compiler;
|
|
|
| lookupLibrary(name) {
|
| @@ -26,7 +31,6 @@ void main() {
|
|
|
| var mainOutputUnit = compiler.deferredLoadTask.mainOutputUnit;
|
| var backend = compiler.backend;
|
| - var classes = backend.emitter.neededClasses;
|
| var lib1 = lookupLibrary("memory:lib1.dart");
|
| var lib2 = lookupLibrary("memory:lib2.dart");
|
| var foo1 = lib1.find("foo1");
|
| @@ -36,9 +40,29 @@ void main() {
|
| });
|
| }
|
|
|
| +void deferredTest2() {
|
| + asyncTest(() async {
|
| + CompilationResult result = await runCompiler(memorySourceFiles: TEST2);
|
| + Compiler compiler = result.compiler;
|
| +
|
| + lookupLibrary(name) {
|
| + return compiler.libraryLoader.lookupLibrary(Uri.parse(name));
|
| + }
|
| +
|
| + var main = compiler.mainFunction;
|
| + var outputUnitForElement = compiler.deferredLoadTask.outputUnitForElement;
|
| +
|
| + var mainOutputUnit = compiler.deferredLoadTask.mainOutputUnit;
|
| + var shared = lookupLibrary("memory:shared.dart");
|
| + var a = shared.find("A");
|
| +
|
| + Expect.equals(mainOutputUnit, outputUnitForElement(a));
|
| + });
|
| +}
|
| +
|
| // lib1 imports lib2 deferred. But mainlib never uses DeferredLibrary.
|
| // Test that this case works.
|
| -const Map MEMORY_SOURCE_FILES = const {
|
| +const Map TEST1 = const {
|
| "main.dart":"""
|
| library mainlib;
|
|
|
| @@ -65,3 +89,31 @@ library lib2;
|
| void foo2() {}
|
| """,
|
| };
|
| +
|
| +// main indirectly uses class A from shared. A should still be included in the
|
| +// main fragment.
|
| +const Map TEST2 = const {
|
| + "main.dart":"""
|
| +import 'def.dart' deferred as def;
|
| +import 'shared.dart';
|
| +
|
| +typedef void F(x);
|
| +
|
| +main() {
|
| + print(foo is F);
|
| + def.loadLibrary().then((_) {
|
| + def.toto();
|
| + });
|
| +}
|
| +""",
|
| + "def.dart":"""
|
| +import 'shared.dart';
|
| +
|
| +toto() { print(new A()); }
|
| +""",
|
| + "shared.dart":"""
|
| +class A {}
|
| +class B extends A {}
|
| +foo(B b) => null;
|
| +""",
|
| +};
|
|
|