| Index: dart/tests/try/poi/diff_test.dart
|
| diff --git a/dart/tests/try/poi/diff_test.dart b/dart/tests/try/poi/diff_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ae384cf80a4e3dfb1cc04662436821fc3a684212
|
| --- /dev/null
|
| +++ b/dart/tests/try/poi/diff_test.dart
|
| @@ -0,0 +1,123 @@
|
| +// 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 element diff.
|
| +library trydart.diff_test;
|
| +
|
| +import 'dart:async' show
|
| + Future;
|
| +
|
| +import 'package:expect/expect.dart' show
|
| + Expect;
|
| +
|
| +import 'package:async_helper/async_helper.dart' show
|
| + asyncTest;
|
| +
|
| +import 'package:compiler/implementation/dart2jslib.dart' show
|
| + Compiler,
|
| + Script;
|
| +
|
| +import 'package:compiler/implementation/source_file.dart' show
|
| + StringSourceFile;
|
| +
|
| +import 'package:compiler/implementation/elements/elements.dart' show
|
| + Element,
|
| + LibraryElement;
|
| +
|
| +import 'package:try/poi/diff.dart' show
|
| + Difference,
|
| + computeDifference;
|
| +
|
| +import '../../compiler/dart2js/compiler_helper.dart' show
|
| + MockCompiler,
|
| + compilerFor;
|
| +
|
| +final TEST_DATA = [
|
| + {
|
| + 'beforeSource': 'main() {}',
|
| + 'afterSource': 'main() { var x; }',
|
| + 'expectations': [['main', 'main']],
|
| + },
|
| + {
|
| + 'beforeSource': 'main() {}',
|
| + 'afterSource': 'main() { /* ignored */ }',
|
| + 'expectations': [],
|
| + },
|
| + {
|
| + 'beforeSource': 'main() {}',
|
| + 'afterSource': 'main() { }',
|
| + 'expectations': [],
|
| + },
|
| + {
|
| + 'beforeSource': 'var i; main() {}',
|
| + 'afterSource': 'main() { } var i;',
|
| + 'expectations': [],
|
| + },
|
| + {
|
| + 'beforeSource': 'main() {}',
|
| + 'afterSource': '',
|
| + 'expectations': [['main', null]],
|
| + },
|
| + {
|
| + 'beforeSource': '',
|
| + 'afterSource': 'main() {}',
|
| + 'expectations': [[null, 'main']],
|
| + },
|
| +];
|
| +
|
| +const String SCHEME = 'org.trydart.diff-test';
|
| +
|
| +Uri customUri(String path) => Uri.parse('$SCHEME://$path');
|
| +
|
| +Future<List<Difference>> testDifference(
|
| + String beforeSource,
|
| + String afterSource) {
|
| + Uri scriptUri = customUri('main.dart');
|
| + MockCompiler compiler = compilerFor(beforeSource, scriptUri);
|
| +
|
| + Future<LibraryElement> future = compiler.libraryLoader.loadLibrary(scriptUri);
|
| + return future.then((LibraryElement library) {
|
| + Script sourceScript = new Script(
|
| + scriptUri, scriptUri, new StringSourceFile('$scriptUri', afterSource));
|
| + var dartPrivacyIsBroken = compiler.libraryLoader;
|
| + LibraryElement newLibrary = dartPrivacyIsBroken.createLibrarySync(
|
| + null, sourceScript, scriptUri);
|
| + return computeDifference(library, newLibrary);
|
| + });
|
| +}
|
| +
|
| +Future testData(Map data) {
|
| + String beforeSource = data['beforeSource'];
|
| + String afterSource = data['afterSource'];
|
| + List expectations = data['expectations'];
|
| +
|
| + validate(List<Difference> differences) {
|
| + return checkExpectations(expectations, differences);
|
| + }
|
| +
|
| + return testDifference(beforeSource, afterSource).then(validate);
|
| +}
|
| +
|
| +String elementNameOrNull(Element element) {
|
| + return element == null ? null : element.name;
|
| +}
|
| +
|
| +checkExpectations(List expectations, List<Difference> differences) {
|
| + Iterator iterator = expectations.iterator;
|
| + for (Difference difference in differences) {
|
| + Expect.isTrue(iterator.moveNext());
|
| + List expectation = iterator.current;
|
| + String expectedBeforeName = expectation[0];
|
| + String expectedAfterName = expectation[1];
|
| + Expect.stringEquals(
|
| + expectedBeforeName, elementNameOrNull(difference.before));
|
| + Expect.stringEquals(expectedAfterName, elementNameOrNull(difference.after));
|
| + print(difference);
|
| + }
|
| + Expect.isFalse(iterator.moveNext());
|
| +}
|
| +
|
| +void main() {
|
| + asyncTest(() => Future.forEach(TEST_DATA, testData));
|
| +}
|
|
|