Index: pkg/front_end/test/incremental_kernel_generator_test.dart |
diff --git a/pkg/front_end/test/incremental_kernel_generator_test.dart b/pkg/front_end/test/incremental_kernel_generator_test.dart |
index 5e636c070c480111534d145949ff0a7d2ce9c88e..1b714d73ae14f86216a7c1d0db27ddc4882d33d4 100644 |
--- a/pkg/front_end/test/incremental_kernel_generator_test.dart |
+++ b/pkg/front_end/test/incremental_kernel_generator_test.dart |
@@ -8,8 +8,12 @@ import 'package:front_end/compiler_options.dart'; |
import 'package:front_end/incremental_kernel_generator.dart'; |
import 'package:front_end/memory_file_system.dart'; |
import 'package:front_end/src/incremental/byte_store.dart'; |
+import 'package:front_end/src/incremental/limited_ast_to_binary.dart'; |
+import 'package:front_end/src/incremental_kernel_generator_impl.dart'; |
import 'package:kernel/ast.dart'; |
+import 'package:kernel/binary/ast_from_binary.dart'; |
import 'package:kernel/text/ast_to_text.dart'; |
+import 'package:kernel/verifier.dart'; |
import 'package:test/test.dart'; |
import 'package:test_reflective_loader/test_reflective_loader.dart'; |
@@ -263,6 +267,107 @@ static field (core::String) → core::int f; |
'''); |
} |
+ test_limited_ast_to_binary() async { |
+ writeFile('/test/.packages', 'test:lib/'); |
+ String aPath = '/test/lib/a.dart'; |
+ String bPath = '/test/lib/b.dart'; |
+ writeFile( |
+ aPath, |
+ r''' |
+int topField = 0; |
+int get topGetter => 0; |
+int topFunction({p}) => 0; |
+ |
+class A { |
+ static int staticField; |
+ static int get staticGetter => 0; |
+ static int staticMethod() => 0; |
+ |
+ int instanceField; |
+ int get instanceGetter => 0; |
+ int instanceMethod() => 0; |
+ |
+ A(); |
+ A.named(); |
+} |
+'''); |
+ Uri bUri = writeFile( |
+ bPath, |
+ r''' |
+import 'a.dart'; |
+ |
+class B extends A { |
+ B() : super(); |
+ B.named() : super.named(); |
+ |
+ void foo() { |
+ super.instanceMethod(); |
+ instanceMethod(); |
+ } |
+ |
+ int instanceMethod() => 0; |
+} |
+ |
+main() { |
+ topField; |
+ topField = 0; |
+ var v1 = topGetter; |
+ var v2 = topFunction(p: 0); |
+ |
+ A.staticField; |
+ A.staticField = 0; |
+ var v3 = A.staticGetter; |
+ var v4 = A.staticMethod(); |
+ |
+ var a = new A(); |
+ a.instanceField; |
+ a.instanceField = 0; |
+ var v5 = a.instanceGetter; |
+ var v6 = a.instanceMethod(); |
+} |
+'''); |
+ |
+ Program initialProgram = await getInitialState(bUri); |
+ |
+ String initialKernelText; |
+ List<int> bytes; |
+ { |
+ Library initialLibrary = _getLibrary(initialProgram, bUri); |
+ initialKernelText = _getLibraryText(initialLibrary); |
+ |
+ var byteSink = new ByteSink(); |
+ var printer = new LimitedBinaryPrinter( |
+ byteSink, (library) => library.importUri == bUri); |
+ printer.writeProgramFile(initialProgram); |
+ bytes = byteSink.builder.takeBytes(); |
+ |
+ // Remove b.dart from the initial program. |
+ // So, the program is now ready for re-adding the library. |
+ initialProgram.libraries.remove(initialLibrary); |
+ initialProgram.root.removeChild(initialLibrary.importUri.toString()); |
+ } |
+ |
+ // Load b.dart from bytes using the initial name root, so that |
+ // serialized canonical names can be linked to corresponding nodes. |
+ Library loadedLibrary; |
+ { |
+ var programForLoading = new Program(nameRoot: initialProgram.root); |
+ var reader = new BinaryBuilder(bytes); |
+ reader.readProgram(programForLoading); |
+ loadedLibrary = _getLibrary(programForLoading, bUri); |
+ } |
+ |
+ // Add the library into the initial program. |
+ initialProgram.libraries.add(loadedLibrary); |
Siggi Cherem (dart-lang)
2017/05/23 20:54:51
nit: either rename initialProgram or add a second
scheglov
2017/05/23 21:54:43
I renamed it to just "program".
|
+ loadedLibrary.parent = initialProgram; |
+ |
+ // The loaded library has the same text. |
+ expect(_getLibraryText(loadedLibrary), initialKernelText); |
+ |
+ // The program with re-added library passes verification. |
Siggi Cherem (dart-lang)
2017/05/23 20:54:51
I'd delete this and the comment above, I think the
scheglov
2017/05/23 21:54:43
OK, I removed both comments.
A second variable na
|
+ verifyProgram(initialProgram); |
+ } |
+ |
test_updateEntryPoint() async { |
writeFile('/test/.packages', 'test:lib/'); |
String path = '/test/lib/test.dart'; |