@@ -66,6 +66,36 @@ def test_if_the_most_relevant_error_is_anyOf_it_is_traversed(self):
66
66
best = self .best_match_of (instance = {"foo" : {"bar" : 12 }}, schema = schema )
67
67
self .assertEqual (best .validator_value , "array" )
68
68
69
+ def test_no_anyOf_traversal_for_equally_relevant_errors (self ):
70
+ """
71
+ We don't traverse into an anyOf (as above) if all of its context errors
72
+ seem to be equally "wrong" against the instance.
73
+ """
74
+
75
+ schema = {
76
+ "anyOf" : [
77
+ {"type" : "string" },
78
+ {"type" : "integer" },
79
+ {"type" : "object" },
80
+ ],
81
+ }
82
+ best = self .best_match_of (instance = [], schema = schema )
83
+ self .assertEqual (best .validator , "anyOf" )
84
+
85
+ def test_anyOf_traversal_for_single_equally_relevant_error (self ):
86
+ """
87
+ We *do* traverse anyOf with a single nested error, even though it is
88
+ vacuously equally relevant to itself.
89
+ """
90
+
91
+ schema = {
92
+ "anyOf" : [
93
+ {"type" : "string" },
94
+ ],
95
+ }
96
+ best = self .best_match_of (instance = [], schema = schema )
97
+ self .assertEqual (best .validator , "type" )
98
+
69
99
def test_if_the_most_relevant_error_is_oneOf_it_is_traversed (self ):
70
100
"""
71
101
If the most relevant error is an oneOf, then we traverse its context
@@ -89,6 +119,36 @@ def test_if_the_most_relevant_error_is_oneOf_it_is_traversed(self):
89
119
best = self .best_match_of (instance = {"foo" : {"bar" : 12 }}, schema = schema )
90
120
self .assertEqual (best .validator_value , "array" )
91
121
122
+ def test_no_oneOf_traversal_for_equally_relevant_errors (self ):
123
+ """
124
+ We don't traverse into an oneOf (as above) if all of its context errors
125
+ seem to be equally "wrong" against the instance.
126
+ """
127
+
128
+ schema = {
129
+ "oneOf" : [
130
+ {"type" : "string" },
131
+ {"type" : "integer" },
132
+ {"type" : "object" },
133
+ ],
134
+ }
135
+ best = self .best_match_of (instance = [], schema = schema )
136
+ self .assertEqual (best .validator , "oneOf" )
137
+
138
+ def test_oneOf_traversal_for_single_equally_relevant_error (self ):
139
+ """
140
+ We *do* traverse oneOf with a single nested error, even though it is
141
+ vacuously equally relevant to itself.
142
+ """
143
+
144
+ schema = {
145
+ "oneOf" : [
146
+ {"type" : "string" },
147
+ ],
148
+ }
149
+ best = self .best_match_of (instance = [], schema = schema )
150
+ self .assertEqual (best .validator , "type" )
151
+
92
152
def test_if_the_most_relevant_error_is_allOf_it_is_traversed (self ):
93
153
"""
94
154
Now, if the error is allOf, we traverse but select the *most* relevant
@@ -109,6 +169,11 @@ def test_if_the_most_relevant_error_is_allOf_it_is_traversed(self):
109
169
self .assertEqual (best .validator_value , "string" )
110
170
111
171
def test_nested_context_for_oneOf (self ):
172
+ """
173
+ We traverse into nested contexts (a oneOf containing an error in a
174
+ nested oneOf here).
175
+ """
176
+
112
177
schema = {
113
178
"properties" : {
114
179
"foo" : {
0 commit comments