Chromium Code Reviews| 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 4f5cafee809cd60139258d5a69a1aa9b3b24d0dc..6ee3a21e47b3e6b2f341571c5be27e34f9c238d3 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 '../../kernel/lib/binary/limited_ast_to_binary.dart'; |
|
ahe
2017/05/24 08:36:00
You probably want to use a package URI here.
scheglov
2017/05/25 17:44:09
Fixed.
Thanks.
|
| +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'; |
| @@ -316,6 +320,104 @@ 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 program = await getInitialState(bUri); |
| + |
| + String initialKernelText; |
| + List<int> bytes; |
| + { |
| + Library initialLibrary = _getLibrary(program, bUri); |
| + initialKernelText = _getLibraryText(initialLibrary); |
| + |
| + var byteSink = new ByteSink(); |
| + var printer = new LimitedBinaryPrinter( |
| + byteSink, (library) => library.importUri == bUri); |
| + printer.writeProgramFile(program); |
| + bytes = byteSink.builder.takeBytes(); |
| + |
| + // Remove b.dart from the program. |
| + // So, the program is now ready for re-adding the library. |
| + program.libraries.remove(initialLibrary); |
| + program.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: program.root); |
| + var reader = new BinaryBuilder(bytes); |
| + reader.readProgram(programForLoading); |
| + loadedLibrary = _getLibrary(programForLoading, bUri); |
| + } |
| + |
| + // Add the library into the program. |
| + program.libraries.add(loadedLibrary); |
| + loadedLibrary.parent = program; |
| + |
| + expect(_getLibraryText(loadedLibrary), initialKernelText); |
| + verifyProgram(program); |
| + } |
| + |
| test_updateEntryPoint() async { |
| writeFile('/test/.packages', 'test:lib/'); |
| String path = '/test/lib/test.dart'; |