Skip to content

Commit d0f07cb

Browse files
fix(tests): verify reset() recursion avoidance
1 parent fc232d6 commit d0f07cb

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

test/src/form_builder_field_test.dart

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -503,20 +503,22 @@ void main() {
503503
});
504504
group('reset -', () {
505505
testWidgets(
506-
'Should avoid reset recursion when value returns to initial in onChanged',
506+
'Should avoid reset recursion when reset is called after dirty state',
507507
(tester) async {
508508
const textFieldName = 'text';
509509
final textFieldKey = GlobalKey<FormBuilderFieldState>();
510510
var onChangedCalls = 0;
511+
var onChangedCallsBeforeReset = 0;
512+
bool? isDirtyInResetOnChanged;
511513
final testWidget = FormBuilderTextField(
512514
name: textFieldName,
513515
key: textFieldKey,
514516
initialValue: 'hi',
515517
onChanged: (value) {
516518
onChangedCalls++;
517519
final state = textFieldKey.currentState;
518-
if (value == state?.initialValue && state?.isDirty == true) {
519-
state?.reset();
520+
if (value == state?.initialValue) {
521+
isDirtyInResetOnChanged = state?.isDirty;
520522
}
521523
},
522524
);
@@ -525,12 +527,18 @@ void main() {
525527
final widgetFinder = find.byWidget(testWidget);
526528
await tester.enterText(widgetFinder, 'test');
527529
await tester.pumpAndSettle();
528-
await tester.enterText(widgetFinder, 'hi');
530+
531+
expect(textFieldKey.currentState?.isDirty, true);
532+
onChangedCallsBeforeReset = onChangedCalls;
533+
534+
textFieldKey.currentState?.reset();
529535
await tester.pumpAndSettle();
530536

531537
expect(tester.takeException(), isNull);
538+
expect(textFieldKey.currentState?.value, equals('hi'));
532539
expect(textFieldKey.currentState?.isDirty, false);
533-
expect(onChangedCalls, equals(2));
540+
expect(onChangedCalls, equals(onChangedCallsBeforeReset + 1));
541+
expect(isDirtyInResetOnChanged, isFalse);
534542
},
535543
);
536544
testWidgets('Should reset to null when call reset', (tester) async {

0 commit comments

Comments
 (0)