@@ -5,273 +5,273 @@ void main() {
55 group ('RangeValidator' , () {
66 test ('should validate values within range' , () {
77 final validator = RangeValidator <int >(min: 0 , max: 100 );
8-
8+
99 expect (validator.validate (0 ), isTrue);
1010 expect (validator.validate (50 ), isTrue);
1111 expect (validator.validate (100 ), isTrue);
1212 expect (validator.validate (- 1 ), isFalse);
1313 expect (validator.validate (101 ), isFalse);
1414 });
15-
15+
1616 test ('should validate with only minimum bound' , () {
1717 final validator = RangeValidator <int >(min: 0 );
18-
18+
1919 expect (validator.validate (0 ), isTrue);
2020 expect (validator.validate (100 ), isTrue);
2121 expect (validator.validate (- 1 ), isFalse);
2222 });
23-
23+
2424 test ('should validate with only maximum bound' , () {
2525 final validator = RangeValidator <int >(max: 100 );
26-
26+
2727 expect (validator.validate (0 ), isTrue);
2828 expect (validator.validate (100 ), isTrue);
2929 expect (validator.validate (101 ), isFalse);
3030 });
31-
31+
3232 test ('should work with double values' , () {
3333 final validator = RangeValidator <double >(min: 0.0 , max: 1.0 );
34-
34+
3535 expect (validator.validate (0.0 ), isTrue);
3636 expect (validator.validate (0.5 ), isTrue);
3737 expect (validator.validate (1.0 ), isTrue);
3838 expect (validator.validate (- 0.1 ), isFalse);
3939 expect (validator.validate (1.1 ), isFalse);
4040 });
41-
41+
4242 test ('should serialize and deserialize correctly' , () {
4343 final validator = RangeValidator <int >(min: 0 , max: 100 );
4444 final map = validator.toMap ();
4545 final restored = RangeValidator <int >.fromMap (map);
46-
46+
4747 expect (restored.min, equals (0 ));
4848 expect (restored.max, equals (100 ));
4949 expect (restored.validate (50 ), isTrue);
5050 expect (restored.validate (- 1 ), isFalse);
5151 });
52-
52+
5353 test ('should provide correct description' , () {
5454 final validator1 = RangeValidator <int >(min: 0 , max: 100 );
5555 expect (validator1.description, contains ('between 0 and 100' ));
56-
56+
5757 final validator2 = RangeValidator <int >(min: 0 );
5858 expect (validator2.description, contains ('at least 0' ));
59-
59+
6060 final validator3 = RangeValidator <int >(max: 100 );
6161 expect (validator3.description, contains ('at most 100' ));
6262 });
6363 });
64-
64+
6565 group ('EnumValidator' , () {
6666 test ('should validate allowed values' , () {
6767 final validator = EnumValidator <String >(['light' , 'dark' , 'auto' ]);
68-
68+
6969 expect (validator.validate ('light' ), isTrue);
7070 expect (validator.validate ('dark' ), isTrue);
7171 expect (validator.validate ('auto' ), isTrue);
7272 expect (validator.validate ('invalid' ), isFalse);
7373 });
74-
74+
7575 test ('should work with different types' , () {
7676 final validator = EnumValidator <int >([1 , 2 , 3 ]);
77-
77+
7878 expect (validator.validate (1 ), isTrue);
7979 expect (validator.validate (2 ), isTrue);
8080 expect (validator.validate (3 ), isTrue);
8181 expect (validator.validate (4 ), isFalse);
8282 });
83-
83+
8484 test ('should serialize and deserialize correctly' , () {
8585 final validator = EnumValidator <String >(['light' , 'dark' ]);
8686 final map = validator.toMap ();
8787 final restored = EnumValidator <String >.fromMap (map);
88-
88+
8989 expect (restored.validate ('light' ), isTrue);
9090 expect (restored.validate ('dark' ), isTrue);
9191 expect (restored.validate ('invalid' ), isFalse);
9292 });
93-
93+
9494 test ('should provide correct description' , () {
9595 final validator = EnumValidator <String >(['light' , 'dark' , 'auto' ]);
9696 final description = validator.description;
97-
97+
9898 expect (description, contains ('light' ));
9999 expect (description, contains ('dark' ));
100100 expect (description, contains ('auto' ));
101101 });
102102 });
103-
103+
104104 group ('LengthValidator' , () {
105105 test ('should validate string length' , () {
106106 final validator = LengthValidator (minLength: 3 , maxLength: 10 );
107-
107+
108108 expect (validator.validate ('abc' ), isTrue);
109109 expect (validator.validate ('hello' ), isTrue);
110110 expect (validator.validate ('1234567890' ), isTrue);
111111 expect (validator.validate ('ab' ), isFalse);
112112 expect (validator.validate ('12345678901' ), isFalse);
113113 });
114-
114+
115115 test ('should validate with only minimum length' , () {
116116 final validator = LengthValidator (minLength: 3 );
117-
117+
118118 expect (validator.validate ('abc' ), isTrue);
119119 expect (validator.validate ('very long string' ), isTrue);
120120 expect (validator.validate ('ab' ), isFalse);
121121 });
122-
122+
123123 test ('should validate with only maximum length' , () {
124124 final validator = LengthValidator (maxLength: 10 );
125-
125+
126126 expect (validator.validate ('' ), isTrue);
127127 expect (validator.validate ('hello' ), isTrue);
128128 expect (validator.validate ('1234567890' ), isTrue);
129129 expect (validator.validate ('12345678901' ), isFalse);
130130 });
131-
131+
132132 test ('should serialize and deserialize correctly' , () {
133133 final validator = LengthValidator (minLength: 3 , maxLength: 10 );
134134 final map = validator.toMap ();
135135 final restored = LengthValidator .fromMap (map);
136-
136+
137137 expect (restored.minLength, equals (3 ));
138138 expect (restored.maxLength, equals (10 ));
139139 expect (restored.validate ('hello' ), isTrue);
140140 expect (restored.validate ('ab' ), isFalse);
141141 });
142142 });
143-
143+
144144 group ('RegexValidator' , () {
145145 test ('should validate against regex pattern' , () {
146146 final validator = RegexValidator (r'^\d{3}-\d{3}-\d{4}$' );
147-
147+
148148 expect (validator.validate ('123-456-7890' ), isTrue);
149149 expect (validator.validate ('987-654-3210' ), isTrue);
150150 expect (validator.validate ('123-45-6789' ), isFalse);
151151 expect (validator.validate ('not-a-phone' ), isFalse);
152152 });
153-
153+
154154 test ('should work with case sensitivity' , () {
155155 final caseSensitive = RegexValidator (r'^[A-Z]+$' );
156156 final caseInsensitive = RegexValidator (r'^[A-Z]+$' , caseSensitive: false );
157-
157+
158158 expect (caseSensitive.validate ('HELLO' ), isTrue);
159159 expect (caseSensitive.validate ('hello' ), isFalse);
160-
160+
161161 expect (caseInsensitive.validate ('HELLO' ), isTrue);
162162 expect (caseInsensitive.validate ('hello' ), isTrue);
163163 });
164-
164+
165165 test ('should serialize and deserialize correctly' , () {
166166 final validator = RegexValidator (
167167 r'^\d{3}-\d{3}-\d{4}$' ,
168168 customDescription: 'Phone number format' ,
169169 );
170170 final map = validator.toMap ();
171171 final restored = RegexValidator .fromMap (map);
172-
172+
173173 expect (restored.validate ('123-456-7890' ), isTrue);
174174 expect (restored.validate ('invalid' ), isFalse);
175175 expect (restored.customDescription, equals ('Phone number format' ));
176176 });
177177 });
178-
178+
179179 group ('CompositeValidator' , () {
180180 test ('should combine validators with AND logic' , () {
181181 final validator = CompositeValidator <String >.and ([
182182 LengthValidator (minLength: 3 , maxLength: 10 ),
183183 RegexValidator (r'^[a-zA-Z]+$' ),
184184 ]);
185-
185+
186186 expect (validator.validate ('hello' ), isTrue); // Both pass
187187 expect (validator.validate ('ab' ), isFalse); // Length fails
188188 expect (validator.validate ('hello123' ), isFalse); // Regex fails
189189 expect (validator.validate ('verylongstring' ), isFalse); // Length fails
190190 });
191-
191+
192192 test ('should combine validators with OR logic' , () {
193193 final validator = CompositeValidator <int >.or ([
194194 RangeValidator <int >(min: 1 , max: 10 ),
195195 EnumValidator <int >([100 , 200 ]),
196196 ]);
197-
197+
198198 expect (validator.validate (5 ), isTrue); // First validator passes
199199 expect (validator.validate (100 ), isTrue); // Second validator passes
200200 expect (validator.validate (50 ), isFalse); // Neither passes
201201 });
202-
202+
203203 test ('should serialize and deserialize correctly' , () {
204204 final validator = CompositeValidator <String >.and ([
205205 LengthValidator (minLength: 3 ),
206206 RegexValidator (r'^[a-zA-Z]+$' ),
207207 ]);
208-
208+
209209 final map = validator.toMap ();
210210 final restored = CompositeValidator <String >.fromMap (map);
211-
211+
212212 expect (restored.validate ('hello' ), isTrue);
213213 expect (restored.validate ('ab' ), isFalse);
214214 expect (restored.useAndLogic, isTrue);
215215 });
216216 });
217-
217+
218218 group ('CommonValidators' , () {
219219 test ('nonEmpty should validate non-empty strings' , () {
220220 final validator = CommonValidators .nonEmpty;
221-
221+
222222 expect (validator.validate ('hello' ), isTrue);
223223 expect (validator.validate ('a' ), isTrue);
224224 expect (validator.validate ('' ), isFalse);
225225 });
226-
226+
227227 test ('email should validate email addresses' , () {
228228 final validator = CommonValidators .email;
229-
229+
230230 expect (validator.
validate (
'[email protected] ' ), isTrue);
231231 expect (validator.
validate (
'[email protected] ' ), isTrue);
232232 expect (validator.validate ('invalid-email' ), isFalse);
233233 expect (validator.validate ('@domain.com' ), isFalse);
234234 expect (validator.validate ('test@' ), isFalse);
235235 });
236-
236+
237237 test ('url should validate URLs' , () {
238238 final validator = CommonValidators .url;
239-
239+
240240 expect (validator.validate ('https://example.com' ), isTrue);
241241 expect (validator.validate ('http://www.google.com' ), isTrue);
242242 expect (validator.validate ('https://sub.domain.com/path' ), isTrue);
243243 expect (validator.validate ('not-a-url' ), isFalse);
244244 expect (validator.validate ('ftp://example.com' ), isFalse);
245245 });
246-
246+
247247 test ('hexColor should validate hex color codes' , () {
248248 final validator = CommonValidators .hexColor;
249-
249+
250250 expect (validator.validate ('#FF0000' ), isTrue);
251251 expect (validator.validate ('#00ff00' ), isTrue);
252252 expect (validator.validate ('#123ABC' ), isTrue);
253253 expect (validator.validate ('FF0000' ), isFalse); // Missing #
254254 expect (validator.validate ('#FF00' ), isFalse); // Too short
255255 expect (validator.validate ('#GG0000' ), isFalse); // Invalid hex
256256 });
257-
257+
258258 test ('positiveInt should validate positive integers' , () {
259259 final validator = CommonValidators .positiveInt;
260-
260+
261261 expect (validator.validate (1 ), isTrue);
262262 expect (validator.validate (100 ), isTrue);
263263 expect (validator.validate (0 ), isFalse);
264264 expect (validator.validate (- 1 ), isFalse);
265265 });
266-
266+
267267 test ('percentage should validate percentages' , () {
268268 final validator = CommonValidators .percentage;
269-
269+
270270 expect (validator.validate (0.0 ), isTrue);
271271 expect (validator.validate (0.5 ), isTrue);
272272 expect (validator.validate (1.0 ), isTrue);
273273 expect (validator.validate (- 0.1 ), isFalse);
274274 expect (validator.validate (1.1 ), isFalse);
275275 });
276276 });
277- }
277+ }
0 commit comments