Skip to content

Commit e29311c

Browse files
authored
Merge branch 'main' into import-pkg
2 parents c7dd3a6 + a61195e commit e29311c

4 files changed

Lines changed: 85 additions & 2 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package example.avaje.nested;
2+
3+
import io.avaje.validation.constraints.Valid;
4+
import io.avaje.validation.constraints.Pattern;
5+
6+
@Valid
7+
public class MyPatterns {
8+
9+
@Pattern(
10+
regexp = "^(?=^.{1,16}$)^\\d+\\.\\d{2}$",
11+
message = "Not a valid amount. please add 2 decimal behind")
12+
private final String one;
13+
14+
public MyPatterns(String one) {
15+
this.one = one;
16+
}
17+
18+
public String one() {
19+
return one;
20+
}
21+
22+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package example.avaje.nested;
2+
3+
import io.avaje.validation.ConstraintViolation;
4+
import io.avaje.validation.ConstraintViolationException;
5+
import io.avaje.validation.Validator;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.util.ArrayList;
9+
import java.util.Locale;
10+
11+
import static org.assertj.core.api.Assertions.assertThat;
12+
import static org.assertj.core.api.Assertions.fail;
13+
14+
class MyPatternsTest {
15+
16+
final Validator validator = Validator.builder().addLocales(Locale.GERMAN).build();
17+
18+
@Test
19+
void patternWithEscapes_valid() {
20+
var bean = new MyPatterns("34.23");
21+
validator.validate(bean);
22+
}
23+
24+
@Test
25+
void patternWithEscapes_invalid_tooFew() {
26+
var bean = new MyPatterns("34.2");
27+
var violation = one(bean, Locale.ENGLISH);
28+
assertThat(violation.message()).isEqualTo("Not a valid amount. please add 2 decimal behind");
29+
}
30+
31+
@Test
32+
void patternWithEscapes_invalid_tooMany() {
33+
var bean = new MyPatterns("34.234");
34+
var violation = one(bean, Locale.ENGLISH);
35+
assertThat(violation.message()).isEqualTo("Not a valid amount. please add 2 decimal behind");
36+
}
37+
38+
ConstraintViolation one(Object any, Locale locale) {
39+
try {
40+
validator.validate(any, locale);
41+
fail("not expected");
42+
return null;
43+
} catch (ConstraintViolationException e) {
44+
var violations = new ArrayList<>(e.violations());
45+
assertThat(violations).hasSize(1);
46+
return violations.get(0);
47+
}
48+
}
49+
}

validator-generator/src/main/java/io/avaje/validation/generator/AnnotationUtil.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ String writeAttributes(AnnotationMirror annotationMirror) {
247247
}
248248

249249
private static void pattern(StringBuilder sb, PatternPrism prism) {
250-
sb.append("\"regexp\",\"").append(prism.regexp()).append("\"");
250+
sb.append("\"regexp\",\"").append(escape(prism.regexp())).append("\"");
251251
if (prism.message() != null) {
252252
sb.append(", \"message\",\"").append(avajeKey(prism.message())).append("\"");
253253
}
@@ -261,6 +261,18 @@ private static void pattern(StringBuilder sb, PatternPrism prism) {
261261
}
262262
sb.append(")");
263263
}
264+
265+
private static String escape(String value) {
266+
if (value == null) return "";
267+
return value
268+
.replace("\\", "\\\\")
269+
.replace("\"", "\\\"")
270+
.replace("\'", "\\\'")
271+
.replace("\n", "\\n")
272+
.replace("\b", "\\b")
273+
.replace("\t", "\\t")
274+
.replace("\r", "\\r");
275+
}
264276
}
265277

266278
static class StandardHandler extends BaseHandler {

validator-generator/src/test/java/io/avaje/validation/generator/models/valid/Address.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.avaje.validation.generator.models.valid;
22

3-
public class Address {
43

4+
public class Address {
55
public String line1;
66
public String line2;
77
@PrimitiveTest public long longValue;

0 commit comments

Comments
 (0)