Index: tests/compiler/dart2js/patch_test.dart |
diff --git a/tests/compiler/dart2js/patch_test.dart b/tests/compiler/dart2js/patch_test.dart |
index 19818425804bf8c418d88bbf5fcb8a8e8b705383..6077db812fc3c9d4e38d5ed2c686574c62cf1381 100644 |
--- a/tests/compiler/dart2js/patch_test.dart |
+++ b/tests/compiler/dart2js/patch_test.dart |
@@ -125,24 +125,49 @@ Element ensure(compiler, |
return element; |
} |
-testPatchFunction() { |
- asyncTest(() => applyPatch( |
+Future testPatchFunction() async { |
+ var compiler = await applyPatch( |
"external test();", |
- "@patch test() { return 'string'; } ").then((compiler) { |
- ensure(compiler, "test", compiler.coreLibrary.find, |
- expectIsPatched: true, checkHasBody: true); |
- ensure(compiler, "test", compiler.coreLibrary.patch.find, |
- expectIsPatch: true, checkHasBody: true); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- })); |
+ "@patch test() { return 'string'; } "); |
+ ensure(compiler, "test", compiler.coreLibrary.find, |
+ expectIsPatched: true, checkHasBody: true); |
+ ensure(compiler, "test", compiler.coreLibrary.patch.find, |
+ expectIsPatch: true, checkHasBody: true); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
+} |
+ |
+Future testPatchFunctionMetadata() async { |
+ var compiler = await applyPatch( |
+ """ |
+ const a = 0; |
+ @a external test(); |
+ """, |
+ """ |
+ const b = 1; |
+ @patch @b test() {} |
+ """); |
+ Element origin = ensure(compiler, "test", compiler.coreLibrary.find, |
+ expectIsPatched: true, checkHasBody: true); |
+ Element patch = ensure(compiler, "test", compiler.coreLibrary.patch.find, |
+ expectIsPatch: true, checkHasBody: true); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
+ |
+ Expect.equals(1, origin.metadata.length, |
+ "Unexpected origin metadata: ${origin.metadata}."); |
+ Expect.equals(3, patch.metadata.length, |
+ "Unexpected patch metadata: ${patch.metadata}."); |
} |
-testPatchVersioned() { |
+Future testPatchVersioned() async { |
String fullPatch = "test(){return 'string';}"; |
String lazyPatch = "test(){return 'new and improved string';}"; |
@@ -152,64 +177,64 @@ testPatchVersioned() { |
@patch_lazy $lazyPatch |
"""; |
- test(String patchVersion, |
+ Future test(String patchVersion, |
{String patchText, |
bool expectIsPatched: true, |
String expectedError, |
String defaultPatch: '', |
- String expectedInternalError}) { |
- asyncTest(() => applyPatch( |
+ String expectedInternalError}) async { |
+ return applyPatch( |
"external test();", |
""" |
$defaultPatch |
$patchSource |
""", |
patchVersion: patchVersion).then((compiler) { |
- Element origin = |
- ensure(compiler, "test", compiler.coreLibrary.find, |
- expectIsPatched: expectIsPatched, checkHasBody: true); |
- if (expectIsPatched) { |
- AstElement patch = |
- ensure(compiler, "test", compiler.coreLibrary.patch.find, |
- expectIsPatch: true, checkHasBody: true); |
- Expect.equals(origin.patch, patch); |
- Expect.equals(patch.origin, origin); |
- Expect.equals(patchText, patch.node.toString()); |
- } |
- |
- compiler.analyzeElement(origin); |
- compiler.enqueuer.resolution.emptyDeferredTaskQueue(); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- if (expectedError != null) { |
- Expect.equals(expectedError, |
- compiler.errors[0].message.toString()); |
- } else { |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- } |
- }).catchError((error) { |
- if (expectedInternalError != null) { |
- Expect.equals( |
- 'Internal Error: $expectedInternalError', error.toString()); |
- } else { |
- throw error; |
- } |
- })); |
+ Element origin = |
+ ensure(compiler, "test", compiler.coreLibrary.find, |
+ expectIsPatched: expectIsPatched, checkHasBody: true); |
+ if (expectIsPatched) { |
+ AstElement patch = |
+ ensure(compiler, "test", compiler.coreLibrary.patch.find, |
+ expectIsPatch: true, checkHasBody: true); |
+ Expect.equals(origin.patch, patch); |
+ Expect.equals(patch.origin, origin); |
+ Expect.equals(patchText, patch.node.toString()); |
+ } |
+ |
+ compiler.analyzeElement(origin); |
+ compiler.enqueuer.resolution.emptyDeferredTaskQueue(); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ if (expectedError != null) { |
+ Expect.equals(expectedError, |
+ compiler.errors[0].message.toString()); |
+ } else { |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
+ } |
+ }).catchError((error) { |
+ if (expectedInternalError != null) { |
+ Expect.equals( |
+ 'Internal Error: $expectedInternalError', error.toString()); |
+ } else { |
+ throw error; |
+ } |
+ }); |
} |
- test('full', patchText: fullPatch); |
- test('lazy', patchText: lazyPatch); |
- test('unknown', expectIsPatched: false, |
+ await test('full', patchText: fullPatch); |
+ await test('lazy', patchText: lazyPatch); |
+ await test('unknown', expectIsPatched: false, |
expectedError: 'External method without an implementation.'); |
- test('full', |
+ await test('full', |
defaultPatch: "@patch test(){}", |
expectedInternalError: "Trying to patch a function more than once."); |
} |
-testPatchConstructor() { |
- asyncTest(() => applyPatch( |
+Future testPatchConstructor() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
external Class(); |
@@ -219,35 +244,34 @@ testPatchConstructor() { |
@patch class Class { |
@patch Class(); |
} |
- """).then((compiler) { |
- var classOrigin = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- classOrigin.ensureResolved(compiler); |
- var classPatch = ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
- expectIsPatch: true); |
- |
- Expect.equals(classPatch, classOrigin.patch); |
- Expect.equals(classOrigin, classPatch.origin); |
- |
- var constructorOrigin = ensure(compiler, "", |
- (name) => classOrigin.localLookup(name), |
- expectIsPatched: true); |
- var constructorPatch = ensure(compiler, "", |
- (name) => classPatch.localLookup(name), |
- expectIsPatch: true); |
- |
- Expect.equals(constructorPatch, constructorOrigin.patch); |
- Expect.equals(constructorOrigin, constructorPatch.origin); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- })); |
+ """); |
+ var classOrigin = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ classOrigin.ensureResolved(compiler); |
+ var classPatch = ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
+ expectIsPatch: true); |
+ |
+ Expect.equals(classPatch, classOrigin.patch); |
+ Expect.equals(classOrigin, classPatch.origin); |
+ |
+ var constructorOrigin = ensure(compiler, "", |
+ (name) => classOrigin.localLookup(name), |
+ expectIsPatched: true); |
+ var constructorPatch = ensure(compiler, "", |
+ (name) => classPatch.localLookup(name), |
+ expectIsPatch: true); |
+ |
+ Expect.equals(constructorPatch, constructorOrigin.patch); |
+ Expect.equals(constructorOrigin, constructorPatch.origin); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
} |
-testPatchRedirectingConstructor() { |
- asyncTest(() => applyPatch( |
+Future testPatchRedirectingConstructor() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
Class(x) : this._(x, false); |
@@ -259,42 +283,41 @@ testPatchRedirectingConstructor() { |
@patch class Class { |
@patch Class._(x, y) { print('$x,$y'); } |
} |
- """).then((compiler) { |
- var classOrigin = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- classOrigin.ensureResolved(compiler); |
- |
- var classPatch = ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
- expectIsPatch: true); |
- |
- Expect.equals(classOrigin, classPatch.origin); |
- Expect.equals(classPatch, classOrigin.patch); |
- |
- var constructorRedirecting = |
- ensure(compiler, "", |
- (name) => classOrigin.localLookup(name)); |
- var constructorOrigin = |
- ensure(compiler, "_", |
- (name) => classOrigin.localLookup(name), |
- expectIsPatched: true); |
- var constructorPatch = |
- ensure(compiler, "_", |
- (name) => classPatch.localLookup(name), |
- expectIsPatch: true); |
- Expect.equals(constructorOrigin, constructorPatch.origin); |
- Expect.equals(constructorPatch, constructorOrigin.patch); |
- |
- compiler.resolver.resolve(constructorRedirecting); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- })); |
+ """); |
+ var classOrigin = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ classOrigin.ensureResolved(compiler); |
+ |
+ var classPatch = ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
+ expectIsPatch: true); |
+ |
+ Expect.equals(classOrigin, classPatch.origin); |
+ Expect.equals(classPatch, classOrigin.patch); |
+ |
+ var constructorRedirecting = |
+ ensure(compiler, "", |
+ (name) => classOrigin.localLookup(name)); |
+ var constructorOrigin = |
+ ensure(compiler, "_", |
+ (name) => classOrigin.localLookup(name), |
+ expectIsPatched: true); |
+ var constructorPatch = |
+ ensure(compiler, "_", |
+ (name) => classPatch.localLookup(name), |
+ expectIsPatch: true); |
+ Expect.equals(constructorOrigin, constructorPatch.origin); |
+ Expect.equals(constructorPatch, constructorOrigin.patch); |
+ |
+ compiler.resolver.resolve(constructorRedirecting); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
} |
-testPatchMember() { |
- asyncTest(() => applyPatch( |
+Future testPatchMember() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
external String toString(); |
@@ -304,27 +327,26 @@ testPatchMember() { |
@patch class Class { |
@patch String toString() => 'string'; |
} |
- """).then((compiler) { |
- var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- container.parseNode(compiler); |
- ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
- expectIsPatch: true); |
- |
- ensure(compiler, "toString", container.lookupLocalMember, |
- expectIsPatched: true, checkHasBody: true); |
- ensure(compiler, "toString", container.patch.lookupLocalMember, |
- expectIsPatch: true, checkHasBody: true); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- })); |
+ """); |
+ var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ container.parseNode(compiler); |
+ ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
+ expectIsPatch: true); |
+ |
+ ensure(compiler, "toString", container.lookupLocalMember, |
+ expectIsPatched: true, checkHasBody: true); |
+ ensure(compiler, "toString", container.patch.lookupLocalMember, |
+ expectIsPatch: true, checkHasBody: true); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
} |
-testPatchGetter() { |
- asyncTest(() => applyPatch( |
+Future testPatchGetter() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
external int get field; |
@@ -334,32 +356,31 @@ testPatchGetter() { |
@patch class Class { |
@patch int get field => 5; |
} |
- """).then((compiler) { |
- var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- container.parseNode(compiler); |
- ensure(compiler, |
- "field", |
- container.lookupLocalMember, |
- expectIsGetter: true, |
- expectIsPatched: true, |
- checkHasBody: true); |
- ensure(compiler, |
- "field", |
- container.patch.lookupLocalMember, |
- expectIsGetter: true, |
- expectIsPatch: true, |
- checkHasBody: true); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- })); |
+ """); |
+ var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ container.parseNode(compiler); |
+ ensure(compiler, |
+ "field", |
+ container.lookupLocalMember, |
+ expectIsGetter: true, |
+ expectIsPatched: true, |
+ checkHasBody: true); |
+ ensure(compiler, |
+ "field", |
+ container.patch.lookupLocalMember, |
+ expectIsGetter: true, |
+ expectIsPatch: true, |
+ checkHasBody: true); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
} |
-testRegularMember() { |
- asyncTest(() => applyPatch( |
+Future testRegularMember() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
void regular() {} |
@@ -368,27 +389,26 @@ testRegularMember() { |
""" |
@patch class Class { |
} |
- """).then((compiler) { |
- var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- container.parseNode(compiler); |
- ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
- expectIsPatch: true); |
- |
- ensure(compiler, "regular", container.lookupLocalMember, |
- checkHasBody: true, expectIsRegular: true); |
- ensure(compiler, "regular", container.patch.lookupLocalMember, |
- checkHasBody: true, expectIsRegular: true); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- })); |
+ """); |
+ var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ container.parseNode(compiler); |
+ ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
+ expectIsPatch: true); |
+ |
+ ensure(compiler, "regular", container.lookupLocalMember, |
+ checkHasBody: true, expectIsRegular: true); |
+ ensure(compiler, "regular", container.patch.lookupLocalMember, |
+ checkHasBody: true, expectIsRegular: true); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
} |
-testGhostMember() { |
- asyncTest(() => applyPatch( |
+Future testGhostMember() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
} |
@@ -397,47 +417,45 @@ testGhostMember() { |
@patch class Class { |
void ghost() {} |
} |
- """).then((compiler) { |
- var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- container.parseNode(compiler); |
- ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
- expectIsPatch: true); |
- |
- ensure(compiler, "ghost", container.lookupLocalMember, |
- expectIsFound: false); |
- ensure(compiler, "ghost", container.patch.lookupLocalMember, |
- checkHasBody: true, expectIsRegular: true); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- })); |
+ """); |
+ var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ container.parseNode(compiler); |
+ ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
+ expectIsPatch: true); |
+ |
+ ensure(compiler, "ghost", container.lookupLocalMember, |
+ expectIsFound: false); |
+ ensure(compiler, "ghost", container.patch.lookupLocalMember, |
+ checkHasBody: true, expectIsRegular: true); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
} |
-testInjectFunction() { |
- asyncTest(() => applyPatch( |
+Future testInjectFunction() async { |
+ var compiler = await applyPatch( |
"", |
- "int _function() => 5;").then((compiler) { |
- ensure(compiler, |
- "_function", |
- compiler.coreLibrary.find, |
- expectIsFound: false); |
- ensure(compiler, |
- "_function", |
- compiler.coreLibrary.patch.find, |
- checkHasBody: true, expectIsRegular: true); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- Expect.isTrue(compiler.errors.isEmpty, |
- "Unexpected errors: ${compiler.errors}"); |
- })); |
+ "int _function() => 5;"); |
+ ensure(compiler, |
+ "_function", |
+ compiler.coreLibrary.find, |
+ expectIsFound: false); |
+ ensure(compiler, |
+ "_function", |
+ compiler.coreLibrary.patch.find, |
+ checkHasBody: true, expectIsRegular: true); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ Expect.isTrue(compiler.errors.isEmpty, |
+ "Unexpected errors: ${compiler.errors}"); |
} |
-testPatchSignatureCheck() { |
- asyncTest(() => applyPatch( |
+Future testPatchSignatureCheck() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
external String method1(); |
@@ -467,78 +485,76 @@ testPatchSignatureCheck() { |
@patch void method10([int str]) {} |
@patch void method11({int str}) {} |
} |
- """).then((compiler) { |
- var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- container.ensureResolved(compiler); |
- container.parseNode(compiler); |
- |
- void expect(String methodName, List infos, List errors) { |
- compiler.clearMessages(); |
- compiler.resolver.resolveMethodElement( |
- ensure(compiler, methodName, container.lookupLocalMember, |
- expectIsPatched: true, checkHasBody: true)); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(infos.length, compiler.infos.length, |
- "Unexpected infos: ${compiler.infos} on $methodName"); |
- for (int i = 0 ; i < infos.length ; i++) { |
- Expect.equals(infos[i], compiler.infos[i].message.kind); |
- } |
- Expect.equals(errors.length, compiler.errors.length, |
- "Unexpected errors: ${compiler.errors} on $methodName"); |
- for (int i = 0 ; i < errors.length ; i++) { |
- Expect.equals(errors[i], compiler.errors[i].message.kind); |
- } |
+ """); |
+ var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ container.ensureResolved(compiler); |
+ container.parseNode(compiler); |
+ |
+ void expect(String methodName, List infos, List errors) { |
+ compiler.clearMessages(); |
+ compiler.resolver.resolveMethodElement( |
+ ensure(compiler, methodName, container.lookupLocalMember, |
+ expectIsPatched: true, checkHasBody: true)); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(infos.length, compiler.infos.length, |
+ "Unexpected infos: ${compiler.infos} on $methodName"); |
+ for (int i = 0 ; i < infos.length ; i++) { |
+ Expect.equals(infos[i], compiler.infos[i].message.kind); |
+ } |
+ Expect.equals(errors.length, compiler.errors.length, |
+ "Unexpected errors: ${compiler.errors} on $methodName"); |
+ for (int i = 0 ; i < errors.length ; i++) { |
+ Expect.equals(errors[i], compiler.errors[i].message.kind); |
} |
+ } |
- expect("method1", [], [MessageKind.PATCH_RETURN_TYPE_MISMATCH]); |
- expect("method2", [], |
- [MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH]); |
- expect("method3", [MessageKind.PATCH_POINT_TO_PARAMETER], |
- [MessageKind.PATCH_PARAMETER_MISMATCH]); |
- expect("method4", [], |
- [MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH]); |
- expect("method5", [], |
- [MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH]); |
- expect("method6", [], |
- [MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH]); |
- expect("method7", [MessageKind.PATCH_POINT_TO_PARAMETER], |
- [MessageKind.PATCH_PARAMETER_MISMATCH]); |
- expect("method8", [MessageKind.PATCH_POINT_TO_PARAMETER], |
- [MessageKind.PATCH_PARAMETER_MISMATCH]); |
- expect("method9", [MessageKind.PATCH_POINT_TO_PARAMETER], |
- [MessageKind.PATCH_PARAMETER_TYPE_MISMATCH]); |
- expect("method10", [MessageKind.PATCH_POINT_TO_PARAMETER], |
- [MessageKind.PATCH_PARAMETER_TYPE_MISMATCH]); |
- expect("method11", [MessageKind.PATCH_POINT_TO_PARAMETER], |
- [MessageKind.PATCH_PARAMETER_TYPE_MISMATCH]); |
- })); |
+ expect("method1", [], [MessageKind.PATCH_RETURN_TYPE_MISMATCH]); |
+ expect("method2", [], |
+ [MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH]); |
+ expect("method3", [MessageKind.PATCH_POINT_TO_PARAMETER], |
+ [MessageKind.PATCH_PARAMETER_MISMATCH]); |
+ expect("method4", [], |
+ [MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH]); |
+ expect("method5", [], |
+ [MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH]); |
+ expect("method6", [], |
+ [MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH]); |
+ expect("method7", [MessageKind.PATCH_POINT_TO_PARAMETER], |
+ [MessageKind.PATCH_PARAMETER_MISMATCH]); |
+ expect("method8", [MessageKind.PATCH_POINT_TO_PARAMETER], |
+ [MessageKind.PATCH_PARAMETER_MISMATCH]); |
+ expect("method9", [MessageKind.PATCH_POINT_TO_PARAMETER], |
+ [MessageKind.PATCH_PARAMETER_TYPE_MISMATCH]); |
+ expect("method10", [MessageKind.PATCH_POINT_TO_PARAMETER], |
+ [MessageKind.PATCH_PARAMETER_TYPE_MISMATCH]); |
+ expect("method11", [MessageKind.PATCH_POINT_TO_PARAMETER], |
+ [MessageKind.PATCH_PARAMETER_TYPE_MISMATCH]); |
} |
-testExternalWithoutImplementationTopLevel() { |
- asyncTest(() => applyPatch( |
+Future testExternalWithoutImplementationTopLevel() async { |
+ var compiler = await applyPatch( |
""" |
external void foo(); |
""", |
""" |
// @patch void foo() {} |
- """).then((compiler) { |
- var function = ensure(compiler, "foo", compiler.coreLibrary.find); |
- compiler.resolver.resolve(function); |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- print('testExternalWithoutImplementationTopLevel:${compiler.errors}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == |
- MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION); |
- Expect.stringEquals('External method without an implementation.', |
- compiler.errors[0].message.toString()); |
- })); |
+ """); |
+ var function = ensure(compiler, "foo", compiler.coreLibrary.find); |
+ compiler.resolver.resolve(function); |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ print('testExternalWithoutImplementationTopLevel:${compiler.errors}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == |
+ MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION); |
+ Expect.stringEquals('External method without an implementation.', |
+ compiler.errors[0].message.toString()); |
} |
-testExternalWithoutImplementationMember() { |
- asyncTest(() => applyPatch( |
+Future testExternalWithoutImplementationMember() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
external void foo(); |
@@ -548,63 +564,60 @@ testExternalWithoutImplementationMember() { |
@patch class Class { |
// @patch void foo() {} |
} |
- """).then((compiler) { |
- var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- container.parseNode(compiler); |
- |
- compiler.warnings.clear(); |
- compiler.errors.clear(); |
- compiler.resolver.resolveMethodElement( |
- ensure(compiler, "foo", container.lookupLocalMember)); |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- print('testExternalWithoutImplementationMember:${compiler.errors}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == |
- MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION); |
- Expect.stringEquals('External method without an implementation.', |
- compiler.errors[0].message.toString()); |
- })); |
+ """); |
+ var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ container.parseNode(compiler); |
+ |
+ compiler.warnings.clear(); |
+ compiler.errors.clear(); |
+ compiler.resolver.resolveMethodElement( |
+ ensure(compiler, "foo", container.lookupLocalMember)); |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ print('testExternalWithoutImplementationMember:${compiler.errors}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == |
+ MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION); |
+ Expect.stringEquals('External method without an implementation.', |
+ compiler.errors[0].message.toString()); |
} |
-testIsSubclass() { |
- asyncTest(() => applyPatch( |
+Future testIsSubclass() async { |
+ var compiler = await applyPatch( |
""" |
class A {} |
""", |
""" |
@patch class A {} |
- """).then((compiler) { |
- ClassElement cls = ensure(compiler, "A", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- ClassElement patch = cls.patch; |
- Expect.isTrue(cls != patch); |
- Expect.isTrue(cls.isSubclassOf(patch)); |
- Expect.isTrue(patch.isSubclassOf(cls)); |
- })); |
+ """); |
+ ClassElement cls = ensure(compiler, "A", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ ClassElement patch = cls.patch; |
+ Expect.isTrue(cls != patch); |
+ Expect.isTrue(cls.isSubclassOf(patch)); |
+ Expect.isTrue(patch.isSubclassOf(cls)); |
} |
-testPatchNonExistingTopLevel() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonExistingTopLevel() async { |
+ var compiler = await applyPatch( |
""" |
// class Class {} |
""", |
""" |
@patch class Class {} |
- """).then((compiler) { |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- print('testPatchNonExistingTopLevel:${compiler.errors}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NON_EXISTING); |
- })); |
+ """); |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ print('testPatchNonExistingTopLevel:${compiler.errors}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NON_EXISTING); |
} |
-testPatchNonExistingMember() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonExistingMember() async { |
+ var compiler = await applyPatch( |
""" |
class Class {} |
""", |
@@ -612,84 +625,80 @@ testPatchNonExistingMember() { |
@patch class Class { |
@patch void foo() {} |
} |
- """).then((compiler) { |
- var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- container.parseNode(compiler); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- print('testPatchNonExistingMember:${compiler.errors}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NON_EXISTING); |
- })); |
+ """); |
+ var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ container.parseNode(compiler); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ print('testPatchNonExistingMember:${compiler.errors}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NON_EXISTING); |
} |
-testPatchNonPatchablePatch() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonPatchablePatch() async { |
+ var compiler = await applyPatch( |
""" |
external get foo; |
""", |
""" |
@patch var foo; |
- """).then((compiler) { |
- ensure(compiler, "foo", compiler.coreLibrary.find); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- print('testPatchNonPatchablePatch:${compiler.errors}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NONPATCHABLE); |
- })); |
+ """); |
+ ensure(compiler, "foo", compiler.coreLibrary.find); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ print('testPatchNonPatchablePatch:${compiler.errors}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NONPATCHABLE); |
} |
-testPatchNonPatchableOrigin() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonPatchableOrigin() async { |
+ var compiler = await applyPatch( |
""" |
external var foo; |
""", |
""" |
@patch get foo => 0; |
- """).then((compiler) { |
- ensure(compiler, "foo", compiler.coreLibrary.find); |
- |
- Expect.isTrue(compiler.warnings.isEmpty, |
- "Unexpected warnings: ${compiler.warnings}"); |
- print('testPatchNonPatchableOrigin:${compiler.errors}'); |
- Expect.equals(2, compiler.errors.length); |
- Expect.equals( |
- MessageKind.EXTRANEOUS_MODIFIER, compiler.errors[0].message.kind); |
- Expect.equals( |
- // TODO(ahe): Eventually, this error should be removed as it will be |
- // handled by the regular parser. |
- MessageKind.PATCH_NONPATCHABLE, compiler.errors[1].message.kind); |
- })); |
+ """); |
+ ensure(compiler, "foo", compiler.coreLibrary.find); |
+ |
+ Expect.isTrue(compiler.warnings.isEmpty, |
+ "Unexpected warnings: ${compiler.warnings}"); |
+ print('testPatchNonPatchableOrigin:${compiler.errors}'); |
+ Expect.equals(2, compiler.errors.length); |
+ Expect.equals( |
+ MessageKind.EXTRANEOUS_MODIFIER, compiler.errors[0].message.kind); |
+ Expect.equals( |
+ // TODO(ahe): Eventually, this error should be removed as it will be |
+ // handled by the regular parser. |
+ MessageKind.PATCH_NONPATCHABLE, compiler.errors[1].message.kind); |
} |
-testPatchNonExternalTopLevel() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonExternalTopLevel() async { |
+ var compiler = await applyPatch( |
""" |
void foo() {} |
""", |
""" |
@patch void foo() {} |
- """).then((compiler) { |
- print('testPatchNonExternalTopLevel.errors:${compiler.errors}'); |
- print('testPatchNonExternalTopLevel.warnings:${compiler.warnings}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NON_EXTERNAL); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(1, compiler.infos.length); |
- Expect.isTrue(compiler.infos[0].message.kind == |
- MessageKind.PATCH_POINT_TO_FUNCTION); |
- })); |
+ """); |
+ print('testPatchNonExternalTopLevel.errors:${compiler.errors}'); |
+ print('testPatchNonExternalTopLevel.warnings:${compiler.warnings}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NON_EXTERNAL); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(1, compiler.infos.length); |
+ Expect.isTrue(compiler.infos[0].message.kind == |
+ MessageKind.PATCH_POINT_TO_FUNCTION); |
} |
-testPatchNonExternalMember() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonExternalMember() async { |
+ var compiler = await applyPatch( |
""" |
class Class { |
void foo() {} |
@@ -699,146 +708,139 @@ testPatchNonExternalMember() { |
@patch class Class { |
@patch void foo() {} |
} |
- """).then((compiler) { |
- var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- container.parseNode(compiler); |
- |
- print('testPatchNonExternalMember.errors:${compiler.errors}'); |
- print('testPatchNonExternalMember.warnings:${compiler.warnings}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NON_EXTERNAL); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(1, compiler.infos.length); |
- Expect.isTrue(compiler.infos[0].message.kind == |
- MessageKind.PATCH_POINT_TO_FUNCTION); |
- })); |
+ """); |
+ var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ container.parseNode(compiler); |
+ |
+ print('testPatchNonExternalMember.errors:${compiler.errors}'); |
+ print('testPatchNonExternalMember.warnings:${compiler.warnings}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NON_EXTERNAL); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(1, compiler.infos.length); |
+ Expect.isTrue(compiler.infos[0].message.kind == |
+ MessageKind.PATCH_POINT_TO_FUNCTION); |
} |
-testPatchNonClass() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonClass() async { |
+ var compiler = await applyPatch( |
""" |
external void Class() {} |
""", |
""" |
@patch class Class {} |
- """).then((compiler) { |
- print('testPatchNonClass.errors:${compiler.errors}'); |
- print('testPatchNonClass.warnings:${compiler.warnings}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NON_CLASS); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(1, compiler.infos.length); |
- Expect.isTrue( |
- compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_CLASS); |
- })); |
+ """); |
+ print('testPatchNonClass.errors:${compiler.errors}'); |
+ print('testPatchNonClass.warnings:${compiler.warnings}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NON_CLASS); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(1, compiler.infos.length); |
+ Expect.isTrue( |
+ compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_CLASS); |
} |
-testPatchNonGetter() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonGetter() async { |
+ var compiler = await applyPatch( |
""" |
external void foo() {} |
""", |
""" |
@patch get foo => 0; |
- """).then((compiler) { |
- print('testPatchNonClass.errors:${compiler.errors}'); |
- print('testPatchNonClass.warnings:${compiler.warnings}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NON_GETTER); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(1, compiler.infos.length); |
- Expect.isTrue( |
- compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_GETTER); |
- })); |
+ """); |
+ print('testPatchNonClass.errors:${compiler.errors}'); |
+ print('testPatchNonClass.warnings:${compiler.warnings}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NON_GETTER); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(1, compiler.infos.length); |
+ Expect.isTrue( |
+ compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_GETTER); |
} |
-testPatchNoGetter() { |
- asyncTest(() => applyPatch( |
+Future testPatchNoGetter() async { |
+ var compiler = await applyPatch( |
""" |
external set foo(var value) {} |
""", |
""" |
@patch get foo => 0; |
- """).then((compiler) { |
- print('testPatchNonClass.errors:${compiler.errors}'); |
- print('testPatchNonClass.warnings:${compiler.warnings}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NO_GETTER); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(1, compiler.infos.length); |
- Expect.isTrue( |
- compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_GETTER); |
- })); |
+ """); |
+ print('testPatchNonClass.errors:${compiler.errors}'); |
+ print('testPatchNonClass.warnings:${compiler.warnings}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NO_GETTER); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(1, compiler.infos.length); |
+ Expect.isTrue( |
+ compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_GETTER); |
} |
-testPatchNonSetter() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonSetter() async { |
+ var compiler = await applyPatch( |
""" |
external void foo() {} |
""", |
""" |
@patch set foo(var value) {} |
- """).then((compiler) { |
- print('testPatchNonClass.errors:${compiler.errors}'); |
- print('testPatchNonClass.warnings:${compiler.warnings}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NON_SETTER); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(1, compiler.infos.length); |
- Expect.isTrue( |
- compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_SETTER); |
- })); |
+ """); |
+ print('testPatchNonClass.errors:${compiler.errors}'); |
+ print('testPatchNonClass.warnings:${compiler.warnings}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NON_SETTER); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(1, compiler.infos.length); |
+ Expect.isTrue( |
+ compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_SETTER); |
} |
-testPatchNoSetter() { |
- asyncTest(() => applyPatch( |
+Future testPatchNoSetter() async { |
+ var compiler = await applyPatch( |
""" |
external get foo; |
""", |
""" |
@patch set foo(var value) {} |
- """).then((compiler) { |
- print('testPatchNonClass.errors:${compiler.errors}'); |
- print('testPatchNonClass.warnings:${compiler.warnings}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NO_SETTER); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(1, compiler.infos.length); |
- Expect.isTrue( |
- compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_SETTER); |
- })); |
+ """); |
+ print('testPatchNonClass.errors:${compiler.errors}'); |
+ print('testPatchNonClass.warnings:${compiler.warnings}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NO_SETTER); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(1, compiler.infos.length); |
+ Expect.isTrue( |
+ compiler.infos[0].message.kind == MessageKind.PATCH_POINT_TO_SETTER); |
} |
-testPatchNonFunction() { |
- asyncTest(() => applyPatch( |
+Future testPatchNonFunction() async { |
+ var compiler = await applyPatch( |
""" |
external get foo; |
""", |
""" |
@patch void foo() {} |
- """).then((compiler) { |
- print('testPatchNonClass.errors:${compiler.errors}'); |
- print('testPatchNonClass.warnings:${compiler.warnings}'); |
- Expect.equals(1, compiler.errors.length); |
- Expect.isTrue( |
- compiler.errors[0].message.kind == MessageKind.PATCH_NON_FUNCTION); |
- Expect.equals(0, compiler.warnings.length); |
- Expect.equals(1, compiler.infos.length); |
- Expect.isTrue( |
- compiler.infos[0].message.kind == |
- MessageKind.PATCH_POINT_TO_FUNCTION); |
- })); |
+ """); |
+ print('testPatchNonClass.errors:${compiler.errors}'); |
+ print('testPatchNonClass.warnings:${compiler.warnings}'); |
+ Expect.equals(1, compiler.errors.length); |
+ Expect.isTrue( |
+ compiler.errors[0].message.kind == MessageKind.PATCH_NON_FUNCTION); |
+ Expect.equals(0, compiler.warnings.length); |
+ Expect.equals(1, compiler.infos.length); |
+ Expect.isTrue( |
+ compiler.infos[0].message.kind == |
+ MessageKind.PATCH_POINT_TO_FUNCTION); |
} |
-testPatchAndSelector() { |
- asyncTest(() => applyPatch( |
+Future testPatchAndSelector() async { |
+ var compiler = await applyPatch( |
""" |
class A { |
external void clear(); |
@@ -858,76 +860,73 @@ testPatchAndSelector() { |
new B(); |
} |
""", |
- runCompiler: true, analyzeOnly: true).then((Compiler compiler) { |
- World world = compiler.world; |
- |
- ClassElement cls = ensure(compiler, "A", compiler.coreLibrary.find, |
- expectIsPatched: true); |
- cls.ensureResolved(compiler); |
- |
- ensure(compiler, "method", cls.patch.lookupLocalMember, |
- checkHasBody: true, expectIsRegular: true); |
- |
- ensure(compiler, "clear", cls.lookupLocalMember, |
- checkHasBody: true, expectIsPatched: true); |
- |
- compiler.phase = Compiler.PHASE_DONE_RESOLVING; |
- |
- // Check that a method just in the patch class is a target for a |
- // typed selector. |
- Selector selector = |
- new Selector.call(const PublicName('method'), CallStructure.NO_ARGS); |
- TypeMask typeMask = new TypeMask.exact(cls, world); |
- FunctionElement method = cls.implementation.lookupLocalMember('method'); |
- method.computeType(compiler); |
- Expect.isTrue(selector.applies(method, world)); |
- Expect.isTrue(typeMask.canHit(method, selector, world)); |
- |
- // Check that the declaration method in the declaration class is a target |
- // for a typed selector. |
- selector = |
- new Selector.call(const PublicName('clear'), CallStructure.NO_ARGS); |
- typeMask = new TypeMask.exact(cls, world); |
- method = cls.lookupLocalMember('clear'); |
- method.computeType(compiler); |
- Expect.isTrue(selector.applies(method, world)); |
- Expect.isTrue(typeMask.canHit(method, selector, world)); |
- |
- // Check that the declaration method in the declaration class is a target |
- // for a typed selector on a subclass. |
- cls = ensure(compiler, "B", compiler.coreLibrary.find); |
- cls.ensureResolved(compiler); |
- typeMask = new TypeMask.exact(cls, world); |
- Expect.isTrue(selector.applies(method, world)); |
- Expect.isTrue(typeMask.canHit(method, selector, world)); |
- })); |
+ runCompiler: true, analyzeOnly: true); |
+ World world = compiler.world; |
+ |
+ ClassElement cls = ensure(compiler, "A", compiler.coreLibrary.find, |
+ expectIsPatched: true); |
+ cls.ensureResolved(compiler); |
+ |
+ ensure(compiler, "method", cls.patch.lookupLocalMember, |
+ checkHasBody: true, expectIsRegular: true); |
+ |
+ ensure(compiler, "clear", cls.lookupLocalMember, |
+ checkHasBody: true, expectIsPatched: true); |
+ |
+ compiler.phase = Compiler.PHASE_DONE_RESOLVING; |
+ |
+ // Check that a method just in the patch class is a target for a |
+ // typed selector. |
+ Selector selector = |
+ new Selector.call(const PublicName('method'), CallStructure.NO_ARGS); |
+ TypeMask typeMask = new TypeMask.exact(cls, world); |
+ FunctionElement method = cls.implementation.lookupLocalMember('method'); |
+ method.computeType(compiler); |
+ Expect.isTrue(selector.applies(method, world)); |
+ Expect.isTrue(typeMask.canHit(method, selector, world)); |
+ |
+ // Check that the declaration method in the declaration class is a target |
+ // for a typed selector. |
+ selector = |
+ new Selector.call(const PublicName('clear'), CallStructure.NO_ARGS); |
+ typeMask = new TypeMask.exact(cls, world); |
+ method = cls.lookupLocalMember('clear'); |
+ method.computeType(compiler); |
+ Expect.isTrue(selector.applies(method, world)); |
+ Expect.isTrue(typeMask.canHit(method, selector, world)); |
+ |
+ // Check that the declaration method in the declaration class is a target |
+ // for a typed selector on a subclass. |
+ cls = ensure(compiler, "B", compiler.coreLibrary.find); |
+ cls.ensureResolved(compiler); |
+ typeMask = new TypeMask.exact(cls, world); |
+ Expect.isTrue(selector.applies(method, world)); |
+ Expect.isTrue(typeMask.canHit(method, selector, world)); |
} |
-void testAnalyzeAllInjectedMembers() { |
- void expect(String patchText, [expectedWarnings]) { |
+Future testAnalyzeAllInjectedMembers() async { |
+ Future expect(String patchText, [expectedWarnings]) async { |
if (expectedWarnings == null) expectedWarnings = []; |
if (expectedWarnings is! List) { |
expectedWarnings = <MessageKind>[expectedWarnings]; |
} |
- asyncTest(() => applyPatch('', patchText, analyzeAll: true, |
- analyzeOnly: true).then((compiler) { |
+ var compiler = await applyPatch('', patchText, analyzeAll: true, |
+ analyzeOnly: true); |
compiler.librariesToAnalyzeWhenRun = [Uri.parse('dart:core')]; |
- return compiler.runCompiler(null).then((_) { |
- compareWarningKinds(patchText, expectedWarnings, compiler.warnings); |
- }); |
- })); |
+ await compiler.runCompiler(null); |
+ compareWarningKinds(patchText, expectedWarnings, compiler.warnings); |
} |
- expect('String s = 0;', MessageKind.NOT_ASSIGNABLE); |
- expect('void method() { String s = 0; }', MessageKind.NOT_ASSIGNABLE); |
- expect(''' |
+ await expect('String s = 0;', MessageKind.NOT_ASSIGNABLE); |
+ await expect('void method() { String s = 0; }', MessageKind.NOT_ASSIGNABLE); |
+ await expect(''' |
class Class { |
String s = 0; |
} |
''', |
MessageKind.NOT_ASSIGNABLE); |
- expect(''' |
+ await expect(''' |
class Class { |
void method() { |
String s = 0; |
@@ -937,7 +936,7 @@ void testAnalyzeAllInjectedMembers() { |
MessageKind.NOT_ASSIGNABLE); |
} |
-void testEffectiveTarget() { |
+Future testEffectiveTarget() async { |
String origin = """ |
class A { |
A() : super(); |
@@ -958,76 +957,76 @@ void testEffectiveTarget() { |
} |
"""; |
- asyncTest(() => applyPatch(origin, patch, analyzeAll: true, |
- analyzeOnly: true, runCompiler: true).then((compiler) { |
- ClassElement clsA = compiler.coreLibrary.find("A"); |
- ClassElement clsB = compiler.coreLibrary.find("B"); |
- |
- ConstructorElement forward = clsA.lookupConstructor("forward"); |
- ConstructorElement target = forward.effectiveTarget; |
- Expect.isTrue(target.isPatch); |
- Expect.equals("patchTarget", target.name); |
- |
- ConstructorElement forwardTwo = clsA.lookupConstructor("forwardTwo"); |
- target = forwardTwo.effectiveTarget; |
- Expect.isFalse(forwardTwo.isErroneous); |
- Expect.isFalse(target.isPatch); |
- Expect.equals("originTarget", target.name); |
- })); |
+ var compiler = await applyPatch(origin, patch, analyzeAll: true, |
+ analyzeOnly: true, runCompiler: true); |
+ ClassElement clsA = compiler.coreLibrary.find("A"); |
+ ClassElement clsB = compiler.coreLibrary.find("B"); |
+ |
+ ConstructorElement forward = clsA.lookupConstructor("forward"); |
+ ConstructorElement target = forward.effectiveTarget; |
+ Expect.isTrue(target.isPatch); |
+ Expect.equals("patchTarget", target.name); |
+ |
+ ConstructorElement forwardTwo = clsA.lookupConstructor("forwardTwo"); |
+ target = forwardTwo.effectiveTarget; |
+ Expect.isFalse(forwardTwo.isErroneous); |
+ Expect.isFalse(target.isPatch); |
+ Expect.equals("originTarget", target.name); |
} |
-void testTypecheckPatchedMembers() { |
+Future testTypecheckPatchedMembers() async { |
String originText = "external void method();"; |
String patchText = """ |
@patch void method() { |
String s = 0; |
} |
"""; |
- asyncTest(() => applyPatch(originText, patchText, |
- analyzeAll: true, analyzeOnly: true).then((compiler) { |
- compiler.librariesToAnalyzeWhenRun = [Uri.parse('dart:core')]; |
- return compiler.runCompiler(null).then((_) { |
- compareWarningKinds(patchText, |
- [MessageKind.NOT_ASSIGNABLE], compiler.warnings); |
- }); |
- })); |
+ var compiler = await applyPatch(originText, patchText, |
+ analyzeAll: true, analyzeOnly: true); |
+ compiler.librariesToAnalyzeWhenRun = [Uri.parse('dart:core')]; |
+ await compiler.runCompiler(null); |
+ compareWarningKinds(patchText, |
+ [MessageKind.NOT_ASSIGNABLE], compiler.warnings); |
} |
main() { |
- testPatchConstructor(); |
- testPatchRedirectingConstructor(); |
- testPatchFunction(); |
- testPatchMember(); |
- testPatchGetter(); |
- testRegularMember(); |
- testGhostMember(); |
- testInjectFunction(); |
- testPatchSignatureCheck(); |
- |
- testPatchVersioned(); |
- |
- testExternalWithoutImplementationTopLevel(); |
- testExternalWithoutImplementationMember(); |
- |
- testIsSubclass(); |
- |
- testPatchNonExistingTopLevel(); |
- testPatchNonExistingMember(); |
- testPatchNonPatchablePatch(); |
- testPatchNonPatchableOrigin(); |
- testPatchNonExternalTopLevel(); |
- testPatchNonExternalMember(); |
- testPatchNonClass(); |
- testPatchNonGetter(); |
- testPatchNoGetter(); |
- testPatchNonSetter(); |
- testPatchNoSetter(); |
- testPatchNonFunction(); |
- |
- testPatchAndSelector(); |
- |
- testEffectiveTarget(); /// bug: ok |
- |
- testAnalyzeAllInjectedMembers(); |
- testTypecheckPatchedMembers(); |
+ asyncTest(() async { |
+ await testPatchConstructor(); |
+ await testPatchRedirectingConstructor(); |
+ await testPatchFunction(); |
+ await testPatchFunctionMetadata(); |
+ await testPatchMember(); |
+ await testPatchGetter(); |
+ await testRegularMember(); |
+ await testGhostMember(); |
+ await testInjectFunction(); |
+ await testPatchSignatureCheck(); |
+ |
+ await testPatchVersioned(); |
+ |
+ await testExternalWithoutImplementationTopLevel(); |
+ await testExternalWithoutImplementationMember(); |
+ |
+ await testIsSubclass(); |
+ |
+ await testPatchNonExistingTopLevel(); |
+ await testPatchNonExistingMember(); |
+ await testPatchNonPatchablePatch(); |
+ await testPatchNonPatchableOrigin(); |
+ await testPatchNonExternalTopLevel(); |
+ await testPatchNonExternalMember(); |
+ await testPatchNonClass(); |
+ await testPatchNonGetter(); |
+ await testPatchNoGetter(); |
+ await testPatchNonSetter(); |
+ await testPatchNoSetter(); |
+ await testPatchNonFunction(); |
+ |
+ await testPatchAndSelector(); |
+ |
+ await testEffectiveTarget(); /// bug: ok |
+ |
+ await testAnalyzeAllInjectedMembers(); |
+ await testTypecheckPatchedMembers(); |
+ }); |
} |