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

     1  [
     2      {
     3          "description": "unevaluatedProperties true",
     4          "schema": {
     5              "$schema": "https://json-schema.org/draft/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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/2019-09/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 $recursiveRef",
   758          "schema": {
   759              "$schema": "https://json-schema.org/draft/2019-09/schema",
   760              "$id": "https://example.com/unevaluated-properties-with-recursive-ref/extended-tree",
   761  
   762              "$recursiveAnchor": true,
   763  
   764              "$ref": "./tree",
   765              "properties": {
   766                  "name": { "type": "string" }
   767              },
   768  
   769              "$defs": {
   770                  "tree": {
   771                      "$id": "./tree",
   772                      "$recursiveAnchor": true,
   773  
   774                      "type": "object",
   775                      "properties": {
   776                          "node": true,
   777                          "branches": {
   778                              "$comment": "unevaluatedProperties comes first so it's more likely to bugs errors with implementations that are sensitive to keyword ordering",
   779                              "unevaluatedProperties": false,
   780                              "$recursiveRef": "#"
   781                          }
   782                      },
   783                      "required": ["node"]
   784                  }
   785              }
   786          },
   787          "tests": [
   788              {
   789                  "description": "with no unevaluated properties",
   790                  "data": {
   791                      "name": "a",
   792                      "node": 1,
   793                      "branches": {
   794                        "name": "b",
   795                        "node": 2
   796                      }
   797                  },
   798                  "valid": true
   799              },
   800              {
   801                  "description": "with unevaluated properties",
   802                  "data": {
   803                      "name": "a",
   804                      "node": 1,
   805                      "branches": {
   806                        "foo": "b",
   807                        "node": 2
   808                      }
   809                  },
   810                  "valid": false
   811              }
   812          ]
   813      },
   814      {
   815          "description": "unevaluatedProperties can't see inside cousins",
   816          "schema": {
   817              "$schema": "https://json-schema.org/draft/2019-09/schema",
   818              "allOf": [
   819                  {
   820                      "properties": {
   821                          "foo": true
   822                      }
   823                  },
   824                  {
   825                      "unevaluatedProperties": false
   826                  }
   827              ]
   828          },
   829          "tests": [
   830              {
   831                  "description": "always fails",
   832                  "data": {
   833                      "foo": 1
   834                  },
   835                  "valid": false
   836              }
   837          ]
   838      },
   839      {
   840          "description": "unevaluatedProperties can't see inside cousins (reverse order)",
   841          "schema": {
   842              "$schema": "https://json-schema.org/draft/2019-09/schema",
   843              "allOf": [
   844                  {
   845                      "unevaluatedProperties": false
   846                  },
   847                  {
   848                      "properties": {
   849                          "foo": true
   850                      }
   851                  }
   852              ]
   853          },
   854          "tests": [
   855              {
   856                  "description": "always fails",
   857                  "data": {
   858                      "foo": 1
   859                  },
   860                  "valid": false
   861              }
   862          ]
   863      },
   864      {
   865          "description": "nested unevaluatedProperties, outer false, inner true, properties outside",
   866          "schema": {
   867              "$schema": "https://json-schema.org/draft/2019-09/schema",
   868              "type": "object",
   869              "properties": {
   870                  "foo": { "type": "string" }
   871              },
   872              "allOf": [
   873                  {
   874                      "unevaluatedProperties": true
   875                  }
   876              ],
   877              "unevaluatedProperties": false
   878          },
   879          "tests": [
   880              {
   881                  "description": "with no nested unevaluated properties",
   882                  "data": {
   883                      "foo": "foo"
   884                  },
   885                  "valid": true
   886              },
   887              {
   888                  "description": "with nested unevaluated properties",
   889                  "data": {
   890                      "foo": "foo",
   891                      "bar": "bar"
   892                  },
   893                  "valid": true
   894              }
   895          ]
   896      },
   897      {
   898          "description": "nested unevaluatedProperties, outer false, inner true, properties inside",
   899          "schema": {
   900              "$schema": "https://json-schema.org/draft/2019-09/schema",
   901              "type": "object",
   902              "allOf": [
   903                  {
   904                      "properties": {
   905                          "foo": { "type": "string" }
   906                      },
   907                      "unevaluatedProperties": true
   908                  }
   909              ],
   910              "unevaluatedProperties": false
   911          },
   912          "tests": [
   913              {
   914                  "description": "with no nested unevaluated properties",
   915                  "data": {
   916                      "foo": "foo"
   917                  },
   918                  "valid": true
   919              },
   920              {
   921                  "description": "with nested unevaluated properties",
   922                  "data": {
   923                      "foo": "foo",
   924                      "bar": "bar"
   925                  },
   926                  "valid": true
   927              }
   928          ]
   929      },
   930      {
   931          "description": "nested unevaluatedProperties, outer true, inner false, properties outside",
   932          "schema": {
   933              "$schema": "https://json-schema.org/draft/2019-09/schema",
   934              "type": "object",
   935              "properties": {
   936                  "foo": { "type": "string" }
   937              },
   938              "allOf": [
   939                  {
   940                      "unevaluatedProperties": false
   941                  }
   942              ],
   943              "unevaluatedProperties": true
   944          },
   945          "tests": [
   946              {
   947                  "description": "with no nested unevaluated properties",
   948                  "data": {
   949                      "foo": "foo"
   950                  },
   951                  "valid": false
   952              },
   953              {
   954                  "description": "with nested unevaluated properties",
   955                  "data": {
   956                      "foo": "foo",
   957                      "bar": "bar"
   958                  },
   959                  "valid": false
   960              }
   961          ]
   962      },
   963      {
   964          "description": "nested unevaluatedProperties, outer true, inner false, properties inside",
   965          "schema": {
   966              "$schema": "https://json-schema.org/draft/2019-09/schema",
   967              "type": "object",
   968              "allOf": [
   969                  {
   970                      "properties": {
   971                          "foo": { "type": "string" }
   972                      },
   973                      "unevaluatedProperties": false
   974                  }
   975              ],
   976              "unevaluatedProperties": true
   977          },
   978          "tests": [
   979              {
   980                  "description": "with no nested unevaluated properties",
   981                  "data": {
   982                      "foo": "foo"
   983                  },
   984                  "valid": true
   985              },
   986              {
   987                  "description": "with nested unevaluated properties",
   988                  "data": {
   989                      "foo": "foo",
   990                      "bar": "bar"
   991                  },
   992                  "valid": false
   993              }
   994          ]
   995      },
   996      {
   997          "description": "cousin unevaluatedProperties, true and false, true with properties",
   998          "schema": {
   999              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1000              "type": "object",
  1001              "allOf": [
  1002                  {
  1003                      "properties": {
  1004                          "foo": { "type": "string" }
  1005                      },
  1006                      "unevaluatedProperties": true
  1007                  },
  1008                  {
  1009                      "unevaluatedProperties": false
  1010                  }
  1011              ]
  1012          },
  1013          "tests": [
  1014              {
  1015                  "description": "with no nested unevaluated properties",
  1016                  "data": {
  1017                      "foo": "foo"
  1018                  },
  1019                  "valid": false
  1020              },
  1021              {
  1022                  "description": "with nested unevaluated properties",
  1023                  "data": {
  1024                      "foo": "foo",
  1025                      "bar": "bar"
  1026                  },
  1027                  "valid": false
  1028              }
  1029          ]
  1030      },
  1031      {
  1032          "description": "cousin unevaluatedProperties, true and false, false with properties",
  1033          "schema": {
  1034              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1035              "type": "object",
  1036              "allOf": [
  1037                  {
  1038                      "unevaluatedProperties": true
  1039                  },
  1040                  {
  1041                      "properties": {
  1042                          "foo": { "type": "string" }
  1043                      },
  1044                      "unevaluatedProperties": false
  1045                  }
  1046              ]
  1047          },
  1048          "tests": [
  1049              {
  1050                  "description": "with no nested unevaluated properties",
  1051                  "data": {
  1052                      "foo": "foo"
  1053                  },
  1054                  "valid": true
  1055              },
  1056              {
  1057                  "description": "with nested unevaluated properties",
  1058                  "data": {
  1059                      "foo": "foo",
  1060                      "bar": "bar"
  1061                  },
  1062                  "valid": false
  1063              }
  1064          ]
  1065      },
  1066      {
  1067          "description": "property is evaluated in an uncle schema to unevaluatedProperties",
  1068          "comment": "see https://stackoverflow.com/questions/66936884/deeply-nested-unevaluatedproperties-and-their-expectations",
  1069          "schema": {
  1070              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1071              "type": "object",
  1072              "properties": {
  1073                  "foo": {
  1074                      "type": "object",
  1075                      "properties": {
  1076                          "bar": {
  1077                              "type": "string"
  1078                          }
  1079                      },
  1080                      "unevaluatedProperties": false
  1081                    }
  1082              },
  1083              "anyOf": [
  1084                  {
  1085                      "properties": {
  1086                          "foo": {
  1087                              "properties": {
  1088                                  "faz": {
  1089                                      "type": "string"
  1090                                  }
  1091                              }
  1092                          }
  1093                      }
  1094                  }
  1095              ]
  1096          },
  1097          "tests": [
  1098              {
  1099                  "description": "no extra properties",
  1100                  "data": {
  1101                      "foo": {
  1102                          "bar": "test"
  1103                      }
  1104                  },
  1105                  "valid": true
  1106              },
  1107              {
  1108                  "description": "uncle keyword evaluation is not significant",
  1109                  "data": {
  1110                      "foo": {
  1111                          "bar": "test",
  1112                          "faz": "test"
  1113                      }
  1114                  },
  1115                  "valid": false
  1116              }
  1117          ]
  1118      },
  1119      {
  1120          "description": "in-place applicator siblings, allOf has unevaluated",
  1121          "schema": {
  1122              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1123              "type": "object",
  1124              "allOf": [
  1125                  {
  1126                      "properties": {
  1127                          "foo": true
  1128                      },
  1129                      "unevaluatedProperties": false
  1130                  }
  1131              ],
  1132              "anyOf": [
  1133                  {
  1134                      "properties": {
  1135                          "bar": true
  1136                      }
  1137                  }
  1138              ]
  1139          },
  1140          "tests": [
  1141              {
  1142                  "description": "base case: both properties present",
  1143                  "data": {
  1144                      "foo": 1,
  1145                      "bar": 1
  1146                  },
  1147                  "valid": false
  1148              },
  1149              {
  1150                  "description": "in place applicator siblings, bar is missing",
  1151                  "data": {
  1152                      "foo": 1
  1153                  },
  1154                  "valid": true
  1155              },
  1156              {
  1157                  "description": "in place applicator siblings, foo is missing",
  1158                  "data": {
  1159                      "bar": 1
  1160                  },
  1161                  "valid": false
  1162              }
  1163          ]
  1164      },
  1165      {
  1166          "description": "in-place applicator siblings, anyOf has unevaluated",
  1167          "schema": {
  1168              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1169              "type": "object",
  1170              "allOf": [
  1171                  {
  1172                      "properties": {
  1173                          "foo": true
  1174                      }
  1175                  }
  1176              ],
  1177              "anyOf": [
  1178                  {
  1179                      "properties": {
  1180                          "bar": true
  1181                      },
  1182                      "unevaluatedProperties": false
  1183                  }
  1184              ]
  1185          },
  1186          "tests": [
  1187              {
  1188                  "description": "base case: both properties present",
  1189                  "data": {
  1190                      "foo": 1,
  1191                      "bar": 1
  1192                  },
  1193                  "valid": false
  1194              },
  1195              {
  1196                  "description": "in place applicator siblings, bar is missing",
  1197                  "data": {
  1198                      "foo": 1
  1199                  },
  1200                  "valid": false
  1201              },
  1202              {
  1203                  "description": "in place applicator siblings, foo is missing",
  1204                  "data": {
  1205                      "bar": 1
  1206                  },
  1207                  "valid": true
  1208              }
  1209          ]
  1210      },
  1211      {
  1212          "description": "unevaluatedProperties + single cyclic ref",
  1213          "schema": {
  1214              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1215              "type": "object",
  1216              "properties": {
  1217                  "x": { "$ref": "#" }
  1218              },
  1219              "unevaluatedProperties": false
  1220          },
  1221          "tests": [
  1222              {
  1223                  "description": "Empty is valid",
  1224                  "data": {},
  1225                  "valid": true
  1226              },
  1227              {
  1228                  "description": "Single is valid",
  1229                  "data": { "x": {} },
  1230                  "valid": true
  1231              },
  1232              {
  1233                  "description": "Unevaluated on 1st level is invalid",
  1234                  "data": { "x": {}, "y": {} },
  1235                  "valid": false
  1236              },
  1237              {
  1238                  "description": "Nested is valid",
  1239                  "data": { "x": { "x": {} } },
  1240                  "valid": true
  1241              },
  1242              {
  1243                  "description": "Unevaluated on 2nd level is invalid",
  1244                  "data": { "x": { "x": {}, "y": {} } },
  1245                  "valid": false
  1246              },
  1247              {
  1248                  "description": "Deep nested is valid",
  1249                  "data": { "x": { "x": { "x": {} } } },
  1250                  "valid": true
  1251              },
  1252              {
  1253                  "description": "Unevaluated on 3rd level is invalid",
  1254                  "data": { "x": { "x": { "x": {}, "y": {} } } },
  1255                  "valid": false
  1256              }
  1257          ]
  1258      },
  1259      {
  1260          "description": "unevaluatedProperties + ref inside allOf / oneOf",
  1261          "schema": {
  1262              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1263              "$defs": {
  1264                  "one": {
  1265                      "properties": { "a": true }
  1266                  },
  1267                  "two": {
  1268                      "required": ["x"],
  1269                      "properties": { "x": true }
  1270                  }
  1271              },
  1272              "allOf": [
  1273                  { "$ref": "#/$defs/one" },
  1274                  { "properties": { "b": true } },
  1275                  {
  1276                      "oneOf": [
  1277                          { "$ref": "#/$defs/two" },
  1278                          {
  1279                              "required": ["y"],
  1280                              "properties": { "y": true }
  1281                          }
  1282                      ]
  1283                  }
  1284              ],
  1285              "unevaluatedProperties": false
  1286          },
  1287          "tests": [
  1288              {
  1289                  "description": "Empty is invalid (no x or y)",
  1290                  "data": {},
  1291                  "valid": false
  1292              },
  1293              {
  1294                  "description": "a and b are invalid (no x or y)",
  1295                  "data": { "a": 1, "b": 1 },
  1296                  "valid": false
  1297              },
  1298              {
  1299                  "description": "x and y are invalid",
  1300                  "data": { "x": 1, "y": 1 },
  1301                  "valid": false
  1302              },
  1303              {
  1304                  "description": "a and x are valid",
  1305                  "data": { "a": 1, "x": 1 },
  1306                  "valid": true
  1307              },
  1308              {
  1309                  "description": "a and y are valid",
  1310                  "data": { "a": 1, "y": 1 },
  1311                  "valid": true
  1312              },
  1313              {
  1314                  "description": "a and b and x are valid",
  1315                  "data": { "a": 1, "b": 1, "x": 1 },
  1316                  "valid": true
  1317              },
  1318              {
  1319                  "description": "a and b and y are valid",
  1320                  "data": { "a": 1, "b": 1, "y": 1 },
  1321                  "valid": true
  1322              },
  1323              {
  1324                  "description": "a and b and x and y are invalid",
  1325                  "data": { "a": 1, "b": 1, "x": 1, "y": 1 },
  1326                  "valid": false
  1327              }
  1328          ]
  1329      },
  1330      {
  1331          "description": "dynamic evalation inside nested refs",
  1332          "schema": {
  1333              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1334              "$defs": {
  1335                  "one": {
  1336                      "oneOf": [
  1337                          { "$ref": "#/$defs/two" },
  1338                          { "required": ["b"], "properties": { "b": true } },
  1339                          { "required": ["xx"], "patternProperties": { "x": true } },
  1340                          { "required": ["all"], "unevaluatedProperties": true }
  1341                      ]
  1342                  },
  1343                  "two": {
  1344                      "oneOf": [
  1345                          { "required": ["c"], "properties": { "c": true } },
  1346                          { "required": ["d"], "properties": { "d": true } }
  1347                      ]
  1348                  }
  1349              },
  1350              "oneOf": [
  1351                  { "$ref": "#/$defs/one" },
  1352                  { "required": ["a"], "properties": { "a": true } }
  1353              ],
  1354              "unevaluatedProperties": false
  1355          },
  1356          "tests": [
  1357              {
  1358                  "description": "Empty is invalid",
  1359                  "data": {},
  1360                  "valid": false
  1361              },
  1362              {
  1363                  "description": "a is valid",
  1364                  "data": { "a": 1 },
  1365                  "valid": true
  1366              },
  1367              {
  1368                  "description": "b is valid",
  1369                  "data": { "b": 1 },
  1370                  "valid": true
  1371              },
  1372              {
  1373                  "description": "c is valid",
  1374                  "data": { "c": 1 },
  1375                  "valid": true
  1376              },
  1377              {
  1378                  "description": "d is valid",
  1379                  "data": { "d": 1 },
  1380                  "valid": true
  1381              },
  1382              {
  1383                  "description": "a + b is invalid",
  1384                  "data": { "a": 1, "b": 1 },
  1385                  "valid": false
  1386              },
  1387              {
  1388                  "description": "a + c is invalid",
  1389                  "data": { "a": 1, "c": 1 },
  1390                  "valid": false
  1391              },
  1392              {
  1393                  "description": "a + d is invalid",
  1394                  "data": { "a": 1, "d": 1 },
  1395                  "valid": false
  1396              },
  1397              {
  1398                  "description": "b + c is invalid",
  1399                  "data": { "b": 1, "c": 1 },
  1400                  "valid": false
  1401              },
  1402              {
  1403                  "description": "b + d is invalid",
  1404                  "data": { "b": 1, "d": 1 },
  1405                  "valid": false
  1406              },
  1407              {
  1408                  "description": "c + d is invalid",
  1409                  "data": { "c": 1, "d": 1 },
  1410                  "valid": false
  1411              },
  1412              {
  1413                  "description": "xx is valid",
  1414                  "data": { "xx": 1 },
  1415                  "valid": true
  1416              },
  1417              {
  1418                  "description": "xx + foox is valid",
  1419                  "data": { "xx": 1, "foox": 1 },
  1420                  "valid": true
  1421              },
  1422              {
  1423                  "description": "xx + foo is invalid",
  1424                  "data": { "xx": 1, "foo": 1 },
  1425                  "valid": false
  1426              },
  1427              {
  1428                  "description": "xx + a is invalid",
  1429                  "data": { "xx": 1, "a": 1 },
  1430                  "valid": false
  1431              },
  1432              {
  1433                  "description": "xx + b is invalid",
  1434                  "data": { "xx": 1, "b": 1 },
  1435                  "valid": false
  1436              },
  1437              {
  1438                  "description": "xx + c is invalid",
  1439                  "data": { "xx": 1, "c": 1 },
  1440                  "valid": false
  1441              },
  1442              {
  1443                  "description": "xx + d is invalid",
  1444                  "data": { "xx": 1, "d": 1 },
  1445                  "valid": false
  1446              },
  1447              {
  1448                  "description": "all is valid",
  1449                  "data": { "all": 1 },
  1450                  "valid": true
  1451              },
  1452              {
  1453                  "description": "all + foo is valid",
  1454                  "data": { "all": 1, "foo": 1 },
  1455                  "valid": true
  1456              },
  1457              {
  1458                  "description": "all + a is invalid",
  1459                  "data": { "all": 1, "a": 1 },
  1460                  "valid": false
  1461              }
  1462          ]
  1463      },
  1464      {
  1465          "description": "non-object instances are valid",
  1466          "schema": {
  1467              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1468              "unevaluatedProperties": false
  1469          },
  1470          "tests": [
  1471              {
  1472                  "description": "ignores booleans",
  1473                  "data": true,
  1474                  "valid": true
  1475              },
  1476              {
  1477                  "description": "ignores integers",
  1478                  "data": 123,
  1479                  "valid": true
  1480              },
  1481              {
  1482                  "description": "ignores floats",
  1483                  "data": 1.0,
  1484                  "valid": true
  1485              },
  1486              {
  1487                  "description": "ignores arrays",
  1488                  "data": [],
  1489                  "valid": true
  1490              },
  1491              {
  1492                  "description": "ignores strings",
  1493                  "data": "foo",
  1494                  "valid": true
  1495              },
  1496              {
  1497                  "description": "ignores null",
  1498                  "data": null,
  1499                  "valid": true
  1500              }
  1501          ]
  1502      },
  1503      {
  1504          "description": "unevaluatedProperties with null valued instance properties",
  1505          "schema": {
  1506              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1507              "unevaluatedProperties": {
  1508                  "type": "null"
  1509              }
  1510          },
  1511          "tests": [
  1512              {
  1513                  "description": "allows null valued properties",
  1514                  "data": {"foo": null},
  1515                  "valid": true
  1516              }
  1517          ]
  1518      },
  1519      {
  1520          "description": "unevaluatedProperties not affected by propertyNames",
  1521          "schema": {
  1522              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1523              "propertyNames": {"maxLength": 1},
  1524              "unevaluatedProperties": {
  1525                  "type": "number"
  1526              }
  1527          },
  1528          "tests": [
  1529              {
  1530                  "description": "allows only number properties",
  1531                  "data": {"a": 1},
  1532                  "valid": true
  1533              },
  1534              {
  1535                  "description": "string property is invalid",
  1536                  "data": {"a": "b"},
  1537                  "valid": false
  1538              }
  1539          ]
  1540      },
  1541      {
  1542          "description": "unevaluatedProperties can see annotations from if without then and else",
  1543          "schema": {
  1544              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1545              "if": {
  1546                  "patternProperties": {
  1547                      "foo": {
  1548                          "type": "string"
  1549                      }
  1550                  }
  1551              },
  1552              "unevaluatedProperties": false
  1553          },
  1554          "tests": [
  1555              {
  1556                  "description": "valid in case if is evaluated",
  1557                  "data": {
  1558                      "foo": "a"
  1559                  },
  1560                  "valid": true
  1561              },
  1562              {
  1563                  "description": "invalid in case if is evaluated",
  1564                  "data": {
  1565                      "bar": "a"
  1566                  },
  1567                  "valid": false
  1568              }
  1569          ]
  1570      },
  1571      {
  1572          "description": "dependentSchemas with unevaluatedProperties",
  1573          "schema": {
  1574              "$schema": "https://json-schema.org/draft/2019-09/schema",
  1575              "properties": {"foo2": {}},
  1576              "dependentSchemas": {
  1577                  "foo" : {},
  1578                  "foo2": {
  1579                      "properties": {
  1580                          "bar":{}
  1581                      }
  1582                  }
  1583              },
  1584              "unevaluatedProperties": false
  1585          },
  1586          "tests": [
  1587              {
  1588                  "description": "unevaluatedProperties doesn't consider dependentSchemas",
  1589                  "data": {"foo": ""},
  1590                  "valid": false
  1591              },
  1592              {
  1593                  "description": "unevaluatedProperties doesn't see bar when foo2 is absent",
  1594                  "data": {"bar": ""},
  1595                  "valid": false
  1596              },
  1597              {
  1598                  "description": "unevaluatedProperties sees bar when foo2 is present",
  1599                  "data": { "foo2": "", "bar": ""},
  1600                  "valid": true
  1601              }
  1602          ]
  1603      }
  1604  ]