Skip to content

Commit 4f3a54a

Browse files
committed
Add tests
1 parent ce8dbaa commit 4f3a54a

File tree

2 files changed

+225
-0
lines changed

2 files changed

+225
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ Available built-in validators include:
8181
- `FormBuilderValidators.hasUppercaseChars()` - requires the field's to contain a specified number of uppercase characters.
8282
- `FormBuilderValidators.hasLowercaseChars()` - requires the field's to contain a specified number of lowercase characters.
8383
- `FormBuilderValidators.hasNumericChars()` - requires the field's to contain a specified number of numeric characters.
84+
- `FormBuilderValidators.conditional()` - requires the field's to validate with another validator conditionally.
85+
8486
### Supported languages
8587

8688
Validators support default `errorText` messages in these languages:

test/form_builder_validators_test.dart

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:io';
2+
13
import 'package:flutter/material.dart';
24
import 'package:flutter_localizations/flutter_localizations.dart';
35
import 'package:flutter_test/flutter_test.dart';
@@ -490,4 +492,225 @@ void main() {
490492
expect(validator('ABC'), isNotNull);
491493
}),
492494
);
495+
496+
testWidgets(
497+
'FormBuilderValidators.creditCard',
498+
(WidgetTester tester) => testValidations(tester, (context) {
499+
final validator = FormBuilderValidators.creditCard();
500+
// Pass
501+
expect(validator('4111111111111111'), isNull);
502+
// Fail
503+
expect(validator('1234567812345678'), isNotNull);
504+
}),
505+
);
506+
507+
testWidgets(
508+
'FormBuilderValidators.creditCardExpirationDate',
509+
(WidgetTester tester) => testValidations(tester, (context) {
510+
final validator = FormBuilderValidators.creditCardExpirationDate();
511+
// Pass
512+
expect(validator('12/23'), isNull);
513+
// Fail
514+
expect(validator('13/23'), isNotNull);
515+
}),
516+
);
517+
518+
testWidgets(
519+
'FormBuilderValidators.creditCardExpirationDateNotExpired',
520+
(WidgetTester tester) => testValidations(tester, (context) {
521+
final validator =
522+
FormBuilderValidators.creditCardExpirationDateNotExpired();
523+
// Pass
524+
expect(validator('12/30'), isNull);
525+
// Fail
526+
expect(validator('12/20'), isNotNull);
527+
}),
528+
);
529+
530+
testWidgets(
531+
'FormBuilderValidators.creditCardCVC',
532+
(WidgetTester tester) => testValidations(tester, (context) {
533+
final validator = FormBuilderValidators.creditCardCVC();
534+
// Pass
535+
expect(validator('123'), isNull);
536+
expect(validator('1234'), isNull);
537+
// Fail
538+
expect(validator('12'), isNotNull);
539+
expect(validator('12345'), isNotNull);
540+
}),
541+
);
542+
543+
testWidgets(
544+
'FormBuilderValidators.phoneNumber',
545+
(WidgetTester tester) => testValidations(tester, (context) {
546+
final validator = FormBuilderValidators.phoneNumber();
547+
// Pass
548+
expect(validator('+1 800 555 5555'), isNull);
549+
// Fail
550+
expect(validator('123-abc-defg'), isNotNull);
551+
}),
552+
);
553+
554+
testWidgets(
555+
'FormBuilderValidators.colorCode',
556+
(WidgetTester tester) => testValidations(tester, (context) {
557+
final validator = FormBuilderValidators.colorCode();
558+
// Pass
559+
expect(validator('#FFFFFF'), isNull);
560+
expect(validator('rgb(255, 255, 255)'), isNull);
561+
// Fail
562+
expect(validator('#ZZZZZZ'), isNotNull);
563+
}),
564+
);
565+
566+
testWidgets(
567+
'FormBuilderValidators.uppercase',
568+
(WidgetTester tester) => testValidations(tester, (context) {
569+
final validator = FormBuilderValidators.uppercase();
570+
// Pass
571+
expect(validator('HELLO'), isNull);
572+
// Fail
573+
expect(validator('Hello'), isNotNull);
574+
}),
575+
);
576+
577+
testWidgets(
578+
'FormBuilderValidators.lowercase',
579+
(WidgetTester tester) => testValidations(tester, (context) {
580+
final validator = FormBuilderValidators.lowercase();
581+
// Pass
582+
expect(validator('hello'), isNull);
583+
// Fail
584+
expect(validator('Hello'), isNotNull);
585+
}),
586+
);
587+
588+
testWidgets(
589+
'FormBuilderValidators.fileExtension',
590+
(WidgetTester tester) => testValidations(tester, (context) {
591+
final validator = FormBuilderValidators.fileExtension(
592+
allowedExtensions: ['txt', 'pdf'],
593+
);
594+
// Create a temporary file
595+
final file = File('test.txt')..createSync();
596+
// Pass
597+
expect(validator(file), isNull);
598+
// Fail
599+
expect(validator(File('test.doc')), isNotNull);
600+
// Cleanup
601+
file.deleteSync();
602+
}),
603+
);
604+
605+
testWidgets(
606+
'FormBuilderValidators.fileSize',
607+
(WidgetTester tester) => testValidations(tester, (context) {
608+
final validator = FormBuilderValidators.fileSize(maxSize: 1024);
609+
// Create a temporary file
610+
final file = File('test.txt')
611+
..createSync()
612+
..writeAsBytesSync(List.filled(512, 0));
613+
// Pass
614+
expect(validator(file), isNull);
615+
// Fail
616+
file.writeAsBytesSync(List.filled(2048, 0));
617+
expect(validator(file), isNotNull);
618+
// Cleanup
619+
file.deleteSync();
620+
}),
621+
);
622+
623+
testWidgets(
624+
'FormBuilderValidators.conditional',
625+
(WidgetTester tester) => testValidations(tester, (context) {
626+
final validator = FormBuilderValidators.conditional(
627+
(value) => value == 'test',
628+
FormBuilderValidators.required(),
629+
);
630+
// Pass
631+
expect(validator('test'), isNotNull);
632+
// Fail
633+
expect(validator('not_test'), isNull);
634+
}),
635+
);
636+
637+
testWidgets(
638+
'FormBuilderValidators.range',
639+
(WidgetTester tester) => testValidations(tester, (context) {
640+
final validator = FormBuilderValidators.range(10, 20);
641+
// Pass
642+
expect(validator(15), isNull);
643+
// Fail
644+
expect(validator(5), isNotNull);
645+
expect(validator(25), isNotNull);
646+
}),
647+
);
648+
649+
testWidgets(
650+
'FormBuilderValidators.mustBeTrue',
651+
(WidgetTester tester) => testValidations(tester, (context) {
652+
final validator = FormBuilderValidators.mustBeTrue();
653+
// Pass
654+
expect(validator(true), isNull);
655+
// Fail
656+
expect(validator(false), isNotNull);
657+
expect(validator(null), isNotNull);
658+
}),
659+
);
660+
661+
testWidgets(
662+
'FormBuilderValidators.mustBeFalse',
663+
(WidgetTester tester) => testValidations(tester, (context) {
664+
final validator = FormBuilderValidators.mustBeFalse();
665+
// Pass
666+
expect(validator(false), isNull);
667+
// Fail
668+
expect(validator(true), isNotNull);
669+
expect(validator(null), isNotNull);
670+
}),
671+
);
672+
673+
testWidgets(
674+
'FormBuilderValidators.hasSpecialChars',
675+
(WidgetTester tester) => testValidations(tester, (context) {
676+
final validator = FormBuilderValidators.hasSpecialChars(atLeast: 1);
677+
// Pass
678+
expect(validator('hello@'), isNull);
679+
// Fail
680+
expect(validator('hello'), isNotNull);
681+
}),
682+
);
683+
684+
testWidgets(
685+
'FormBuilderValidators.hasUppercaseChars',
686+
(WidgetTester tester) => testValidations(tester, (context) {
687+
final validator = FormBuilderValidators.hasUppercaseChars(atLeast: 1);
688+
// Pass
689+
expect(validator('Hello'), isNull);
690+
// Fail
691+
expect(validator('hello'), isNotNull);
692+
}),
693+
);
694+
695+
testWidgets(
696+
'FormBuilderValidators.hasLowercaseChars',
697+
(WidgetTester tester) => testValidations(tester, (context) {
698+
final validator = FormBuilderValidators.hasLowercaseChars(atLeast: 1);
699+
// Pass
700+
expect(validator('hello'), isNull);
701+
// Fail
702+
expect(validator('HELLO'), isNotNull);
703+
}),
704+
);
705+
706+
testWidgets(
707+
'FormBuilderValidators.hasNumericChars',
708+
(WidgetTester tester) => testValidations(tester, (context) {
709+
final validator = FormBuilderValidators.hasNumericChars(atLeast: 1);
710+
// Pass
711+
expect(validator('hello1'), isNull);
712+
// Fail
713+
expect(validator('hello'), isNotNull);
714+
}),
715+
);
493716
}

0 commit comments

Comments
 (0)