github.com/kaptinlin/jsonschema@v0.4.6/testdata/JSON-Schema-Test-Suite/tests/draft2020-12/unevaluatedProperties.json (about)

     1  [
     2      {
     3          "description": "unevaluatedProperties true",
     4          "schema": {
     5              "$schema": "https://json-schema.org/draft/2020-12/schema",
     6              "type": "object",
     7              "unevaluatedProperties": true
     8          },
     9          "tests": [
    10              {
    11                  "description": "with no unevaluated properties",
    12                  "data": {},
    13                  "valid": true
    14              },
    15              {
    16                  "description": "with unevaluated properties",
    17                  "data": {
    18                      "foo": "foo"
    19                  },
    20                  "valid": true
    21              }
    22          ]
    23      },
    24      {
    25          "description": "unevaluatedProperties schema",
    26          "schema": {
    27              "$schema": "https://json-schema.org/draft/2020-12/schema",
    28              "type": "object",
    29              "unevaluatedProperties": {
    30                  "type": "string",
    31                  "minLength": 3
    32              }
    33          },
    34          "tests": [
    35              {
    36                  "description": "with no unevaluated properties",
    37                  "data": {},
    38                  "valid": true
    39              },
    40              {
    41                  "description": "with valid unevaluated properties",
    42                  "data": {
    43                      "foo": "foo"
    44                  },
    45                  "valid": true
    46              },
    47              {
    48                  "description": "with invalid unevaluated properties",
    49                  "data": {
    50                      "foo": "fo"
    51                  },
    52                  "valid": false
    53              }
    54          ]
    55      },
    56      {
    57          "description": "unevaluatedProperties false",
    58          "schema": {
    59              "$schema": "https://json-schema.org/draft/2020-12/schema",
    60              "type": "object",
    61              "unevaluatedProperties": false
    62          },
    63          "tests": [
    64              {
    65                  "description": "with no unevaluated properties",
    66                  "data": {},
    67                  "valid": true
    68              },
    69              {
    70                  "description": "with unevaluated properties",
    71                  "data": {
    72                      "foo": "foo"
    73                  },
    74                  "valid": false
    75              }
    76          ]
    77      },
    78      {
    79          "description": "unevaluatedProperties with adjacent properties",
    80          "schema": {
    81              "$schema": "https://json-schema.org/draft/2020-12/schema",
    82              "type": "object",
    83              "properties": {
    84                  "foo": { "type": "string" }
    85              },
    86              "unevaluatedProperties": false
    87          },
    88          "tests": [
    89              {
    90                  "description": "with no unevaluated properties",
    91                  "data": {
    92                      "foo": "foo"
    93                  },
    94                  "valid": true
    95              },
    96              {
    97                  "description": "with unevaluated properties",
    98                  "data": {
    99                      "foo": "foo",
   100                      "bar": "bar"
   101                  },
   102                  "valid": false
   103              }
   104          ]
   105      },
   106      {
   107          "description": "unevaluatedProperties with adjacent patternProperties",
   108          "schema": {
   109              "$schema": "https://json-schema.org/draft/2020-12/schema",
   110              "type": "object",
   111              "patternProperties": {
   112                  "^foo": { "type": "string" }
   113              },
   114              "unevaluatedProperties": false
   115          },
   116          "tests": [
   117              {
   118                  "description": "with no unevaluated properties",
   119                  "data": {
   120                      "foo": "foo"
   121                  },
   122                  "valid": true
   123              },
   124              {
   125                  "description": "with unevaluated properties",
   126                  "data": {
   127                      "foo": "foo",
   128                      "bar": "bar"
   129                  },
   130                  "valid": false
   131              }
   132          ]
   133      },
   134      {
   135          "description": "unevaluatedProperties with adjacent additionalProperties",
   136          "schema": {
   137              "$schema": "https://json-schema.org/draft/2020-12/schema",
   138              "type": "object",
   139              "properties": {
   140                  "foo": { "type": "string" }
   141              },
   142              "additionalProperties": true,
   143              "unevaluatedProperties": false
   144          },
   145          "tests": [
   146              {
   147                  "description": "with no additional properties",
   148                  "data": {
   149                      "foo": "foo"
   150                  },
   151                  "valid": true
   152              },
   153              {
   154                  "description": "with additional properties",
   155                  "data": {
   156                      "foo": "foo",
   157                      "bar": "bar"
   158                  },
   159                  "valid": true
   160              }
   161          ]
   162      },
   163      {
   164          "description": "unevaluatedProperties with nested properties",
   165          "schema": {
   166              "$schema": "https://json-schema.org/draft/2020-12/schema",
   167              "type": "object",
   168              "properties": {
   169                  "foo": { "type": "string" }
   170              },
   171              "allOf": [
   172                  {
   173                      "properties": {
   174                          "bar": { "type": "string" }
   175                      }
   176                  }
   177              ],
   178              "unevaluatedProperties": false
   179          },
   180          "tests": [
   181              {
   182                  "description": "with no additional properties",
   183                  "data": {
   184                      "foo": "foo",
   185                      "bar": "bar"
   186                  },
   187                  "valid": true
   188              },
   189              {
   190                  "description": "with additional properties",
   191                  "data": {
   192                      "foo": "foo",
   193                      "bar": "bar",
   194                      "baz": "baz"
   195                  },
   196                  "valid": false
   197              }
   198          ]
   199      },
   200      {
   201          "description": "unevaluatedProperties with nested patternProperties",
   202          "schema": {
   203              "$schema": "https://json-schema.org/draft/2020-12/schema",
   204              "type": "object",
   205              "properties": {
   206                  "foo": { "type": "string" }
   207              },
   208              "allOf": [
   209                {
   210                    "patternProperties": {
   211                        "^bar": { "type": "string" }
   212                    }
   213                }
   214              ],
   215              "unevaluatedProperties": false
   216          },
   217          "tests": [
   218              {
   219                  "description": "with no additional properties",
   220                  "data": {
   221                      "foo": "foo",
   222                      "bar": "bar"
   223                  },
   224                  "valid": true
   225              },
   226              {
   227                  "description": "with additional properties",
   228                  "data": {
   229                      "foo": "foo",
   230                      "bar": "bar",
   231                      "baz": "baz"
   232                  },
   233                  "valid": false
   234              }
   235          ]
   236      },
   237      {
   238          "description": "unevaluatedProperties with nested additionalProperties",
   239          "schema": {
   240              "$schema": "https://json-schema.org/draft/2020-12/schema",
   241              "type": "object",
   242              "properties": {
   243                  "foo": { "type": "string" }
   244              },
   245              "allOf": [
   246                  {
   247                      "additionalProperties": true
   248                  }
   249              ],
   250              "unevaluatedProperties": false
   251          },
   252          "tests": [
   253              {
   254                  "description": "with no additional properties",
   255                  "data": {
   256                      "foo": "foo"
   257                  },
   258                  "valid": true
   259              },
   260              {
   261                  "description": "with additional properties",
   262                  "data": {
   263                      "foo": "foo",
   264                      "bar": "bar"
   265                  },
   266                  "valid": true
   267              }
   268          ]
   269      },
   270      {
   271          "description": "unevaluatedProperties with nested unevaluatedProperties",
   272          "schema": {
   273              "$schema": "https://json-schema.org/draft/2020-12/schema",
   274              "type": "object",
   275              "properties": {
   276                  "foo": { "type": "string" }
   277              },
   278              "allOf": [
   279                  {
   280                      "unevaluatedProperties": true
   281                  }
   282              ],
   283              "unevaluatedProperties": {
   284                  "type": "string",
   285                  "maxLength": 2
   286              }
   287          },
   288          "tests": [
   289              {
   290                  "description": "with no nested unevaluated properties",
   291                  "data": {
   292                      "foo": "foo"
   293                  },
   294                  "valid": true
   295              },
   296              {
   297                  "description": "with nested unevaluated properties",
   298                  "data": {
   299                      "foo": "foo",
   300                      "bar": "bar"
   301                  },
   302                  "valid": true
   303              }
   304          ]
   305      },
   306      {
   307          "description": "unevaluatedProperties with anyOf",
   308          "schema": {
   309              "$schema": "https://json-schema.org/draft/2020-12/schema",
   310              "type": "object",
   311              "properties": {
   312                  "foo": { "type": "string" }
   313              },
   314              "anyOf": [
   315                  {
   316                      "properties": {
   317                          "bar": { "const": "bar" }
   318                      },
   319                      "required": ["bar"]
   320                  },
   321                  {
   322                      "properties": {
   323                          "baz": { "const": "baz" }
   324                      },
   325                      "required": ["baz"]
   326                  },
   327                  {
   328                      "properties": {
   329                          "quux": { "const": "quux" }
   330                      },
   331                      "required": ["quux"]
   332                  }
   333              ],
   334              "unevaluatedProperties": false
   335          },
   336          "tests": [
   337              {
   338                  "description": "when one matches and has no unevaluated properties",
   339                  "data": {
   340                      "foo": "foo",
   341                      "bar": "bar"
   342                  },
   343                  "valid": true
   344              },
   345              {
   346                  "description": "when one matches and has unevaluated properties",
   347                  "data": {
   348                      "foo": "foo",
   349                      "bar": "bar",
   350                      "baz": "not-baz"
   351                  },
   352                  "valid": false
   353              },
   354              {
   355                  "description": "when two match and has no unevaluated properties",
   356                  "data": {
   357                      "foo": "foo",
   358                      "bar": "bar",
   359                      "baz": "baz"
   360                  },
   361                  "valid": true
   362              },
   363              {
   364                  "description": "when two match and has unevaluated properties",
   365                  "data": {
   366                      "foo": "foo",
   367                      "bar": "bar",
   368                      "baz": "baz",
   369                      "quux": "not-quux"
   370                  },
   371                  "valid": false
   372              }
   373          ]
   374      },
   375      {
   376          "description": "unevaluatedProperties with oneOf",
   377          "schema": {
   378              "$schema": "https://json-schema.org/draft/2020-12/schema",
   379              "type": "object",
   380              "properties": {
   381                  "foo": { "type": "string" }
   382              },
   383              "oneOf": [
   384                  {
   385                      "properties": {
   386                          "bar": { "const": "bar" }
   387                      },
   388                      "required": ["bar"]
   389                  },
   390                  {
   391                      "properties": {
   392                          "baz": { "const": "baz" }
   393                      },
   394                      "required": ["baz"]
   395                  }
   396              ],
   397              "unevaluatedProperties": false
   398          },
   399          "tests": [
   400              {
   401                  "description": "with no unevaluated properties",
   402                  "data": {
   403                      "foo": "foo",
   404                      "bar": "bar"
   405                  },
   406                  "valid": true
   407              },
   408              {
   409                  "description": "with unevaluated properties",
   410                  "data": {
   411                      "foo": "foo",
   412                      "bar": "bar",
   413                      "quux": "quux"
   414                  },
   415                  "valid": false
   416              }
   417          ]
   418      },
   419      {
   420          "description": "unevaluatedProperties with not",
   421          "schema": {
   422              "$schema": "https://json-schema.org/draft/2020-12/schema",
   423              "type": "object",
   424              "properties": {
   425                  "foo": { "type": "string" }
   426              },
   427              "not": {
   428                  "not": {
   429                      "properties": {
   430                          "bar": { "const": "bar" }
   431                      },
   432                      "required": ["bar"]
   433                  }
   434              },
   435              "unevaluatedProperties": false
   436          },
   437          "tests": [
   438              {
   439                  "description": "with unevaluated properties",
   440                  "data": {
   441                      "foo": "foo",
   442                      "bar": "bar"
   443                  },
   444                  "valid": false
   445              }
   446          ]
   447      },
   448      {
   449          "description": "unevaluatedProperties with if/then/else",
   450          "schema": {
   451              "$schema": "https://json-schema.org/draft/2020-12/schema",
   452              "type": "object",
   453              "if": {
   454                  "properties": {
   455                      "foo": { "const": "then" }
   456                  },
   457                  "required": ["foo"]
   458              },
   459              "then": {
   460                  "properties": {
   461                      "bar": { "type": "string" }
   462                  },
   463                  "required": ["bar"]
   464              },
   465              "else": {
   466                  "properties": {
   467                      "baz": { "type": "string" }
   468                  },
   469                  "required": ["baz"]
   470              },
   471              "unevaluatedProperties": false
   472          },
   473          "tests": [
   474              {
   475                  "description": "when if is true and has no unevaluated properties",
   476                  "data": {
   477                      "foo": "then",
   478                      "bar": "bar"
   479                  },
   480                  "valid": true
   481              },
   482              {
   483                  "description": "when if is true and has unevaluated properties",
   484                  "data": {
   485                      "foo": "then",
   486                      "bar": "bar",
   487                      "baz": "baz"
   488                  },
   489                  "valid": false
   490              },
   491              {
   492                  "description": "when if is false and has no unevaluated properties",
   493                  "data": {
   494                      "baz": "baz"
   495                  },
   496                  "valid": true
   497              },
   498              {
   499                  "description": "when if is false and has unevaluated properties",
   500                  "data": {
   501                      "foo": "else",
   502                      "baz": "baz"
   503                  },
   504                  "valid": false
   505              }
   506          ]
   507      },
   508      {
   509          "description": "unevaluatedProperties with if/then/else, then not defined",
   510          "schema": {
   511              "$schema": "https://json-schema.org/draft/2020-12/schema",
   512              "type": "object",
   513              "if": {
   514                  "properties": {
   515                      "foo": { "const": "then" }
   516                  },
   517                  "required": ["foo"]
   518              },
   519              "else": {
   520                  "properties": {
   521                      "baz": { "type": "string" }
   522                  },
   523                  "required": ["baz"]
   524              },
   525              "unevaluatedProperties": false
   526          },
   527          "tests": [
   528              {
   529                  "description": "when if is true and has no unevaluated properties",
   530                  "data": {
   531                      "foo": "then",
   532                      "bar": "bar"
   533                  },
   534                  "valid": false
   535              },
   536              {
   537                  "description": "when if is true and has unevaluated properties",
   538                  "data": {
   539                      "foo": "then",
   540                      "bar": "bar",
   541                      "baz": "baz"
   542                  },
   543                  "valid": false
   544              },
   545              {
   546                  "description": "when if is false and has no unevaluated properties",
   547                  "data": {
   548                      "baz": "baz"
   549                  },
   550                  "valid": true
   551              },
   552              {
   553                  "description": "when if is false and has unevaluated properties",
   554                  "data": {
   555                      "foo": "else",
   556                      "baz": "baz"
   557                  },
   558                  "valid": false
   559              }
   560          ]
   561      },
   562      {
   563          "description": "unevaluatedProperties with if/then/else, else not defined",
   564          "schema": {
   565              "$schema": "https://json-schema.org/draft/2020-12/schema",
   566              "type": "object",
   567              "if": {
   568                  "properties": {
   569                      "foo": { "const": "then" }
   570                  },
   571                  "required": ["foo"]
   572              },
   573              "then": {
   574                  "properties": {
   575                      "bar": { "type": "string" }
   576                  },
   577                  "required": ["bar"]
   578              },
   579              "unevaluatedProperties": false
   580          },
   581          "tests": [
   582              {
   583                  "description": "when if is true and has no unevaluated properties",
   584                  "data": {
   585                      "foo": "then",
   586                      "bar": "bar"
   587                  },
   588                  "valid": true
   589              },
   590              {
   591                  "description": "when if is true and has unevaluated properties",
   592                  "data": {
   593                      "foo": "then",
   594                      "bar": "bar",
   595                      "baz": "baz"
   596                  },
   597                  "valid": false
   598              },
   599              {
   600                  "description": "when if is false and has no unevaluated properties",
   601                  "data": {
   602                      "baz": "baz"
   603                  },
   604                  "valid": false
   605              },
   606              {
   607                  "description": "when if is false and has unevaluated properties",
   608                  "data": {
   609                      "foo": "else",
   610                      "baz": "baz"
   611                  },
   612                  "valid": false
   613              }
   614          ]
   615      },
   616      {
   617          "description": "unevaluatedProperties with dependentSchemas",
   618          "schema": {
   619              "$schema": "https://json-schema.org/draft/2020-12/schema",
   620              "type": "object",
   621              "properties": {
   622                  "foo": { "type": "string" }
   623              },
   624              "dependentSchemas": {
   625                  "foo": {
   626                      "properties": {
   627                          "bar": { "const": "bar" }
   628                      },
   629                      "required": ["bar"]
   630                  }
   631              },
   632              "unevaluatedProperties": false
   633          },
   634          "tests": [
   635              {
   636                  "description": "with no unevaluated properties",
   637                  "data": {
   638                      "foo": "foo",
   639                      "bar": "bar"
   640                  },
   641                  "valid": true
   642              },
   643              {
   644                  "description": "with unevaluated properties",
   645                  "data": {
   646                      "bar": "bar"
   647                  },
   648                  "valid": false
   649              }
   650          ]
   651      },
   652      {
   653          "description": "unevaluatedProperties with boolean schemas",
   654          "schema": {
   655              "$schema": "https://json-schema.org/draft/2020-12/schema",
   656              "type": "object",
   657              "properties": {
   658                  "foo": { "type": "string" }
   659              },
   660              "allOf": [true],
   661              "unevaluatedProperties": false
   662          },
   663          "tests": [
   664              {
   665                  "description": "with no unevaluated properties",
   666                  "data": {
   667                      "foo": "foo"
   668                  },
   669                  "valid": true
   670              },
   671              {
   672                  "description": "with unevaluated properties",
   673                  "data": {
   674                      "bar": "bar"
   675                  },
   676                  "valid": false
   677              }
   678          ]
   679      },
   680      {
   681          "description": "unevaluatedProperties with $ref",
   682          "schema": {
   683              "$schema": "https://json-schema.org/draft/2020-12/schema",
   684              "type": "object",
   685              "$ref": "#/$defs/bar",
   686              "properties": {
   687                  "foo": { "type": "string" }
   688              },
   689              "unevaluatedProperties": false,
   690              "$defs": {
   691                  "bar": {
   692                      "properties": {
   693                          "bar": { "type": "string" }
   694                      }
   695                  }
   696              }
   697          },
   698          "tests": [
   699              {
   700                  "description": "with no unevaluated properties",
   701                  "data": {
   702                      "foo": "foo",
   703                      "bar": "bar"
   704                  },
   705                  "valid": true
   706              },
   707              {
   708                  "description": "with unevaluated properties",
   709                  "data": {
   710                      "foo": "foo",
   711                      "bar": "bar",
   712                      "baz": "baz"
   713                  },
   714                  "valid": false
   715              }
   716          ]
   717      },
   718      {
   719          "description": "unevaluatedProperties before $ref",
   720          "schema": {
   721              "$schema": "https://json-schema.org/draft/2020-12/schema",
   722              "type": "object",
   723              "unevaluatedProperties": false,
   724              "properties": {
   725                  "foo": { "type": "string" }
   726              },
   727              "$ref": "#/$defs/bar",
   728              "$defs": {
   729                  "bar": {
   730                      "properties": {
   731                          "bar": { "type": "string" }
   732                      }
   733                  }
   734              }
   735          },
   736          "tests": [
   737              {
   738                  "description": "with no unevaluated properties",
   739                  "data": {
   740                      "foo": "foo",
   741                      "bar": "bar"
   742                  },
   743                  "valid": true
   744              },
   745              {
   746                  "description": "with unevaluated properties",
   747                  "data": {
   748                      "foo": "foo",
   749                      "bar": "bar",
   750                      "baz": "baz"
   751                  },
   752                  "valid": false
   753              }
   754          ]
   755      },
   756      {
   757          "description": "unevaluatedProperties with $dynamicRef",
   758          "schema": {
   759              "$schema": "https://json-schema.org/draft/2020-12/schema",
   760              "$id": "https://example.com/unevaluated-properties-with-dynamic-ref/derived",
   761  
   762              "$ref": "./baseSchema",
   763  
   764              "$defs": {
   765                  "derived": {
   766                      "$dynamicAnchor": "addons",
   767                      "properties": {
   768                          "bar": { "type": "string" }
   769                      }
   770                  },
   771                  "baseSchema": {
   772                      "$id": "./baseSchema",
   773  
   774                      "$comment": "unevaluatedProperties comes first so it's more likely to catch bugs with implementations that are sensitive to keyword ordering",
   775                      "unevaluatedProperties": false,
   776                      "type": "object",
   777                      "properties": {
   778                          "foo": { "type": "string" }
   779                      },
   780                      "$dynamicRef": "#addons",
   781  
   782                      "$defs": {
   783                          "defaultAddons": {
   784                              "$comment": "Needed to satisfy the bookending requirement",
   785                              "$dynamicAnchor": "addons"
   786                          }
   787                      }
   788                  }
   789              }
   790          },
   791          "tests": [
   792              {
   793                  "description": "with no unevaluated properties",
   794                  "data": {
   795                      "foo": "foo",
   796                      "bar": "bar"
   797                  },
   798                  "valid": true
   799              },
   800              {
   801                  "description": "with unevaluated properties",
   802                  "data": {
   803                      "foo": "foo",
   804                      "bar": "bar",
   805                      "baz": "baz"
   806                  },
   807                  "valid": false
   808              }
   809          ]
   810      },
   811      {
   812          "description": "unevaluatedProperties can't see inside cousins",
   813          "schema": {
   814              "$schema": "https://json-schema.org/draft/2020-12/schema",
   815              "allOf": [
   816                  {
   817                      "properties": {
   818                          "foo": true
   819                      }
   820                  },
   821                  {
   822                      "unevaluatedProperties": false
   823                  }
   824              ]
   825          },
   826          "tests": [
   827              {
   828                  "description": "always fails",
   829                  "data": {
   830                      "foo": 1
   831                  },
   832                  "valid": false
   833              }
   834          ]
   835      },
   836      {
   837          "description": "unevaluatedProperties can't see inside cousins (reverse order)",
   838          "schema": {
   839              "$schema": "https://json-schema.org/draft/2020-12/schema",
   840              "allOf": [
   841                  {
   842                      "unevaluatedProperties": false
   843                  },
   844                  {
   845                      "properties": {
   846                          "foo": true
   847                      }
   848                  }
   849              ]
   850          },
   851          "tests": [
   852              {
   853                  "description": "always fails",
   854                  "data": {
   855                      "foo": 1
   856                  },
   857                  "valid": false
   858              }
   859          ]
   860      },
   861      {
   862          "description": "nested unevaluatedProperties, outer false, inner true, properties outside",
   863          "schema": {
   864              "$schema": "https://json-schema.org/draft/2020-12/schema",
   865              "type": "object",
   866              "properties": {
   867                  "foo": { "type": "string" }
   868              },
   869              "allOf": [
   870                  {
   871                      "unevaluatedProperties": true
   872                  }
   873              ],
   874              "unevaluatedProperties": false
   875          },
   876          "tests": [
   877              {
   878                  "description": "with no nested unevaluated properties",
   879                  "data": {
   880                      "foo": "foo"
   881                  },
   882                  "valid": true
   883              },
   884              {
   885                  "description": "with nested unevaluated properties",
   886                  "data": {
   887                      "foo": "foo",
   888                      "bar": "bar"
   889                  },
   890                  "valid": true
   891              }
   892          ]
   893      },
   894      {
   895          "description": "nested unevaluatedProperties, outer false, inner true, properties inside",
   896          "schema": {
   897              "$schema": "https://json-schema.org/draft/2020-12/schema",
   898              "type": "object",
   899              "allOf": [
   900                  {
   901                      "properties": {
   902                          "foo": { "type": "string" }
   903                      },
   904                      "unevaluatedProperties": true
   905                  }
   906              ],
   907              "unevaluatedProperties": false
   908          },
   909          "tests": [
   910              {
   911                  "description": "with no nested unevaluated properties",
   912                  "data": {
   913                      "foo": "foo"
   914                  },
   915                  "valid": true
   916              },
   917              {
   918                  "description": "with nested unevaluated properties",
   919                  "data": {
   920                      "foo": "foo",
   921                      "bar": "bar"
   922                  },
   923                  "valid": true
   924              }
   925          ]
   926      },
   927      {
   928          "description": "nested unevaluatedProperties, outer true, inner false, properties outside",
   929          "schema": {
   930              "$schema": "https://json-schema.org/draft/2020-12/schema",
   931              "type": "object",
   932              "properties": {
   933                  "foo": { "type": "string" }
   934              },
   935              "allOf": [
   936                  {
   937                      "unevaluatedProperties": false
   938                  }
   939              ],
   940              "unevaluatedProperties": true
   941          },
   942          "tests": [
   943              {
   944                  "description": "with no nested unevaluated properties",
   945                  "data": {
   946                      "foo": "foo"
   947                  },
   948                  "valid": false
   949              },
   950              {
   951                  "description": "with nested unevaluated properties",
   952                  "data": {
   953                      "foo": "foo",
   954                      "bar": "bar"
   955                  },
   956                  "valid": false
   957              }
   958          ]
   959      },
   960      {
   961          "description": "nested unevaluatedProperties, outer true, inner false, properties inside",
   962          "schema": {
   963              "$schema": "https://json-schema.org/draft/2020-12/schema",
   964              "type": "object",
   965              "allOf": [
   966                  {
   967                      "properties": {
   968                          "foo": { "type": "string" }
   969                      },
   970                      "unevaluatedProperties": false
   971                  }
   972              ],
   973              "unevaluatedProperties": true
   974          },
   975          "tests": [
   976              {
   977                  "description": "with no nested unevaluated properties",
   978                  "data": {
   979                      "foo": "foo"
   980                  },
   981                  "valid": true
   982              },
   983              {
   984                  "description": "with nested unevaluated properties",
   985                  "data": {
   986                      "foo": "foo",
   987                      "bar": "bar"
   988                  },
   989                  "valid": false
   990              }
   991          ]
   992      },
   993      {
   994          "description": "cousin unevaluatedProperties, true and false, true with properties",
   995          "schema": {
   996              "$schema": "https://json-schema.org/draft/2020-12/schema",
   997              "type": "object",
   998              "allOf": [
   999                  {
  1000                      "properties": {
  1001                          "foo": { "type": "string" }
  1002                      },
  1003                      "unevaluatedProperties": true
  1004                  },
  1005                  {
  1006                      "unevaluatedProperties": false
  1007                  }
  1008              ]
  1009          },
  1010          "tests": [
  1011              {
  1012                  "description": "with no nested unevaluated properties",
  1013                  "data": {
  1014                      "foo": "foo"
  1015                  },
  1016                  "valid": false
  1017              },
  1018              {
  1019                  "description": "with nested unevaluated properties",
  1020                  "data": {
  1021                      "foo": "foo",
  1022                      "bar": "bar"
  1023                  },
  1024                  "valid": false
  1025              }
  1026          ]
  1027      },
  1028      {
  1029          "description": "cousin unevaluatedProperties, true and false, false with properties",
  1030          "schema": {
  1031              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1032              "type": "object",
  1033              "allOf": [
  1034                  {
  1035                      "unevaluatedProperties": true
  1036                  },
  1037                  {
  1038                      "properties": {
  1039                          "foo": { "type": "string" }
  1040                      },
  1041                      "unevaluatedProperties": false
  1042                  }
  1043              ]
  1044          },
  1045          "tests": [
  1046              {
  1047                  "description": "with no nested unevaluated properties",
  1048                  "data": {
  1049                      "foo": "foo"
  1050                  },
  1051                  "valid": true
  1052              },
  1053              {
  1054                  "description": "with nested unevaluated properties",
  1055                  "data": {
  1056                      "foo": "foo",
  1057                      "bar": "bar"
  1058                  },
  1059                  "valid": false
  1060              }
  1061          ]
  1062      },
  1063      {
  1064          "description": "property is evaluated in an uncle schema to unevaluatedProperties",
  1065          "comment": "see https://stackoverflow.com/questions/66936884/deeply-nested-unevaluatedproperties-and-their-expectations",
  1066          "schema": {
  1067              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1068              "type": "object",
  1069              "properties": {
  1070                  "foo": {
  1071                      "type": "object",
  1072                      "properties": {
  1073                          "bar": {
  1074                              "type": "string"
  1075                          }
  1076                      },
  1077                      "unevaluatedProperties": false
  1078                    }
  1079              },
  1080              "anyOf": [
  1081                  {
  1082                      "properties": {
  1083                          "foo": {
  1084                              "properties": {
  1085                                  "faz": {
  1086                                      "type": "string"
  1087                                  }
  1088                              }
  1089                          }
  1090                      }
  1091                  }
  1092              ]
  1093          },
  1094          "tests": [
  1095              {
  1096                  "description": "no extra properties",
  1097                  "data": {
  1098                      "foo": {
  1099                          "bar": "test"
  1100                      }
  1101                  },
  1102                  "valid": true
  1103              },
  1104              {
  1105                  "description": "uncle keyword evaluation is not significant",
  1106                  "data": {
  1107                      "foo": {
  1108                          "bar": "test",
  1109                          "faz": "test"
  1110                      }
  1111                  },
  1112                  "valid": false
  1113              }
  1114          ]
  1115      },
  1116      {
  1117          "description": "in-place applicator siblings, allOf has unevaluated",
  1118          "schema": {
  1119              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1120              "type": "object",
  1121              "allOf": [
  1122                  {
  1123                      "properties": {
  1124                          "foo": true
  1125                      },
  1126                      "unevaluatedProperties": false
  1127                  }
  1128              ],
  1129              "anyOf": [
  1130                  {
  1131                      "properties": {
  1132                          "bar": true
  1133                      }
  1134                  }
  1135              ]
  1136          },
  1137          "tests": [
  1138              {
  1139                  "description": "base case: both properties present",
  1140                  "data": {
  1141                      "foo": 1,
  1142                      "bar": 1
  1143                  },
  1144                  "valid": false
  1145              },
  1146              {
  1147                  "description": "in place applicator siblings, bar is missing",
  1148                  "data": {
  1149                      "foo": 1
  1150                  },
  1151                  "valid": true
  1152              },
  1153              {
  1154                  "description": "in place applicator siblings, foo is missing",
  1155                  "data": {
  1156                      "bar": 1
  1157                  },
  1158                  "valid": false
  1159              }
  1160          ]
  1161      },
  1162      {
  1163          "description": "in-place applicator siblings, anyOf has unevaluated",
  1164          "schema": {
  1165              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1166              "type": "object",
  1167              "allOf": [
  1168                  {
  1169                      "properties": {
  1170                          "foo": true
  1171                      }
  1172                  }
  1173              ],
  1174              "anyOf": [
  1175                  {
  1176                      "properties": {
  1177                          "bar": true
  1178                      },
  1179                      "unevaluatedProperties": false
  1180                  }
  1181              ]
  1182          },
  1183          "tests": [
  1184              {
  1185                  "description": "base case: both properties present",
  1186                  "data": {
  1187                      "foo": 1,
  1188                      "bar": 1
  1189                  },
  1190                  "valid": false
  1191              },
  1192              {
  1193                  "description": "in place applicator siblings, bar is missing",
  1194                  "data": {
  1195                      "foo": 1
  1196                  },
  1197                  "valid": false
  1198              },
  1199              {
  1200                  "description": "in place applicator siblings, foo is missing",
  1201                  "data": {
  1202                      "bar": 1
  1203                  },
  1204                  "valid": true
  1205              }
  1206          ]
  1207      },
  1208      {
  1209          "description": "unevaluatedProperties + single cyclic ref",
  1210          "schema": {
  1211              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1212              "type": "object",
  1213              "properties": {
  1214                  "x": { "$ref": "#" }
  1215              },
  1216              "unevaluatedProperties": false
  1217          },
  1218          "tests": [
  1219              {
  1220                  "description": "Empty is valid",
  1221                  "data": {},
  1222                  "valid": true
  1223              },
  1224              {
  1225                  "description": "Single is valid",
  1226                  "data": { "x": {} },
  1227                  "valid": true
  1228              },
  1229              {
  1230                  "description": "Unevaluated on 1st level is invalid",
  1231                  "data": { "x": {}, "y": {} },
  1232                  "valid": false
  1233              },
  1234              {
  1235                  "description": "Nested is valid",
  1236                  "data": { "x": { "x": {} } },
  1237                  "valid": true
  1238              },
  1239              {
  1240                  "description": "Unevaluated on 2nd level is invalid",
  1241                  "data": { "x": { "x": {}, "y": {} } },
  1242                  "valid": false
  1243              },
  1244              {
  1245                  "description": "Deep nested is valid",
  1246                  "data": { "x": { "x": { "x": {} } } },
  1247                  "valid": true
  1248              },
  1249              {
  1250                  "description": "Unevaluated on 3rd level is invalid",
  1251                  "data": { "x": { "x": { "x": {}, "y": {} } } },
  1252                  "valid": false
  1253              }
  1254          ]
  1255      },
  1256      {
  1257          "description": "unevaluatedProperties + ref inside allOf / oneOf",
  1258          "schema": {
  1259              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1260              "$defs": {
  1261                  "one": {
  1262                      "properties": { "a": true }
  1263                  },
  1264                  "two": {
  1265                      "required": ["x"],
  1266                      "properties": { "x": true }
  1267                  }
  1268              },
  1269              "allOf": [
  1270                  { "$ref": "#/$defs/one" },
  1271                  { "properties": { "b": true } },
  1272                  {
  1273                      "oneOf": [
  1274                          { "$ref": "#/$defs/two" },
  1275                          {
  1276                              "required": ["y"],
  1277                              "properties": { "y": true }
  1278                          }
  1279                      ]
  1280                  }
  1281              ],
  1282              "unevaluatedProperties": false
  1283          },
  1284          "tests": [
  1285              {
  1286                  "description": "Empty is invalid (no x or y)",
  1287                  "data": {},
  1288                  "valid": false
  1289              },
  1290              {
  1291                  "description": "a and b are invalid (no x or y)",
  1292                  "data": { "a": 1, "b": 1 },
  1293                  "valid": false
  1294              },
  1295              {
  1296                  "description": "x and y are invalid",
  1297                  "data": { "x": 1, "y": 1 },
  1298                  "valid": false
  1299              },
  1300              {
  1301                  "description": "a and x are valid",
  1302                  "data": { "a": 1, "x": 1 },
  1303                  "valid": true
  1304              },
  1305              {
  1306                  "description": "a and y are valid",
  1307                  "data": { "a": 1, "y": 1 },
  1308                  "valid": true
  1309              },
  1310              {
  1311                  "description": "a and b and x are valid",
  1312                  "data": { "a": 1, "b": 1, "x": 1 },
  1313                  "valid": true
  1314              },
  1315              {
  1316                  "description": "a and b and y are valid",
  1317                  "data": { "a": 1, "b": 1, "y": 1 },
  1318                  "valid": true
  1319              },
  1320              {
  1321                  "description": "a and b and x and y are invalid",
  1322                  "data": { "a": 1, "b": 1, "x": 1, "y": 1 },
  1323                  "valid": false
  1324              }
  1325          ]
  1326      },
  1327      {
  1328          "description": "dynamic evalation inside nested refs",
  1329          "schema": {
  1330              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1331              "$defs": {
  1332                  "one": {
  1333                      "oneOf": [
  1334                          { "$ref": "#/$defs/two" },
  1335                          { "required": ["b"], "properties": { "b": true } },
  1336                          { "required": ["xx"], "patternProperties": { "x": true } },
  1337                          { "required": ["all"], "unevaluatedProperties": true }
  1338                      ]
  1339                  },
  1340                  "two": {
  1341                      "oneOf": [
  1342                          { "required": ["c"], "properties": { "c": true } },
  1343                          { "required": ["d"], "properties": { "d": true } }
  1344                      ]
  1345                  }
  1346              },
  1347              "oneOf": [
  1348                  { "$ref": "#/$defs/one" },
  1349                  { "required": ["a"], "properties": { "a": true } }
  1350              ],
  1351              "unevaluatedProperties": false
  1352          },
  1353          "tests": [
  1354              {
  1355                  "description": "Empty is invalid",
  1356                  "data": {},
  1357                  "valid": false
  1358              },
  1359              {
  1360                  "description": "a is valid",
  1361                  "data": { "a": 1 },
  1362                  "valid": true
  1363              },
  1364              {
  1365                  "description": "b is valid",
  1366                  "data": { "b": 1 },
  1367                  "valid": true
  1368              },
  1369              {
  1370                  "description": "c is valid",
  1371                  "data": { "c": 1 },
  1372                  "valid": true
  1373              },
  1374              {
  1375                  "description": "d is valid",
  1376                  "data": { "d": 1 },
  1377                  "valid": true
  1378              },
  1379              {
  1380                  "description": "a + b is invalid",
  1381                  "data": { "a": 1, "b": 1 },
  1382                  "valid": false
  1383              },
  1384              {
  1385                  "description": "a + c is invalid",
  1386                  "data": { "a": 1, "c": 1 },
  1387                  "valid": false
  1388              },
  1389              {
  1390                  "description": "a + d is invalid",
  1391                  "data": { "a": 1, "d": 1 },
  1392                  "valid": false
  1393              },
  1394              {
  1395                  "description": "b + c is invalid",
  1396                  "data": { "b": 1, "c": 1 },
  1397                  "valid": false
  1398              },
  1399              {
  1400                  "description": "b + d is invalid",
  1401                  "data": { "b": 1, "d": 1 },
  1402                  "valid": false
  1403              },
  1404              {
  1405                  "description": "c + d is invalid",
  1406                  "data": { "c": 1, "d": 1 },
  1407                  "valid": false
  1408              },
  1409              {
  1410                  "description": "xx is valid",
  1411                  "data": { "xx": 1 },
  1412                  "valid": true
  1413              },
  1414              {
  1415                  "description": "xx + foox is valid",
  1416                  "data": { "xx": 1, "foox": 1 },
  1417                  "valid": true
  1418              },
  1419              {
  1420                  "description": "xx + foo is invalid",
  1421                  "data": { "xx": 1, "foo": 1 },
  1422                  "valid": false
  1423              },
  1424              {
  1425                  "description": "xx + a is invalid",
  1426                  "data": { "xx": 1, "a": 1 },
  1427                  "valid": false
  1428              },
  1429              {
  1430                  "description": "xx + b is invalid",
  1431                  "data": { "xx": 1, "b": 1 },
  1432                  "valid": false
  1433              },
  1434              {
  1435                  "description": "xx + c is invalid",
  1436                  "data": { "xx": 1, "c": 1 },
  1437                  "valid": false
  1438              },
  1439              {
  1440                  "description": "xx + d is invalid",
  1441                  "data": { "xx": 1, "d": 1 },
  1442                  "valid": false
  1443              },
  1444              {
  1445                  "description": "all is valid",
  1446                  "data": { "all": 1 },
  1447                  "valid": true
  1448              },
  1449              {
  1450                  "description": "all + foo is valid",
  1451                  "data": { "all": 1, "foo": 1 },
  1452                  "valid": true
  1453              },
  1454              {
  1455                  "description": "all + a is invalid",
  1456                  "data": { "all": 1, "a": 1 },
  1457                  "valid": false
  1458              }
  1459          ]
  1460      },
  1461      {
  1462          "description": "non-object instances are valid",
  1463          "schema": {
  1464              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1465              "unevaluatedProperties": false
  1466          },
  1467          "tests": [
  1468              {
  1469                  "description": "ignores booleans",
  1470                  "data": true,
  1471                  "valid": true
  1472              },
  1473              {
  1474                  "description": "ignores integers",
  1475                  "data": 123,
  1476                  "valid": true
  1477              },
  1478              {
  1479                  "description": "ignores floats",
  1480                  "data": 1.0,
  1481                  "valid": true
  1482              },
  1483              {
  1484                  "description": "ignores arrays",
  1485                  "data": [],
  1486                  "valid": true
  1487              },
  1488              {
  1489                  "description": "ignores strings",
  1490                  "data": "foo",
  1491                  "valid": true
  1492              },
  1493              {
  1494                  "description": "ignores null",
  1495                  "data": null,
  1496                  "valid": true
  1497              }
  1498          ]
  1499      },
  1500      {
  1501          "description": "unevaluatedProperties with null valued instance properties",
  1502          "schema": {
  1503              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1504              "unevaluatedProperties": {
  1505                  "type": "null"
  1506              }
  1507          },
  1508          "tests": [
  1509              {
  1510                  "description": "allows null valued properties",
  1511                  "data": {"foo": null},
  1512                  "valid": true
  1513              }
  1514          ]
  1515      },
  1516      {
  1517          "description": "unevaluatedProperties not affected by propertyNames",
  1518          "schema": {
  1519              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1520              "propertyNames": {"maxLength": 1},
  1521              "unevaluatedProperties": {
  1522                  "type": "number"
  1523              }
  1524          },
  1525          "tests": [
  1526              {
  1527                  "description": "allows only number properties",
  1528                  "data": {"a": 1},
  1529                  "valid": true
  1530              },
  1531              {
  1532                  "description": "string property is invalid",
  1533                  "data": {"a": "b"},
  1534                  "valid": false
  1535              }
  1536          ]
  1537      },
  1538      {
  1539          "description": "unevaluatedProperties can see annotations from if without then and else",
  1540          "schema": {
  1541              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1542              "if": {
  1543                  "patternProperties": {
  1544                      "foo": {
  1545                          "type": "string"
  1546                      }
  1547                  }
  1548              },
  1549              "unevaluatedProperties": false
  1550          },
  1551          "tests": [
  1552              {
  1553                  "description": "valid in case if is evaluated",
  1554                  "data": {
  1555                      "foo": "a"
  1556                  },
  1557                  "valid": true
  1558              },
  1559              {
  1560                  "description": "invalid in case if is evaluated",
  1561                  "data": {
  1562                      "bar": "a"
  1563                  },
  1564                  "valid": false
  1565              }
  1566          ]
  1567      },
  1568      {
  1569          "description": "dependentSchemas with unevaluatedProperties",
  1570          "schema": {
  1571              "$schema": "https://json-schema.org/draft/2020-12/schema",
  1572              "properties": {"foo2": {}},
  1573              "dependentSchemas": {
  1574                  "foo" : {},
  1575                  "foo2": {
  1576                      "properties": {
  1577                          "bar":{}
  1578                      }
  1579                  }
  1580              },
  1581              "unevaluatedProperties": false
  1582          },
  1583          "tests": [
  1584              {
  1585                  "description": "unevaluatedProperties doesn't consider dependentSchemas",
  1586                  "data": {"foo": ""},
  1587                  "valid": false
  1588              },
  1589              {
  1590                  "description": "unevaluatedProperties doesn't see bar when foo2 is absent",
  1591                  "data": {"bar": ""},
  1592                  "valid": false
  1593              },
  1594              {
  1595                  "description": "unevaluatedProperties sees bar when foo2 is present",
  1596                  "data": { "foo2": "", "bar": ""},
  1597                  "valid": true
  1598              }
  1599          ]
  1600      }
  1601  ]