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

Unified Diff: pkg/front_end/test/incremental_kernel_generator_test.dart

Issue 2638423002: Fix incremental kernel builder to handle multiple calls to computeDelta. (Closed)
Patch Set: Created 3 years, 11 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
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 3d093fa0a44a63fcb55e2dc18e56c07892709941..9dc58c2de1bce127a22dd8f0f9314b4feac85252 100644
--- a/pkg/front_end/test/incremental_kernel_generator_test.dart
+++ b/pkg/front_end/test/incremental_kernel_generator_test.dart
@@ -32,6 +32,8 @@ List<int> _readSdkSummary() {
return resourceProvider.getFile(path).readAsBytesSync();
}
+typedef void LibraryChecker(Library lib);
+
@reflectiveTest
class IncrementalKernelGeneratorTest {
static final sdkSummaryUri = Uri.parse('special:sdk_summary');
@@ -42,6 +44,17 @@ class IncrementalKernelGeneratorTest {
/// The object under test.
IncrementalKernelGenerator incrementalKernelGenerator;
+ void checkLibraries(
+ List<Library> libraries, Map<Uri, LibraryChecker> expected) {
+ expect(
+ libraries.map((lib) => lib.importUri), unorderedEquals(expected.keys));
+ var librariesMap = <Uri, Library>{};
+ for (var lib in libraries) {
+ librariesMap[lib.importUri] = lib;
+ }
+ expected.forEach((uri, checker) => checker(librariesMap[uri]));
+ }
+
Future<Map<Uri, Program>> getInitialState(Uri startingUri) async {
fileSystem.entityForUri(sdkSummaryUri).writeAsBytesSync(_sdkSummary);
incrementalKernelGenerator = new IncrementalKernelGenerator(
@@ -54,22 +67,52 @@ class IncrementalKernelGeneratorTest {
return (await incrementalKernelGenerator.computeDelta()).newState;
}
- test_emptyProgram() async {
- writeFiles({'/foo.dart': 'main() {}'});
+ test_incrementalUpdate_referenceToCore() async {
+ // TODO(paulberry): test parts.
+ writeFiles({'/foo.dart': 'main() { print(1); }'});
var fileUri = Uri.parse('file:///foo.dart');
var initialState = await getInitialState(fileUri);
expect(initialState.keys, unorderedEquals([fileUri]));
- var program = initialState[fileUri];
- expect(program.libraries, hasLength(1));
- var library = program.libraries[0];
- expect(library.importUri, fileUri);
- expect(library.classes, isEmpty);
- expect(library.procedures, hasLength(1));
- expect(library.procedures[0].name.name, 'main');
- var body = library.procedures[0].function.body;
- expect(body, new isInstanceOf<Block>());
- var block = body as Block;
- expect(block.statements, isEmpty);
+ void _checkMain(List<Library> libraries, int expectedArgument) {
+ checkLibraries(libraries, {
+ fileUri: (library) {
+ expect(library.importUri, fileUri);
+ expect(library.classes, isEmpty);
+ expect(library.procedures, hasLength(1));
+ expect(library.procedures[0].name.name, 'main');
+ var body = library.procedures[0].function.body;
+ expect(body, new isInstanceOf<Block>());
+ var block = body as Block;
+ expect(block.statements, hasLength(1));
+ expect(block.statements[0], new isInstanceOf<ExpressionStatement>());
+ var expressionStatement = block.statements[0] as ExpressionStatement;
+ expect(expressionStatement.expression,
+ new isInstanceOf<StaticInvocation>());
+ var staticInvocation =
+ expressionStatement.expression as StaticInvocation;
+ expect(staticInvocation.target.name.name, 'print');
+ expect(staticInvocation.arguments.positional, hasLength(1));
+ expect(staticInvocation.arguments.positional[0],
+ new isInstanceOf<IntLiteral>());
+ var intLiteral =
+ staticInvocation.arguments.positional[0] as IntLiteral;
+ expect(intLiteral.value, expectedArgument);
+ },
+ Uri.parse('dart:core'): (library) {
+ // Should contain the procedure "print" but not its definition.
+ expect(library.procedures, hasLength(1));
+ expect(library.procedures[0].name.name, 'print');
+ expect(library.procedures[0].function.body, isNull);
+ }
+ });
+ }
+
+ _checkMain(initialState[fileUri].libraries, 1);
+ writeFiles({'/foo.dart': 'main() { print(2); }'});
+ incrementalKernelGenerator.invalidateAll();
+ var deltaProgram = await incrementalKernelGenerator.computeDelta();
+ expect(deltaProgram.newState.keys, unorderedEquals([fileUri]));
+ _checkMain(deltaProgram.newState[fileUri].libraries, 2);
}
/// Write the given file contents to the virtual filesystem.

Powered by Google App Engine
This is Rietveld 408576698