Skip to content

Commit 51776f2

Browse files
authored
Add testing for constructor tearoffs constant rendering. (#2780)
* constructor tearoffs testing * another construct that analyzer doesn't like
1 parent a535f04 commit 51776f2

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

test/end2end/model_special_cases_test.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,49 @@ void main() {
228228
expect(referenceLookup(A, 'new'), equals(MatchingLinkResult(null)));
229229
expect(referenceLookup(At, 'new'), equals(MatchingLinkResult(null)));
230230
});
231+
232+
test('constant rendering', () {
233+
TopLevelVariable aFunc,
234+
aFuncParams,
235+
aTearOffDefaultConstructor,
236+
aTearOffNonDefaultConstructor,
237+
aTearOffNonDefaultConstructorInt,
238+
aTearOffDefaultConstructorArgs;
239+
TopLevelVariable aTearOffDefaultConstructorTypedef;
240+
aFunc =
241+
constructorTearoffs.constants.firstWhere((c) => c.name == 'aFunc');
242+
aFuncParams = constructorTearoffs.constants
243+
.firstWhere((c) => c.name == 'aFuncParams');
244+
aTearOffDefaultConstructor = constructorTearoffs.constants
245+
.firstWhere((c) => c.name == 'aTearOffDefaultConstructor');
246+
aTearOffNonDefaultConstructor = constructorTearoffs.constants
247+
.firstWhere((c) => c.name == 'aTearOffNonDefaultConstructor');
248+
aTearOffNonDefaultConstructorInt = constructorTearoffs.constants
249+
.firstWhere((c) => c.name == 'aTearOffNonDefaultConstructorInt');
250+
aTearOffDefaultConstructorArgs = constructorTearoffs.constants
251+
.firstWhere((c) => c.name == 'aTearOffDefaultConstructorArgs');
252+
aTearOffDefaultConstructorTypedef = constructorTearoffs.constants
253+
.firstWhere((c) => c.name == 'aTearOffDefaultConstructorTypedef');
254+
255+
expect(aFunc.constantValue, equals('func'));
256+
expect(aFuncParams.constantValue, equals('funcTypeParams'));
257+
// Does not work @ analyzer 2.2
258+
//expect(aFuncWithArgs.constantValue, equals('funcTypeParams<String, int>'));
259+
260+
expect(aTearOffDefaultConstructor.constantValue, equals('F.new'));
261+
expect(aTearOffNonDefaultConstructor.constantValue,
262+
equals('F.alternative'));
263+
expect(aTearOffNonDefaultConstructorInt.constantValue,
264+
equals('F<int>.alternative'));
265+
expect(aTearOffDefaultConstructorArgs.constantValue,
266+
equals('F<String>.new'));
267+
268+
expect(aTearOffDefaultConstructorTypedef.constantValue,
269+
equals('Fstring.new'));
270+
// Does not work @ analyzer 2.2
271+
//expect(aTearOffDefaultConstructorArgsTypedef.constantValue,
272+
// equals('Ft<String>.new'));
273+
});
231274
}, skip: !_constructorTearoffsAllowed.allows(utils.platformVersion));
232275
});
233276

testing/test_package_experiments/lib/constructor_tearoffs.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class F<T> {
4646
F() {
4747
print('I too am a valid constructor invocation with this feature.');
4848
}
49+
50+
F.alternative() {}
4951
}
5052

5153
typedef Ft = F;
@@ -59,3 +61,21 @@ typedef NotAClass = Function;
5961
/// Mixins don't have constructors either, so disallow `M.new`.
6062
mixin M<T> on C {
6163
}
64+
65+
void func() {}
66+
void funcTypeParams<T extends String, U extends num>(T something, U different) {}
67+
68+
const aFunc = func;
69+
const aFuncParams = funcTypeParams;
70+
// TODO(jcollins-g): does not work @ analyzer 2.2
71+
//const aFuncWithArgs = funcTypeParams<String, int>;
72+
73+
const aTearOffDefaultConstructor = F.new;
74+
const aTearOffNonDefaultConstructor = F.alternative;
75+
const aTearOffNonDefaultConstructorInt = F<int>.alternative;
76+
const aTearOffDefaultConstructorArgs = F<String>.new;
77+
78+
const aTearOffDefaultConstructorTypedef = Fstring.new;
79+
80+
// TODO(jcollins-g): does not work @ analyzer 2.2
81+
//const aTearOffDefaultConstructorArgsTypedef = Ft<String>.new;

0 commit comments

Comments
 (0)