Skip to content

Commit

Permalink
Clean up the tests for extension overrides
Browse files Browse the repository at this point in the history
Change-Id: I1e74b51220b08a48788a387b8c1c60ec60cc28fb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109122
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
  • Loading branch information
bwilkerson committed Jul 16, 2019
1 parent 6d95cb7 commit 2dbd6dc
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 18 deletions.
9 changes: 9 additions & 0 deletions pkg/analyzer/lib/src/test_utilities/find_element.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
61 changes: 43 additions & 18 deletions pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -34,11 +35,8 @@ class ExtensionOverrideTest extends DriverResolutionTest {
expect(resolvedElement, extension.getMethod('m'));
}

void assertOverride(String extensionName, List<DartType> typeArguments) {
expect(extensionOverride.extensionName.toSource(), extensionName);
if (extension != null) {
expect(extensionOverride.extensionName.staticElement, extension);
}
void assertOverride({List<DartType> typeArguments}) {
expect(extensionOverride.extensionName.staticElement, extension);
if (typeArguments == null) {
expect(extensionOverride.typeArguments, isNull);
} else {
Expand All @@ -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 {}
Expand All @@ -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();
}

Expand All @@ -86,8 +103,8 @@ void f(A a) {
E<int>(a).m();
}
''');
find('E<T>', 'E<int>');
assertOverride('E', [intType]);
findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
assertOverride(typeArguments: [intType]);
assertInvocation();
}

Expand All @@ -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 {
Expand All @@ -121,7 +142,11 @@ void f(p.A a) {
p.E<int>(a).m();
}
''');
find('E<T>', 'E<int>');
assertOverride('p.E', [intType]);
findDeclarationAndOverride(
declarationName: 'E',
declarationUri: 'package:test/lib.dart',
overrideSearch: 'E<int>');
assertOverride(typeArguments: [intType]);
assertInvocation();
}
}

0 comments on commit 2dbd6dc

Please sign in to comment.