Skip to content

Commit ed1b4ff

Browse files
bwilkersoncommit-bot@chromium.org
authored andcommitted
Add tests of extensions of mixins
Also refactor the minimally tests. The new tests are in the new class. Change-Id: I59ba4fd94ce868d001098deee257d9dd5caf440c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114747 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent ef36f1b commit ed1b4ff

File tree

1 file changed

+132
-104
lines changed

1 file changed

+132
-104
lines changed

pkg/analyzer/test/src/dart/resolution/extension_method_test.dart

Lines changed: 132 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import 'driver_resolution.dart';
1515
main() {
1616
defineReflectiveSuite(() {
1717
defineReflectiveTests(ExtensionMethodsDeclarationTest);
18+
defineReflectiveTests(ExtensionMethodsExtendedTypeTest);
1819
defineReflectiveTests(ExtensionMethodsExternalReferenceTest);
1920
defineReflectiveTests(ExtensionMethodsInternalReferenceTest);
2021
});
@@ -77,110 +78,6 @@ extension E2 on C {}
7778
''');
7879
}
7980

80-
test_named_generic() async {
81-
await assertNoErrorsInCode('''
82-
class C<T> {}
83-
extension E<S> on C<S> {}
84-
''');
85-
var extendedType = findNode.typeAnnotation('C<S>');
86-
assertElement(extendedType, findElement.class_('C'));
87-
assertType(extendedType, 'C<S>');
88-
}
89-
90-
test_named_onDynamic() async {
91-
await assertNoErrorsInCode('''
92-
extension E on dynamic {}
93-
''');
94-
var extendedType = findNode.typeAnnotation('dynamic');
95-
assertType(extendedType, 'dynamic');
96-
}
97-
98-
test_named_onEnum() async {
99-
await assertNoErrorsInCode('''
100-
enum A {a, b, c}
101-
extension E on A {}
102-
''');
103-
var extendedType = findNode.typeAnnotation('A {}');
104-
assertElement(extendedType, findElement.enum_('A'));
105-
assertType(extendedType, 'A');
106-
}
107-
108-
test_named_onFunctionType() async {
109-
try {
110-
await assertNoErrorsInCode('''
111-
extension E on int Function(int) {}
112-
''');
113-
var extendedType = findNode.typeAnnotation('Function');
114-
assertType(extendedType, 'int Function(int)');
115-
if (!AnalysisDriver.useSummary2) {
116-
throw 'Test passed - expected to fail.';
117-
}
118-
} on String {
119-
rethrow;
120-
} catch (e) {
121-
if (AnalysisDriver.useSummary2) {
122-
rethrow;
123-
}
124-
}
125-
}
126-
127-
test_named_onInterface() async {
128-
await assertNoErrorsInCode('''
129-
class C { }
130-
extension E on C {}
131-
''');
132-
var extendedType = findNode.typeAnnotation('C {}');
133-
assertElement(extendedType, findElement.class_('C'));
134-
assertType(extendedType, 'C');
135-
}
136-
137-
test_unnamed_generic() async {
138-
await assertNoErrorsInCode('''
139-
class C<T> {}
140-
extension<S> on C<S> {}
141-
''');
142-
var extendedType = findNode.typeAnnotation('C<S>');
143-
assertElement(extendedType, findElement.class_('C'));
144-
assertType(extendedType, 'C<S>');
145-
}
146-
147-
test_unnamed_onDynamic() async {
148-
await assertNoErrorsInCode('''
149-
extension on dynamic {}
150-
''');
151-
var extendedType = findNode.typeAnnotation('dynamic');
152-
assertType(extendedType, 'dynamic');
153-
}
154-
155-
test_unnamed_onEnum() async {
156-
await assertNoErrorsInCode('''
157-
enum A {a, b, c}
158-
extension on A {}
159-
''');
160-
var extendedType = findNode.typeAnnotation('A {}');
161-
assertElement(extendedType, findElement.enum_('A'));
162-
assertType(extendedType, 'A');
163-
}
164-
165-
@failingTest
166-
test_unnamed_onFunctionType() async {
167-
await assertNoErrorsInCode('''
168-
extension on int Function(int) {}
169-
''');
170-
var extendedType = findNode.typeAnnotation('int ');
171-
assertType(extendedType, 'int Function(int)');
172-
}
173-
174-
test_unnamed_onInterface() async {
175-
await assertNoErrorsInCode('''
176-
class C { }
177-
extension on C {}
178-
''');
179-
var extendedType = findNode.typeAnnotation('C {}');
180-
assertElement(extendedType, findElement.class_('C'));
181-
assertType(extendedType, 'C');
182-
}
183-
18481
test_visibility_hidden() async {
18582
newFile('/test/lib/lib.dart', content: '''
18683
class C {}
@@ -357,6 +254,137 @@ f(p.C c) {
357254
}
358255
}
359256

257+
/// Tests that show that extension declarations support all of the possible
258+
/// types in the `on` clause.
259+
@reflectiveTest
260+
class ExtensionMethodsExtendedTypeTest extends BaseExtensionMethodsTest {
261+
test_named_generic() async {
262+
await assertNoErrorsInCode('''
263+
class C<T> {}
264+
extension E<S> on C<S> {}
265+
''');
266+
var extendedType = findNode.typeAnnotation('C<S>');
267+
assertElement(extendedType, findElement.class_('C'));
268+
assertType(extendedType, 'C<S>');
269+
}
270+
271+
test_named_onDynamic() async {
272+
await assertNoErrorsInCode('''
273+
extension E on dynamic {}
274+
''');
275+
var extendedType = findNode.typeAnnotation('dynamic');
276+
assertType(extendedType, 'dynamic');
277+
}
278+
279+
test_named_onEnum() async {
280+
await assertNoErrorsInCode('''
281+
enum A {a, b, c}
282+
extension E on A {}
283+
''');
284+
var extendedType = findNode.typeAnnotation('A {}');
285+
assertElement(extendedType, findElement.enum_('A'));
286+
assertType(extendedType, 'A');
287+
}
288+
289+
test_named_onFunctionType() async {
290+
try {
291+
await assertNoErrorsInCode('''
292+
extension E on int Function(int) {}
293+
''');
294+
var extendedType = findNode.typeAnnotation('Function');
295+
assertType(extendedType, 'int Function(int)');
296+
if (!AnalysisDriver.useSummary2) {
297+
throw 'Test passed - expected to fail.';
298+
}
299+
} on String {
300+
rethrow;
301+
} catch (e) {
302+
if (AnalysisDriver.useSummary2) {
303+
rethrow;
304+
}
305+
}
306+
}
307+
308+
test_named_onInterface() async {
309+
await assertNoErrorsInCode('''
310+
class C { }
311+
extension E on C {}
312+
''');
313+
var extendedType = findNode.typeAnnotation('C {}');
314+
assertElement(extendedType, findElement.class_('C'));
315+
assertType(extendedType, 'C');
316+
}
317+
318+
test_named_onMixin() async {
319+
await assertNoErrorsInCode('''
320+
mixin M {
321+
}
322+
extension E on M {}
323+
''');
324+
var extendedType = findNode.typeAnnotation('M {}');
325+
assertElement(extendedType, findElement.mixin('M'));
326+
assertType(extendedType, 'M');
327+
}
328+
329+
test_unnamed_generic() async {
330+
await assertNoErrorsInCode('''
331+
class C<T> {}
332+
extension<S> on C<S> {}
333+
''');
334+
var extendedType = findNode.typeAnnotation('C<S>');
335+
assertElement(extendedType, findElement.class_('C'));
336+
assertType(extendedType, 'C<S>');
337+
}
338+
339+
test_unnamed_onDynamic() async {
340+
await assertNoErrorsInCode('''
341+
extension on dynamic {}
342+
''');
343+
var extendedType = findNode.typeAnnotation('dynamic');
344+
assertType(extendedType, 'dynamic');
345+
}
346+
347+
test_unnamed_onEnum() async {
348+
await assertNoErrorsInCode('''
349+
enum A {a, b, c}
350+
extension on A {}
351+
''');
352+
var extendedType = findNode.typeAnnotation('A {}');
353+
assertElement(extendedType, findElement.enum_('A'));
354+
assertType(extendedType, 'A');
355+
}
356+
357+
@failingTest
358+
test_unnamed_onFunctionType() async {
359+
await assertNoErrorsInCode('''
360+
extension on int Function(int) {}
361+
''');
362+
var extendedType = findNode.typeAnnotation('int ');
363+
assertType(extendedType, 'int Function(int)');
364+
}
365+
366+
test_unnamed_onInterface() async {
367+
await assertNoErrorsInCode('''
368+
class C { }
369+
extension on C {}
370+
''');
371+
var extendedType = findNode.typeAnnotation('C {}');
372+
assertElement(extendedType, findElement.class_('C'));
373+
assertType(extendedType, 'C');
374+
}
375+
376+
test_unnamed_onMixin() async {
377+
await assertNoErrorsInCode('''
378+
mixin M {
379+
}
380+
extension on M {}
381+
''');
382+
var extendedType = findNode.typeAnnotation('M {}');
383+
assertElement(extendedType, findElement.mixin('M'));
384+
assertType(extendedType, 'M');
385+
}
386+
}
387+
360388
/// Tests that extension members can be correctly resolved when referenced
361389
/// by code external to the extension declaration.
362390
@reflectiveTest

0 commit comments

Comments
 (0)