Skip to content

Commit 5f6a966

Browse files
committed
Fixes
1 parent 7ddc82b commit 5f6a966

File tree

3 files changed

+191
-8
lines changed

3 files changed

+191
-8
lines changed

lib/localization/l10n.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// coverage:ignore-file
12
import 'dart:async';
23

34
import 'package:flutter/foundation.dart';

lib/src/network/url_validator.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,34 +99,34 @@ class UrlValidator extends BaseValidator<String> {
9999
} else if (requireProtocol == true) {
100100
return false;
101101
}
102-
str = split.join('://');
102+
final String str1 = split.join('://');
103103

104104
// check hash
105-
split = str.split('#');
106-
str = shift(split);
105+
split = str1.split('#');
106+
final String str2 = shift(split);
107107
hash = split.join('#');
108108
if (hash.isNotEmpty && RegExp(r'\s').hasMatch(hash)) {
109109
return false;
110110
}
111111

112112
// check query params
113-
split = str.split('?');
114-
str = shift(split);
113+
split = str2.split('?');
114+
final String str3 = shift(split);
115115
query = split.join('?');
116116
if (query.isNotEmpty && RegExp(r'\s').hasMatch(query)) {
117117
return false;
118118
}
119119

120120
// check path
121-
split = str.split('/');
122-
str = shift(split);
121+
split = str3.split('/');
122+
final String str4 = shift(split);
123123
path = split.join('/');
124124
if (path.isNotEmpty && RegExp(r'\s').hasMatch(path)) {
125125
return false;
126126
}
127127

128128
// check auth type urls
129-
split = str.split('@');
129+
split = str4.split('@');
130130
if (split.length > 1) {
131131
auth = shift(split);
132132
if (auth?.contains(':') ?? false) {

test/src/identity/username_validator_test.dart

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,5 +206,187 @@ void main() {
206206
// Assert
207207
expect(result, isNull);
208208
});
209+
210+
// Additional tests to cover FormBuilderLocalizations
211+
test('should return localized error if username is too short', () {
212+
// Arrange
213+
final UsernameValidator validator = UsernameValidator(
214+
minLength: 5,
215+
errorText: FormBuilderLocalizations.current.minLengthErrorText(5),
216+
);
217+
const String shortUsername = 'usr';
218+
219+
// Act
220+
final String? result = validator.validate(shortUsername);
221+
222+
// Assert
223+
expect(result, FormBuilderLocalizations.current.minLengthErrorText(5));
224+
});
225+
226+
test('should return localized error if username is too long', () {
227+
// Arrange
228+
final UsernameValidator validator = UsernameValidator(
229+
maxLength: 10,
230+
errorText: FormBuilderLocalizations.current.maxLengthErrorText(10),
231+
);
232+
const String longUsername = 'thisIsAVeryLongUsername';
233+
234+
// Act
235+
final String? result = validator.validate(longUsername);
236+
237+
// Assert
238+
expect(result, FormBuilderLocalizations.current.maxLengthErrorText(10));
239+
});
240+
241+
test(
242+
'should return localized error if numbers are not allowed and username contains numbers',
243+
() {
244+
// Arrange
245+
final UsernameValidator validator = UsernameValidator(
246+
allowNumbers: false,
247+
errorText: FormBuilderLocalizations
248+
.current.usernameCannotContainNumbersErrorText,
249+
);
250+
const String usernameWithNumbers = 'user123';
251+
252+
// Act
253+
final String? result = validator.validate(usernameWithNumbers);
254+
255+
// Assert
256+
expect(
257+
result,
258+
FormBuilderLocalizations.current.usernameCannotContainNumbersErrorText,
259+
);
260+
});
261+
262+
test(
263+
'should return localized error if underscores are not allowed and username contains underscores',
264+
() {
265+
// Arrange
266+
final UsernameValidator validator = UsernameValidator(
267+
errorText: FormBuilderLocalizations
268+
.current.usernameCannotContainUnderscoreErrorText,
269+
);
270+
const String usernameWithUnderscore = 'user_name';
271+
272+
// Act
273+
final String? result = validator.validate(usernameWithUnderscore);
274+
275+
// Assert
276+
expect(
277+
result,
278+
FormBuilderLocalizations
279+
.current.usernameCannotContainUnderscoreErrorText,
280+
);
281+
});
282+
283+
test(
284+
'should return localized error if dots are not allowed and username contains dots',
285+
() {
286+
// Arrange
287+
final UsernameValidator validator = UsernameValidator(
288+
errorText:
289+
FormBuilderLocalizations.current.usernameCannotContainDotsErrorText,
290+
);
291+
const String usernameWithDot = 'user.name';
292+
293+
// Act
294+
final String? result = validator.validate(usernameWithDot);
295+
296+
// Assert
297+
expect(
298+
result,
299+
FormBuilderLocalizations.current.usernameCannotContainDotsErrorText,
300+
);
301+
});
302+
303+
test(
304+
'should return localized error if dashes are not allowed and username contains dashes',
305+
() {
306+
// Arrange
307+
final UsernameValidator validator = UsernameValidator(
308+
errorText: FormBuilderLocalizations
309+
.current.usernameCannotContainDashesErrorText,
310+
);
311+
const String usernameWithDash = 'user-name';
312+
313+
// Act
314+
final String? result = validator.validate(usernameWithDash);
315+
316+
// Assert
317+
expect(
318+
result,
319+
FormBuilderLocalizations.current.usernameCannotContainDashesErrorText,
320+
);
321+
});
322+
323+
test(
324+
'should return localized error if spaces are not allowed and username contains spaces',
325+
() {
326+
// Arrange
327+
final UsernameValidator validator = UsernameValidator(
328+
errorText: FormBuilderLocalizations
329+
.current.usernameCannotContainSpacesErrorText,
330+
);
331+
const String usernameWithSpace = 'user name';
332+
333+
// Act
334+
final String? result = validator.validate(usernameWithSpace);
335+
336+
// Assert
337+
expect(
338+
result,
339+
FormBuilderLocalizations.current.usernameCannotContainSpacesErrorText,
340+
);
341+
});
342+
343+
test(
344+
'should return localized error if special characters are not allowed and username contains special characters',
345+
() {
346+
// Arrange
347+
final UsernameValidator validator = UsernameValidator(
348+
errorText: FormBuilderLocalizations
349+
.current.usernameCannotContainSpecialCharErrorText,
350+
);
351+
const String usernameWithSpecialChar = 'user@name';
352+
353+
// Act
354+
final String? result = validator.validate(usernameWithSpecialChar);
355+
356+
// Assert
357+
expect(
358+
result,
359+
FormBuilderLocalizations
360+
.current.usernameCannotContainSpecialCharErrorText,
361+
);
362+
});
363+
364+
test('should return localized error if value is null', () {
365+
// Arrange
366+
final UsernameValidator validator = UsernameValidator(
367+
errorText: FormBuilderLocalizations.current.usernameErrorText,
368+
);
369+
const String? value = null;
370+
371+
// Act
372+
final String? result = validator.validate(value);
373+
374+
// Assert
375+
expect(result, FormBuilderLocalizations.current.usernameErrorText);
376+
});
377+
378+
test('should return localized error if value is empty', () {
379+
// Arrange
380+
final UsernameValidator validator = UsernameValidator(
381+
errorText: FormBuilderLocalizations.current.usernameErrorText,
382+
);
383+
const String value = '';
384+
385+
// Act
386+
final String? result = validator.validate(value);
387+
388+
// Assert
389+
expect(result, FormBuilderLocalizations.current.usernameErrorText);
390+
});
209391
});
210392
}

0 commit comments

Comments
 (0)