1[ 2 { 3 "description": "minContains without contains is ignored", 4 "schema": { 5 "$schema": "https://json-schema.org/draft/2020-12/schema", 6 "minContains": 1 7 }, 8 "tests": [ 9 { 10 "description": "one item valid against lone minContains", 11 "data": [ 1 ], 12 "valid": true 13 }, 14 { 15 "description": "zero items still valid against lone minContains", 16 "data": [], 17 "valid": true 18 } 19 ] 20 }, 21 { 22 "description": "minContains=1 with contains", 23 "schema": { 24 "$schema": "https://json-schema.org/draft/2020-12/schema", 25 "contains": {"const": 1}, 26 "minContains": 1 27 }, 28 "tests": [ 29 { 30 "description": "empty data", 31 "data": [ ], 32 "valid": false 33 }, 34 { 35 "description": "no elements match", 36 "data": [ 2 ], 37 "valid": false 38 }, 39 { 40 "description": "single element matches, valid minContains", 41 "data": [ 1 ], 42 "valid": true 43 }, 44 { 45 "description": "some elements match, valid minContains", 46 "data": [ 1, 2 ], 47 "valid": true 48 }, 49 { 50 "description": "all elements match, valid minContains", 51 "data": [ 1, 1 ], 52 "valid": true 53 } 54 ] 55 }, 56 { 57 "description": "minContains=2 with contains", 58 "schema": { 59 "$schema": "https://json-schema.org/draft/2020-12/schema", 60 "contains": {"const": 1}, 61 "minContains": 2 62 }, 63 "tests": [ 64 { 65 "description": "empty data", 66 "data": [ ], 67 "valid": false 68 }, 69 { 70 "description": "all elements match, invalid minContains", 71 "data": [ 1 ], 72 "valid": false 73 }, 74 { 75 "description": "some elements match, invalid minContains", 76 "data": [ 1, 2 ], 77 "valid": false 78 }, 79 { 80 "description": "all elements match, valid minContains (exactly as needed)", 81 "data": [ 1, 1 ], 82 "valid": true 83 }, 84 { 85 "description": "all elements match, valid minContains (more than needed)", 86 "data": [ 1, 1, 1 ], 87 "valid": true 88 }, 89 { 90 "description": "some elements match, valid minContains", 91 "data": [ 1, 2, 1 ], 92 "valid": true 93 } 94 ] 95 }, 96 { 97 "description": "minContains=2 with contains with a decimal value", 98 "schema": { 99 "$schema": "https://json-schema.org/draft/2020-12/schema", 100 "contains": {"const": 1}, 101 "minContains": 2.0 102 }, 103 "tests": [ 104 { 105 "description": "one element matches, invalid minContains", 106 "data": [ 1 ], 107 "valid": false 108 }, 109 { 110 "description": "both elements match, valid minContains", 111 "data": [ 1, 1 ], 112 "valid": true 113 } 114 ] 115 }, 116 { 117 "description": "maxContains = minContains", 118 "schema": { 119 "$schema": "https://json-schema.org/draft/2020-12/schema", 120 "contains": {"const": 1}, 121 "maxContains": 2, 122 "minContains": 2 123 }, 124 "tests": [ 125 { 126 "description": "empty data", 127 "data": [ ], 128 "valid": false 129 }, 130 { 131 "description": "all elements match, invalid minContains", 132 "data": [ 1 ], 133 "valid": false 134 }, 135 { 136 "description": "all elements match, invalid maxContains", 137 "data": [ 1, 1, 1 ], 138 "valid": false 139 }, 140 { 141 "description": "all elements match, valid maxContains and minContains", 142 "data": [ 1, 1 ], 143 "valid": true 144 } 145 ] 146 }, 147 { 148 "description": "maxContains < minContains", 149 "schema": { 150 "$schema": "https://json-schema.org/draft/2020-12/schema", 151 "contains": {"const": 1}, 152 "maxContains": 1, 153 "minContains": 3 154 }, 155 "tests": [ 156 { 157 "description": "empty data", 158 "data": [ ], 159 "valid": false 160 }, 161 { 162 "description": "invalid minContains", 163 "data": [ 1 ], 164 "valid": false 165 }, 166 { 167 "description": "invalid maxContains", 168 "data": [ 1, 1, 1 ], 169 "valid": false 170 }, 171 { 172 "description": "invalid maxContains and minContains", 173 "data": [ 1, 1 ], 174 "valid": false 175 } 176 ] 177 }, 178 { 179 "description": "minContains = 0", 180 "schema": { 181 "$schema": "https://json-schema.org/draft/2020-12/schema", 182 "contains": {"const": 1}, 183 "minContains": 0 184 }, 185 "tests": [ 186 { 187 "description": "empty data", 188 "data": [ ], 189 "valid": true 190 }, 191 { 192 "description": "minContains = 0 makes contains always pass", 193 "data": [ 2 ], 194 "valid": true 195 } 196 ] 197 }, 198 { 199 "description": "minContains = 0 with maxContains", 200 "schema": { 201 "$schema": "https://json-schema.org/draft/2020-12/schema", 202 "contains": {"const": 1}, 203 "minContains": 0, 204 "maxContains": 1 205 }, 206 "tests": [ 207 { 208 "description": "empty data", 209 "data": [ ], 210 "valid": true 211 }, 212 { 213 "description": "not more than maxContains", 214 "data": [ 1 ], 215 "valid": true 216 }, 217 { 218 "description": "too many", 219 "data": [ 1, 1 ], 220 "valid": false 221 } 222 ] 223 } 224] 225