RestrictedClientValidator.java

1
package io.github.marcopaglio.booking.validator.restricted;
2
3
import java.util.regex.Pattern;
4
5
import io.github.marcopaglio.booking.validator.ClientValidator;
6
7
/**
8
 * An implementation of validator for client entities that verifies if parameters are not null
9
 * or empty string neither they contain non-alphabetic characters, and fixes them if possible.
10
 * 
11
 * @see <a href="../../model/Client.html">Client</a>
12
 */
13
public class RestrictedClientValidator implements ClientValidator {
14
	/**
15
	 * Regular expression for stating other characters except the alphabetic ones and horizontal spaces.
16
	 */
17
	private static final Pattern notOnlyAlphabetic = Pattern.compile("[^\\p{IsAlphabetic}\\h]");
18
19
	/**
20
	 * Checks if firstName is valid as name for a client entity, and returns
21
	 * a fixed and valid alternative for it.
22
	 * 
23
	 * @param firstName					the string parameter to evaluate.
24
	 * @return							a fixed and valid {@code String} of {@code firstName}.
25
	 * @throws IllegalArgumentException	if {@code firstName} is null or not valid.
26
	 */
27
	@Override
28
	public String validateFirstName(String firstName) throws IllegalArgumentException {
29 1 1. validateFirstName : replaced return value with "" for io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::validateFirstName → KILLED
		return checkAndFixNameValidity(firstName, "name");
30
	}
31
32
	/**
33
	 * Checks if lastName is valid as surname for a client entity, and returns
34
	 * a fixed and valid alternative for it.
35
	 * 
36
	 * @param lastName					the string parameter to evaluate.
37
	 * @return							a fixed and valid {@code String} of {@code lastName}.
38
	 * @throws IllegalArgumentException	if {@code lastName} is null or not valid.
39
	 */
40
	@Override
41
	public String validateLastName(String lastName) throws IllegalArgumentException {
42 1 1. validateLastName : replaced return value with "" for io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::validateLastName → KILLED
		return checkAndFixNameValidity(lastName, "surname");
43
	}
44
45
	/**
46
	 * Checks if name is valid as name/surname for a client entity, and returns
47
	 * a fixed and valid alternative for it.
48
	 * 
49
	 * @param name						the string parameter to evaluate.
50
	 * @param inputName					the role of {@code name} in the client's context.
51
	 * @return							a fixed and valid {@code String} of {@code name}.
52
	 * @throws IllegalArgumentException	if {@code name} is null or not valid.
53
	 */
54
	private String checkAndFixNameValidity(String name, String inputName)
55
			throws IllegalArgumentException {
56 1 1. checkAndFixNameValidity : removed call to io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkNameValidity → KILLED
		checkNameValidity(name, inputName);
57 1 1. checkAndFixNameValidity : replaced return value with "" for io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkAndFixNameValidity → KILLED
		return removeExcessedSpaces(name);
58
	}
59
60
	/**
61
	 * Checks if the string is a valid name that is not null neither empty,
62
	 * and contains only alphabetic and horizontal whitespace characters.
63
	 *
64
	 * @param name						the string to evaluate.
65
	 * @param inputName					the role of the string in the client's context.
66
	 * @throws IllegalArgumentException	if {@code name} is a null or empty string,
67
	 * 									or it contains non-alphabetic characters.
68
	 */
69
	private void checkNameValidity(String name, String inputName) throws IllegalArgumentException {
70 1 1. checkNameValidity : removed call to io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkNotNull → KILLED
		checkNotNull(name, inputName);
71 1 1. checkNameValidity : removed call to io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkNotEmpty → KILLED
		checkNotEmpty(name, inputName);
72 1 1. checkNameValidity : removed call to io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkOnlyAlphabetic → KILLED
		checkOnlyAlphabetic(name, inputName);
73
	}
74
75
	/**
76
	 * Checks if the object is not null.
77
	 *
78
	 * @param o							the object to evaluate.
79
	 * @param inputName					the role of the object in the client's context.
80
	 * @throws IllegalArgumentException	if {@code o} is null.
81
	 */
82
	private void checkNotNull(Object o, String inputName) throws IllegalArgumentException {
83 1 1. checkNotNull : removed conditional - replaced equality check with false → KILLED
		if (o == null)
84
			throw new IllegalArgumentException(
85
				"Client needs a not null " + inputName + ".");
86
	}
87
88
	/**
89
	 * Checks if the string is not empty.
90
	 *
91
	 * @param str						the string to evaluate.
92
	 * @param inputName					the role of the string in the client's context.
93
	 * @throws IllegalArgumentException	if {@code str} is empty.
94
	 */
95
	private void checkNotEmpty(String str, String inputName) {
96 1 1. checkNotEmpty : removed conditional - replaced equality check with false → KILLED
		if (str.trim().isEmpty()) 
97
			throw new IllegalArgumentException(
98
				"Client needs a non-empty " + inputName + ".");
99
	}
100
101
	/**
102
	 * Checks if the string contains only accepted characters that is
103
	 * (lower and upper) alphabetic and accented letters, and horizontal whitespace character.
104
	 *
105
	 * @param str						the string to evaluate.
106
	 * @param inputName					the role of the string in the client's context.
107
	 * @throws IllegalArgumentException	if {@code str} contains non-valid characters.
108
	 */
109
	private void checkOnlyAlphabetic(String str, String inputName)
110
			throws IllegalArgumentException {
111 1 1. checkOnlyAlphabetic : removed conditional - replaced equality check with false → KILLED
		if (notOnlyAlphabetic.matcher(str).find())
112
			throw new IllegalArgumentException(
113
				"Client's " + inputName + " can contain only alphabet letters.");
114
	}
115
116
	/**
117
	 * Removes side spaces and reduces multiple spaces into a single whitespace.
118
	 *
119
	 * @param name	the name to modify.
120
	 * @return		the {@code String} name modified.
121
	 */
122
	private String removeExcessedSpaces(String name) {
123 1 1. removeExcessedSpaces : replaced return value with "" for io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::removeExcessedSpaces → KILLED
		return name.trim().replaceAll("\\s+", " ");
124
	}
125
}

Mutations

29

1.1
Location : validateFirstName
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateFirstNameTest]/[nested-class:ValidNamesTest]/[method:testValidateFirstNameWhenNameIsValidShouldReturnTheSameName()]
replaced return value with "" for io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::validateFirstName → KILLED

42

1.1
Location : validateLastName
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateLastNameTest]/[nested-class:ValidSurnamesTest]/[method:testValidateLastNameWhenSurnameIsValidShouldReturnTheSameSurname()]
replaced return value with "" for io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::validateLastName → KILLED

56

1.1
Location : checkAndFixNameValidity
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateFirstNameTest]/[nested-class:InvalidNamesTest]/[test-template:testValidateFirstNameWhenNameIsEmptyShouldThrow(java.lang.String)]/[test-template-invocation:#3]
removed call to io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkNameValidity → KILLED

57

1.1
Location : checkAndFixNameValidity
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateLastNameTest]/[nested-class:ValidSurnamesTest]/[method:testValidateLastNameWhenSurnameIsValidShouldReturnTheSameSurname()]
replaced return value with "" for io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkAndFixNameValidity → KILLED

70

1.1
Location : checkNameValidity
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateFirstNameTest]/[nested-class:InvalidNamesTest]/[method:testValidateFirstNameWhenNameIsNullShouldThrow()]
removed call to io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkNotNull → KILLED

71

1.1
Location : checkNameValidity
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateFirstNameTest]/[nested-class:InvalidNamesTest]/[test-template:testValidateFirstNameWhenNameIsEmptyShouldThrow(java.lang.String)]/[test-template-invocation:#3]
removed call to io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkNotEmpty → KILLED

72

1.1
Location : checkNameValidity
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateFirstNameTest]/[nested-class:InvalidNamesTest]/[test-template:testValidateFirstNameWhenNameContainsNonAlphabetCharactersShouldThrow(java.lang.String)]/[test-template-invocation:#1]
removed call to io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::checkOnlyAlphabetic → KILLED

83

1.1
Location : checkNotNull
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateFirstNameTest]/[nested-class:InvalidNamesTest]/[method:testValidateFirstNameWhenNameIsNullShouldThrow()]
removed conditional - replaced equality check with false → KILLED

96

1.1
Location : checkNotEmpty
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateFirstNameTest]/[nested-class:InvalidNamesTest]/[test-template:testValidateFirstNameWhenNameIsEmptyShouldThrow(java.lang.String)]/[test-template-invocation:#3]
removed conditional - replaced equality check with false → KILLED

111

1.1
Location : checkOnlyAlphabetic
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateFirstNameTest]/[nested-class:InvalidNamesTest]/[test-template:testValidateFirstNameWhenNameContainsNonAlphabetCharactersShouldThrow(java.lang.String)]/[test-template-invocation:#1]
removed conditional - replaced equality check with false → KILLED

123

1.1
Location : removeExcessedSpaces
Killed by : io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest.[engine:junit-jupiter]/[class:io.github.marcopaglio.booking.validator.restricted.RestrictedClientValidatorTest]/[nested-class:ValidateLastNameTest]/[nested-class:ValidSurnamesTest]/[method:testValidateLastNameWhenSurnameIsValidShouldReturnTheSameSurname()]
replaced return value with "" for io/github/marcopaglio/booking/validator/restricted/RestrictedClientValidator::removeExcessedSpaces → KILLED

Active mutators

Tests examined


Report generated by PIT 1.15.6