Skip to content

Commit

Permalink
added additionalProperties with inner schema
Browse files Browse the repository at this point in the history
  • Loading branch information
sigu-399 committed Jun 21, 2013
1 parent 7c2bede commit 0572d9d
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 8 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ An implementation of JSON Schema, based on IETF's draft v4 - Go language

Working, but not all keyword are yet implemented.

What is missing : definitions, dependencies, additionalProperties, full coverage of items, additionalItems
What is missing : definitions, dependencies, full coverage of items, additionalItems

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

## Usage

Expand Down
8 changes: 4 additions & 4 deletions schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,10 @@ func TestJsonSchemaTestSuite(t *testing.T) {
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"},
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"},
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"},
//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"},
//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"},
//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"},
//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"},
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"},
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"},
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"},
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"},
map[string]string{"phase": "dependencies", "test": "neither", "schema": "dependencies/schema_0.json", "data": "dependencies/data_00.json", "valid": "true"},
map[string]string{"phase": "dependencies", "test": "nondependant", "schema": "dependencies/schema_0.json", "data": "dependencies/data_01.json", "valid": "true"},
map[string]string{"phase": "dependencies", "test": "with dependency", "schema": "dependencies/schema_0.json", "data": "dependencies/data_02.json", "valid": "true"},
Expand Down
22 changes: 20 additions & 2 deletions validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ func (v *ValidationResult) GetErrorMessages() []string {

func (v *ValidationResult) CopyErrorMessages(others []string) {
v.errorMessages = append(v.errorMessages, others...)
if len(others) > 0 {
v.valid = false
}
}

func (v *ValidationResult) addErrorMessage(message string) {
Expand Down Expand Up @@ -332,8 +335,23 @@ func (v *jsonSchema) validateObject(currentSchema *jsonSchema, value map[string]
}
}

case map[string]interface{}:
fmt.Printf("map %v %v\n", value, currentSchema)
case *jsonSchema:
additionalPropertiesSchema := currentSchema.additionalProperties.(*jsonSchema)
for pk := range value {
found := false
for _, spValue := range currentSchema.propertiesChildren {
if pk == spValue.property {
found = true
}
}
if !found {
validationResult := additionalPropertiesSchema.Validate(value[pk])
if !validationResult.IsValid() {
result.CopyErrorMessages(validationResult.GetErrorMessages())
}
}
}

}
}

Expand Down

0 comments on commit 0572d9d

Please sign in to comment.