Skip to content

Commit 0572d9d

Browse files
committed
added additionalProperties with inner schema
1 parent 7c2bede commit 0572d9d

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ An implementation of JSON Schema, based on IETF's draft v4 - Go language
77

88
Working, but not all keyword are yet implemented.
99

10-
What is missing : definitions, dependencies, additionalProperties, full coverage of items, additionalItems
10+
What is missing : definitions, dependencies, full coverage of items, additionalItems
1111

12-
Testing / debugging / improvements in progress ( 69% of Json Schema Test Suite )
12+
Testing / debugging / improvements in progress ( 71% of Json Schema Test Suite )
1313

1414
## Usage
1515

schema_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,10 @@ func TestJsonSchemaTestSuite(t *testing.T) {
236236
map[string]string{"phase": "additionalProperties being false does not allow other properties", "test": "no additional properties is valid", "schema": "additionalProperties/schema_0.json", "data": "additionalProperties/data_00.json", "valid": "true"},
237237
map[string]string{"phase": "additionalProperties being false does not allow other properties", "test": "an additional property is invalid", "schema": "additionalProperties/schema_0.json", "data": "additionalProperties/data_01.json", "valid": "false"},
238238
map[string]string{"phase": "additionalProperties being false does not allow other properties", "test": "ignores non-objects", "schema": "additionalProperties/schema_0.json", "data": "additionalProperties/data_02.json", "valid": "true"},
239-
//map[string]string{"phase": "additionalProperties allows a schema which should validate", "test": "no additional properties is valid", "schema": "additionalProperties/schema_1.json", "data": "additionalProperties/data_10.json", "valid": "true"},
240-
//map[string]string{"phase": "additionalProperties allows a schema which should validate", "test": "an additional valid property is valid", "schema": "additionalProperties/schema_1.json", "data": "additionalProperties/data_11.json", "valid": "true"},
241-
//map[string]string{"phase": "additionalProperties allows a schema which should validate", "test": "an additional invalid property is invalid", "schema": "additionalProperties/schema_1.json", "data": "additionalProperties/data_12.json", "valid": "false"},
242-
//map[string]string{"phase": "additionalProperties are allowed by default", "test": "additional properties are allowed", "schema": "additionalProperties/schema_2.json", "data": "additionalProperties/data_20.json", "valid": "true"},
239+
map[string]string{"phase": "additionalProperties allows a schema which should validate", "test": "no additional properties is valid", "schema": "additionalProperties/schema_1.json", "data": "additionalProperties/data_10.json", "valid": "true"},
240+
map[string]string{"phase": "additionalProperties allows a schema which should validate", "test": "an additional valid property is valid", "schema": "additionalProperties/schema_1.json", "data": "additionalProperties/data_11.json", "valid": "true"},
241+
map[string]string{"phase": "additionalProperties allows a schema which should validate", "test": "an additional invalid property is invalid", "schema": "additionalProperties/schema_1.json", "data": "additionalProperties/data_12.json", "valid": "false"},
242+
map[string]string{"phase": "additionalProperties are allowed by default", "test": "additional properties are allowed", "schema": "additionalProperties/schema_2.json", "data": "additionalProperties/data_20.json", "valid": "true"},
243243
map[string]string{"phase": "dependencies", "test": "neither", "schema": "dependencies/schema_0.json", "data": "dependencies/data_00.json", "valid": "true"},
244244
map[string]string{"phase": "dependencies", "test": "nondependant", "schema": "dependencies/schema_0.json", "data": "dependencies/data_01.json", "valid": "true"},
245245
map[string]string{"phase": "dependencies", "test": "with dependency", "schema": "dependencies/schema_0.json", "data": "dependencies/data_02.json", "valid": "true"},

validation.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ func (v *ValidationResult) GetErrorMessages() []string {
4545

4646
func (v *ValidationResult) CopyErrorMessages(others []string) {
4747
v.errorMessages = append(v.errorMessages, others...)
48+
if len(others) > 0 {
49+
v.valid = false
50+
}
4851
}
4952

5053
func (v *ValidationResult) addErrorMessage(message string) {
@@ -332,8 +335,23 @@ func (v *jsonSchema) validateObject(currentSchema *jsonSchema, value map[string]
332335
}
333336
}
334337

335-
case map[string]interface{}:
336-
fmt.Printf("map %v %v\n", value, currentSchema)
338+
case *jsonSchema:
339+
additionalPropertiesSchema := currentSchema.additionalProperties.(*jsonSchema)
340+
for pk := range value {
341+
found := false
342+
for _, spValue := range currentSchema.propertiesChildren {
343+
if pk == spValue.property {
344+
found = true
345+
}
346+
}
347+
if !found {
348+
validationResult := additionalPropertiesSchema.Validate(value[pk])
349+
if !validationResult.IsValid() {
350+
result.CopyErrorMessages(validationResult.GetErrorMessages())
351+
}
352+
}
353+
}
354+
337355
}
338356
}
339357

0 commit comments

Comments
 (0)