Skip to content

Commit 302729f

Browse files
committed
wip broken test
1 parent a7480cb commit 302729f

File tree

3 files changed

+116
-2
lines changed

3 files changed

+116
-2
lines changed

json-java21-schema/src/test/java/io/github/simbo1905/json/schema/JsonSchemaFormatTest.java

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,54 @@
88
import static org.assertj.core.api.Assertions.*;
99

1010
class JsonSchemaFormatTest extends JsonSchemaLoggingConfig {
11+
@Test
12+
void testCommonFormats_whenAssertionOn_invalidsFail_validsPass() {
13+
// Toggle "assert formats" ON (wire however your implementation exposes it).
14+
// If you use a system property, ensure it’s read at compile() time.
15+
System.setProperty("json.schema.format.assert", "true");
1116

17+
// Invalids must FAIL when assertion is on
18+
final var uuidSchema = JsonSchema.compile(Json.parse("""
19+
{ "type":"string", "format":"uuid" }
20+
"""));
21+
assertThat(uuidSchema.validate(Json.parse("\"not-a-uuid\"")).valid()).isFalse();
22+
23+
final var emailSchema = JsonSchema.compile(Json.parse("""
24+
{ "type":"string", "format":"email" }
25+
"""));
26+
assertThat(emailSchema.validate(Json.parse("\"no-at-sign\"")).valid()).isFalse();
27+
28+
final var ipv4Schema = JsonSchema.compile(Json.parse("""
29+
{ "type":"string", "format":"ipv4" }
30+
"""));
31+
assertThat(ipv4Schema.validate(Json.parse("\"999.0.0.1\"")).valid()).isFalse();
32+
33+
// Valids must PASS
34+
assertThat(uuidSchema.validate(Json.parse("\"123e4567-e89b-12d3-a456-426614174000\"")).valid()).isTrue();
35+
assertThat(emailSchema.validate(Json.parse("\"user@example.com\"")).valid()).isTrue();
36+
assertThat(ipv4Schema.validate(Json.parse("\"192.168.0.1\"")).valid()).isTrue();
37+
}
38+
39+
@Test
40+
void testFormats_whenAssertionOff_areAnnotationsOnly() {
41+
// Toggle "assert formats" OFF (annotation-only)
42+
System.setProperty("json.schema.format.assert", "false");
43+
44+
final var uuidSchema = JsonSchema.compile(Json.parse("""
45+
{ "type":"string", "format":"uuid" }
46+
"""));
47+
final var emailSchema = JsonSchema.compile(Json.parse("""
48+
{ "type":"string", "format":"email" }
49+
"""));
50+
final var ipv4Schema = JsonSchema.compile(Json.parse("""
51+
{ "type":"string", "format":"ipv4" }
52+
"""));
53+
54+
// Invalid instances should PASS schema when assertion is off
55+
assertThat(uuidSchema.validate(Json.parse("\"not-a-uuid\"")).valid()).isTrue();
56+
assertThat(emailSchema.validate(Json.parse("\"no-at-sign\"")).valid()).isTrue();
57+
assertThat(ipv4Schema.validate(Json.parse("\"999.0.0.1\"")).valid()).isTrue();
58+
}
1259
@Test
1360
void testUuidFormat() {
1461
/// Test UUID format validation
@@ -336,4 +383,4 @@ void testFormatWithOtherConstraints() {
336383
// Invalid: matches pattern but not valid email format
337384
assertThat(schema.validate(Json.parse("\"test@example\"")).valid()).isFalse();
338385
}
339-
}
386+
}

json-java21-schema/src/test/java/io/github/simbo1905/json/schema/JsonSchemaNumberKeywordsTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,50 @@
66
import static org.assertj.core.api.Assertions.*;
77

88
class JsonSchemaNumberKeywordsTest extends JsonSchemaLoggingConfig {
9+
@Test
10+
void testExclusiveMinimum_numericForm_strict() {
11+
final var schemaJson = """
12+
{ "type": "number", "exclusiveMinimum": 5 }
13+
""";
14+
final var schema = JsonSchema.compile(Json.parse(schemaJson));
915

16+
// 5 is NOT allowed when exclusiveMinimum is a number
17+
assertThat(schema.validate(Json.parse("5")).valid()).isFalse();
18+
assertThat(schema.validate(Json.parse("5.0")).valid()).isFalse();
19+
20+
// Greater-than 5 are allowed
21+
assertThat(schema.validate(Json.parse("5.0000001")).valid()).isTrue();
22+
assertThat(schema.validate(Json.parse("6")).valid()).isTrue();
23+
assertThat(schema.validate(Json.parse("5.1")).valid()).isTrue();
24+
}
25+
26+
@Test
27+
void testExclusiveMaximum_numericForm_strict() {
28+
final var schemaJson = """
29+
{ "type": "number", "exclusiveMaximum": 3 }
30+
""";
31+
final var schema = JsonSchema.compile(Json.parse(schemaJson));
32+
33+
// 3 is NOT allowed when exclusiveMaximum is a number
34+
assertThat(schema.validate(Json.parse("3")).valid()).isFalse();
35+
assertThat(schema.validate(Json.parse("3.0")).valid()).isFalse();
36+
37+
// Less-than 3 are allowed
38+
assertThat(schema.validate(Json.parse("2.9999")).valid()).isTrue();
39+
assertThat(schema.validate(Json.parse("2")).valid()).isTrue();
40+
assertThat(schema.validate(Json.parse("2.9")).valid()).isTrue();
41+
}
42+
43+
@Test
44+
void testExclusiveMinimum_booleanForm_backCompat() {
45+
final var schemaJson = """
46+
{ "type": "number", "minimum": 5, "exclusiveMinimum": true }
47+
""";
48+
final var schema = JsonSchema.compile(Json.parse(schemaJson));
49+
50+
assertThat(schema.validate(Json.parse("5")).valid()).isFalse(); // exclusive
51+
assertThat(schema.validate(Json.parse("6")).valid()).isTrue(); // greater is ok
52+
}
1053
@Test
1154
void exclusiveMinimumAndMaximumAreHonored() {
1255
String schemaJson = """

json-java21-schema/src/test/java/io/github/simbo1905/json/schema/JsonSchemaPatternTest.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,30 @@
55
import static org.assertj.core.api.Assertions.*;
66

77
class JsonSchemaPatternTest extends JsonSchemaLoggingConfig {
8+
@Test
9+
void testPattern_unanchored_singleChar_findVsMatches() {
10+
// Unanchored semantics: pattern "a" must validate any string that CONTAINS 'a',
11+
// not just strings that ARE exactly "a".
12+
final var schemaJson = """
13+
{
14+
"type": "string",
15+
"pattern": "a"
16+
}
17+
""";
18+
19+
final var schema = JsonSchema.compile(Json.parse(schemaJson));
20+
21+
// ✅ Should PASS — 'a' appears somewhere in the string (proves find() semantics)
22+
assertThat(schema.validate(Json.parse("\"a\"")).valid()).isTrue();
23+
assertThat(schema.validate(Json.parse("\"ba\"")).valid()).isTrue();
24+
assertThat(schema.validate(Json.parse("\"ab\"")).valid()).isTrue();
25+
assertThat(schema.validate(Json.parse("\"baa\"")).valid()).isTrue();
26+
assertThat(schema.validate(Json.parse("\"xyzaxyz\"")).valid()).isTrue();
27+
28+
// ❌ Should FAIL — no 'a' present
29+
assertThat(schema.validate(Json.parse("\"bbb\"")).valid()).isFalse();
30+
assertThat(schema.validate(Json.parse("\"\"")).valid()).isFalse();
31+
}
832

933
@Test
1034
void testPattern_unanchored_contains() {
@@ -121,4 +145,4 @@ void testPattern_emptyString() {
121145
// Invalid - no 'a'
122146
assertThat(schema.validate(Json.parse("\"bbb\"")).valid()).isFalse();
123147
}
124-
}
148+
}

0 commit comments

Comments
 (0)