diff --git a/pkg/analyzer/lib/src/test_utilities/find_element.dart b/pkg/analyzer/lib/src/test_utilities/find_element.dart index e4066ca1b5f..d9412fb2b44 100644 --- a/pkg/analyzer/lib/src/test_utilities/find_element.dart +++ b/pkg/analyzer/lib/src/test_utilities/find_element.dart @@ -481,6 +481,15 @@ class ImportFindElement { throw StateError('Not found: $name'); } + ExtensionElement extension_(String name) { + for (var element in definingUnit.extensions) { + if (element.name == name) { + return element; + } + } + throw StateError('Not found: $name'); + } + GenericTypeAliasElement functionTypeAlias(String name) { for (var element in definingUnit.functionTypeAliases) { if (element.name == name) { diff --git a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart index 020a6db8e5a..5cb951f627c 100644 --- a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart @@ -7,6 +7,7 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/src/generated/engine.dart'; +import 'package:meta/meta.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -34,11 +35,8 @@ class ExtensionOverrideTest extends DriverResolutionTest { expect(resolvedElement, extension.getMethod('m')); } - void assertOverride(String extensionName, List typeArguments) { - expect(extensionOverride.extensionName.toSource(), extensionName); - if (extension != null) { - expect(extensionOverride.extensionName.staticElement, extension); - } + void assertOverride({List typeArguments}) { + expect(extensionOverride.extensionName.staticElement, extension); if (typeArguments == null) { expect(extensionOverride.typeArguments, isNull); } else { @@ -50,17 +48,36 @@ class ExtensionOverrideTest extends DriverResolutionTest { expect(extensionOverride.argumentList.arguments, hasLength(1)); } - void find(String declarationSearch, String overrideSearch) { - try { + void findDeclarationAndOverride( + {@required String declarationName, + @required String overrideSearch, + String declarationUri}) { + if (declarationUri == null) { ExtensionDeclaration declaration = - findNode.extensionDeclaration(declarationSearch); + findNode.extensionDeclaration('extension $declarationName'); extension = declaration?.declaredElement as ExtensionElement; - } catch (_) { - // The extension could not be found. + } else { + extension = + findElement.importFind(declarationUri).extension_(declarationName); } extensionOverride = findNode.extensionOverride(overrideSearch); } + @failingTest + test_multipleArguments() async { + fail('Implement this'); + } + + @failingTest + test_noArguments() async { + fail('Implement this'); + } + + @failingTest + test_noMatchingMember() async { + fail('Implement this'); + } + test_noPrefix_noTypeArguments() async { await assertNoErrorsInCode(''' class A {} @@ -71,8 +88,8 @@ void f(A a) { E(a).m(); } '''); - find('E ', 'E(a)'); - assertOverride('E', null); + findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)'); + assertOverride(); assertInvocation(); } @@ -86,8 +103,8 @@ void f(A a) { E(a).m(); } '''); - find('E', 'E'); - assertOverride('E', [intType]); + findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E'); + assertOverride(typeArguments: [intType]); assertInvocation(); } @@ -104,8 +121,12 @@ void f(p.A a) { p.E(a).m(); } '''); - find('E ', 'E(a)'); - assertOverride('p.E', null); + findDeclarationAndOverride( + declarationName: 'E', + declarationUri: 'package:test/lib.dart', + overrideSearch: 'E(a)'); + assertOverride(); + assertInvocation(); } test_prefix_typeArguments() async { @@ -121,7 +142,11 @@ void f(p.A a) { p.E(a).m(); } '''); - find('E', 'E'); - assertOverride('p.E', [intType]); + findDeclarationAndOverride( + declarationName: 'E', + declarationUri: 'package:test/lib.dart', + overrideSearch: 'E'); + assertOverride(typeArguments: [intType]); + assertInvocation(); } }