|
19 | 19 | import java.util.Collection;
|
20 | 20 | import java.util.Locale;
|
21 | 21 | import java.util.Map;
|
| 22 | +import java.util.Objects; |
22 | 23 | import java.util.Optional;
|
| 24 | +import java.util.function.BiPredicate; |
23 | 25 | import java.util.function.Predicate;
|
24 | 26 | import java.util.regex.Pattern;
|
25 | 27 |
|
@@ -110,88 +112,57 @@ private <T> Predicate<ExampleMatcher.PropertySpecifier> createPredicateForSpecif
|
110 | 112 | return this.createPredicateForStringMatcher(
|
111 | 113 | specifier,
|
112 | 114 | setOrDefaultMatcher,
|
113 |
| - transformedExampledValue, |
114 |
| - transformedValue); |
| 115 | + transformedExampledValue.get(), |
| 116 | + transformedValue.orElse(null)); |
115 | 117 | };
|
116 | 118 | }
|
117 | 119 |
|
118 | 120 | private boolean createPredicateForStringMatcher(
|
119 | 121 | final ExampleMatcher.PropertySpecifier specifier,
|
120 | 122 | final ExampleMatcher.StringMatcher setOrDefaultMatcher,
|
121 |
| - final Optional<Object> transformedExampledValue, |
122 |
| - final Optional<Object> transformedValue) |
| 123 | + final Object transformedExampledValue, // Never null |
| 124 | + final Object transformedValue) // Nullable |
123 | 125 | {
|
124 |
| - switch(setOrDefaultMatcher) |
| 126 | + // Check exact matches |
| 127 | + if(ExampleMatcher.StringMatcher.DEFAULT.equals(setOrDefaultMatcher) |
| 128 | + || ExampleMatcher.StringMatcher.EXACT.equals(setOrDefaultMatcher)) |
125 | 129 | {
|
126 |
| - case DEFAULT, EXACT -> |
| 130 | + if(transformedExampledValue instanceof String) |
127 | 131 | {
|
128 |
| - if(transformedExampledValue.get() instanceof String) |
129 |
| - { |
130 |
| - return this.valueToString(transformedValue, specifier).equals(this.valueToString( |
131 |
| - transformedExampledValue, |
132 |
| - specifier)); |
133 |
| - } |
134 |
| - return transformedExampledValue.equals(transformedValue); |
135 |
| - } |
136 |
| - case STARTING -> |
137 |
| - { |
138 |
| - final Optional<String> valueAsString = this.valueToString(transformedValue, specifier); |
139 |
| - if(valueAsString.isEmpty()) |
140 |
| - { |
141 |
| - return false; |
142 |
| - } |
143 |
| - return valueAsString.get() |
144 |
| - .startsWith(this.valueToString(transformedExampledValue, specifier).get()); |
145 |
| - } |
146 |
| - case ENDING -> |
147 |
| - { |
148 |
| - final Optional<String> valueAsString = this.valueToString(transformedValue, specifier); |
149 |
| - if(valueAsString.isEmpty()) |
150 |
| - { |
151 |
| - return false; |
152 |
| - } |
153 |
| - return valueAsString.get().endsWith(this.valueToString(transformedExampledValue, specifier).get()); |
154 |
| - } |
155 |
| - case CONTAINING -> |
156 |
| - { |
157 |
| - final Optional<String> valueAsString = this.valueToString(transformedValue, specifier); |
158 |
| - if(valueAsString.isEmpty()) |
159 |
| - { |
160 |
| - return false; |
161 |
| - } |
162 |
| - return valueAsString.get().contains(this.valueToString(transformedExampledValue, specifier).get()); |
163 |
| - } |
164 |
| - case REGEX -> |
165 |
| - { |
166 |
| - final Optional<String> valueAsString = this.valueToString(transformedValue, specifier); |
167 |
| - if(valueAsString.isEmpty()) |
168 |
| - { |
169 |
| - return false; |
170 |
| - } |
171 |
| - return Pattern.compile( |
172 |
| - this.valueToString(transformedExampledValue, specifier).get() |
173 |
| - ) |
174 |
| - .matcher(valueAsString.get()).find(); |
175 |
| - } |
176 |
| - default -> |
177 |
| - { |
178 |
| - return false; |
| 132 | + return Objects.equals( |
| 133 | + this.valueToString(transformedExampledValue, specifier), |
| 134 | + this.valueToString(transformedValue, specifier)); |
179 | 135 | }
|
| 136 | + return Objects.equals(transformedExampledValue, transformedValue); |
180 | 137 | }
|
| 138 | + |
| 139 | + // Check comparisons |
| 140 | + final BiPredicate<String, String> compareFunc = switch(setOrDefaultMatcher) |
| 141 | + { |
| 142 | + case STARTING -> String::startsWith; |
| 143 | + case ENDING -> String::endsWith; |
| 144 | + case CONTAINING -> String::contains; |
| 145 | + case REGEX -> (v, example) -> Pattern.compile(example).matcher(v).find(); |
| 146 | + default -> null; |
| 147 | + }; |
| 148 | + |
| 149 | + return compareFunc != null |
| 150 | + && Optional.ofNullable(this.valueToString(transformedValue, specifier)) |
| 151 | + .map(v -> compareFunc.test(v, this.valueToString(transformedExampledValue, specifier))) |
| 152 | + .orElse(false); |
181 | 153 | }
|
182 | 154 |
|
183 |
| - private Optional<String> valueToString( |
184 |
| - final Optional<Object> value, |
| 155 | + private String valueToString( |
| 156 | + final Object value, |
185 | 157 | final ExampleMatcher.PropertySpecifier specifier)
|
186 | 158 | {
|
187 |
| - if(value.isEmpty()) |
188 |
| - { |
189 |
| - return Optional.empty(); |
190 |
| - } |
191 |
| - if(specifier != null && Boolean.TRUE.equals(specifier.getIgnoreCase())) |
| 159 | + if(value == null) |
192 | 160 | {
|
193 |
| - return Optional.of(value.get().toString().toLowerCase(Locale.ROOT)); |
| 161 | + return null; |
194 | 162 | }
|
195 |
| - return Optional.of(value.get().toString()); |
| 163 | + |
| 164 | + return (specifier != null && Boolean.TRUE.equals(specifier.getIgnoreCase())) |
| 165 | + ? value.toString().toLowerCase(Locale.ROOT) |
| 166 | + : value.toString(); |
196 | 167 | }
|
197 | 168 | }
|
0 commit comments