Skip to content

Commit 0aa15fd

Browse files
Add test cases for conditional forwarding
1 parent 943032f commit 0aa15fd

File tree

1 file changed

+73
-19
lines changed

1 file changed

+73
-19
lines changed

tools/analyzer_plugin/test/unit/util/prop_forwarding_test.dart

Lines changed: 73 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,18 @@ void main() {
128128
});
129129
});
130130
}
131+
132+
test('unless props are conditionally added', () async {
133+
final result = await sharedResolveSource(/*language=dart*/ r'''
134+
UiFactory<HasABCProps> HasABC = uiFunction((props) {
135+
return (NotCare()
136+
..addProps(props, condition)
137+
)();
138+
}, _$HasABCConfig);
139+
''');
140+
final usage = getAllComponentUsages(result.unit).single;
141+
expect(computeForwardedProps(usage), isNull);
142+
});
131143
});
132144

133145
group('UiProps.addUnconsumedProps:', () {
@@ -298,6 +310,18 @@ void main() {
298310
});
299311
});
300312
}
313+
314+
test('unless props are conditionally added', () async {
315+
final result = await sharedResolveSource(/*language=dart*/ r'''
316+
UiFactory<HasABCProps> HasABC = uiFunction((props) {
317+
return (NotCare()
318+
..addProps(props.getPropsToForward(exclude: {AProps, BProps}), condition)
319+
)();
320+
}, _$HasABCConfig);
321+
''');
322+
final usage = getAllComponentUsages(result.unit).single;
323+
expect(computeForwardedProps(usage), isNull);
324+
});
301325
});
302326

303327
group('PropsToForward.addPropsToForward:', () {
@@ -371,6 +395,18 @@ void main() {
371395
expect(forwardedProps.definitelyForwardsPropsFrom(propsElement), isFalse);
372396
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('UnrelatedProps')), isFalse);
373397
});
398+
399+
test('unless props are conditionally added', () async {
400+
final result = await sharedResolveSource(/*language=dart*/ r'''
401+
UiFactory<HasABCProps> HasABC = uiFunction((props) {
402+
return (NotCare()
403+
..modifyProps(props.addPropsToForward(exclude: {AProps, BProps}), condition)
404+
)();
405+
}, _$HasABCConfig);
406+
''');
407+
final usage = getAllComponentUsages(result.unit).single;
408+
expect(computeForwardedProps(usage), isNull);
409+
});
374410
});
375411

376412
group('class component methods:', () {
@@ -633,27 +669,45 @@ void main() {
633669
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('UnrelatedProps')), isFalse);
634670
});
635671

636-
test('..modifyProps(addUnconsumedProps)', () async {
637-
final result = await sharedResolveSource(/*language=dart*/ r'''
638-
UiFactory<HasABCProps> HasABC = castUiFactory(_$HasABC);
639-
class HasABCComponent extends UiComponent2<HasABCProps> {
640-
@override get consumedProps => propsMeta.forMixins({AProps, BProps});
641-
@override render() {
642-
return (NotCare()
643-
..modifyProps(addUnconsumedProps)
644-
)();
672+
group('..modifyProps(addUnconsumedProps)', () {
673+
test('', () async {
674+
final result = await sharedResolveSource(/*language=dart*/ r'''
675+
UiFactory<HasABCProps> HasABC = castUiFactory(_$HasABC);
676+
class HasABCComponent extends UiComponent2<HasABCProps> {
677+
@override get consumedProps => propsMeta.forMixins({AProps, BProps});
678+
@override render() {
679+
return (NotCare()
680+
..modifyProps(addUnconsumedProps)
681+
)();
682+
}
645683
}
646-
}
647-
''');
648-
final usage = getAllComponentUsages(result.unit).single;
684+
''');
685+
final usage = getAllComponentUsages(result.unit).single;
649686

650-
final forwardedProps = computeForwardedProps(usage)!;
651-
expect(forwardedProps.forwardingConfig, isNotNull, reason: 'forwarding config should be resolved');
652-
expect(forwardedProps.propsClassBeingForwarded, result.lookUpInterface('HasABCProps'));
653-
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('AProps')), isFalse);
654-
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('BProps')), isFalse);
655-
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('CProps')), isTrue);
656-
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('UnrelatedProps')), isFalse);
687+
final forwardedProps = computeForwardedProps(usage)!;
688+
expect(forwardedProps.forwardingConfig, isNotNull, reason: 'forwarding config should be resolved');
689+
expect(forwardedProps.propsClassBeingForwarded, result.lookUpInterface('HasABCProps'));
690+
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('AProps')), isFalse);
691+
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('BProps')), isFalse);
692+
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('CProps')), isTrue);
693+
expect(forwardedProps.definitelyForwardsPropsFrom(result.lookUpInterface('UnrelatedProps')), isFalse);
694+
});
695+
696+
test('unless props are conditionally added', () async {
697+
final result = await sharedResolveSource(/*language=dart*/ r'''
698+
UiFactory<HasABCProps> HasABC = castUiFactory(_$HasABC);
699+
class HasABCComponent extends UiComponent2<HasABCProps> {
700+
@override get consumedProps => propsMeta.forMixins({AProps, BProps});
701+
@override render() {
702+
return (NotCare()
703+
..modifyProps(addUnconsumedProps, condition)
704+
)();
705+
}
706+
}
707+
''');
708+
final usage = getAllComponentUsages(result.unit).single;
709+
expect(computeForwardedProps(usage), isNull);
710+
});
657711
});
658712

659713
group('when there is no consumedProps override', () {

0 commit comments

Comments
 (0)