| Index: dart/tests/try/poi/library_updater_test.dart
|
| diff --git a/dart/tests/try/poi/library_updater_test.dart b/dart/tests/try/poi/library_updater_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0a50560948aff3195de040ba5fe8cbf6cadcef68
|
| --- /dev/null
|
| +++ b/dart/tests/try/poi/library_updater_test.dart
|
| @@ -0,0 +1,124 @@
|
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +// Test of LibraryUpdater.
|
| +library trydart.library_updater_test;
|
| +
|
| +import 'dart:convert' show
|
| + UTF8;
|
| +
|
| +import 'package:dart2js_incremental/library_updater.dart' show
|
| + LibraryUpdater,
|
| + Update;
|
| +
|
| +import 'package:compiler/implementation/elements/elements.dart' show
|
| + LibraryElement;
|
| +
|
| +import 'compiler_test_case.dart';
|
| +
|
| +void nolog(_) {}
|
| +
|
| +class LibraryUpdaterTestCase extends CompilerTestCase {
|
| + final String newSource;
|
| +
|
| + final bool expectedCanReuse;
|
| +
|
| + final List<String> expectedUpdates;
|
| +
|
| + LibraryUpdaterTestCase(
|
| + {String before,
|
| + String after,
|
| + bool canReuse,
|
| + List<String> updates})
|
| + : this.newSource = after,
|
| + this.expectedCanReuse = canReuse,
|
| + this.expectedUpdates = updates,
|
| + super(before);
|
| +
|
| + Future run() => mainApp.then((LibraryElement library) {
|
| + LibraryUpdater updater =
|
| + new LibraryUpdater(this.compiler, null, scriptUri, nolog, nolog);
|
| + bool actualCanReuse =
|
| + updater.canReuseLibrary(library, UTF8.encode(newSource));
|
| + Expect.equals(expectedCanReuse, actualCanReuse);
|
| +
|
| + Expect.setEquals(
|
| + expectedUpdates.toSet(),
|
| + updater.updates.map((Update update) => update.before.name).toSet());
|
| + });
|
| +
|
| + String toString() => 'Before:\n$source\n\n\nAfter:\n$newSource';
|
| +}
|
| +
|
| +void main() {
|
| + runTests(
|
| + [
|
| + // Only method body changed. Can be reused if 'main' is
|
| + // updated/patched.
|
| + new LibraryUpdaterTestCase(
|
| + before: 'main() { print("Hello, World!"); }',
|
| + after: 'main() { print("Hello, Brave New World!"); }',
|
| + canReuse: true,
|
| + updates: ['main']),
|
| +
|
| + // Signature changed. Can't be reused.
|
| + new LibraryUpdaterTestCase(
|
| + before: 'main() { print("Hello, World!"); }',
|
| + after: 'void main() { print("Hello, World!"); }',
|
| + canReuse: false,
|
| + updates: []),
|
| +
|
| + // Only whitespace changes. Can be reused; no updates/patches needed.
|
| + new LibraryUpdaterTestCase(
|
| + before: 'main(){print("Hello, World!");}',
|
| + after: 'main() { print ( "Hello, World!" ) ; }',
|
| + canReuse: true,
|
| + updates: []),
|
| +
|
| + // Only whitespace/comment changes (in signature). Can be reused; no
|
| + // updates/patches needed.
|
| + new LibraryUpdaterTestCase(
|
| + before:
|
| + '/* Implicitly dynamic. */ main ( /* No parameters. */ ) '
|
| + '{print("Hello, World!");}',
|
| + after: 'main() {print("Hello, World!");}',
|
| + canReuse: true,
|
| + updates: []),
|
| +
|
| + // Arrow function changed to method body. Can be reused if 'main' is
|
| + // updated/patched.
|
| + new LibraryUpdaterTestCase(
|
| + before: 'main() => null',
|
| + after: 'main() { return null; }',
|
| + canReuse: true,
|
| + updates: ['main']),
|
| +
|
| + // Empty body changed to contain a statement. Can be reused if 'main'
|
| + // is updated/patched.
|
| + new LibraryUpdaterTestCase(
|
| + before: 'main() {}',
|
| + after: 'main() { return null; }',
|
| + canReuse: true,
|
| + updates: ['main']),
|
| +
|
| + // Empty body changed to arrow. Can be reused if 'main'
|
| + // is updated/patched.
|
| + new LibraryUpdaterTestCase(
|
| + before: 'main() {}',
|
| + after: 'main() => null;',
|
| + canReuse: true,
|
| + updates: ['main']),
|
| +
|
| + // Arrow changed to empty body. Can be reused if 'main'
|
| + // is updated/patched.
|
| + new LibraryUpdaterTestCase(
|
| + before: 'main() => null;',
|
| + after: 'main() {}',
|
| + canReuse: true,
|
| + updates: ['main']),
|
| +
|
| + // TODO(ahe): When supporting class members, test abstract methods.
|
| + ]
|
| + );
|
| +}
|
|
|