Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
test_jsonschema_test_suite.py263 linesDownload Raw Back to tests
1"""2Test runner for the JSON Schema official test suite3 4Tests comprehensive correctness of each draft's validator.5 6See https://github.com/json-schema-org/JSON-Schema-Test-Suite for details.7"""8 9 10from jsonschema.tests._suite import Suite11import jsonschema12 13SUITE = Suite()14DRAFT3 = SUITE.version(name="draft3")15DRAFT4 = SUITE.version(name="draft4")16DRAFT6 = SUITE.version(name="draft6")17DRAFT7 = SUITE.version(name="draft7")18DRAFT201909 = SUITE.version(name="draft2019-09")19DRAFT202012 = SUITE.version(name="draft2020-12")20 21 22def skip(message, **kwargs):23    def skipper(test):24        if all(value == getattr(test, attr) for attr, value in kwargs.items()):25            return message26    return skipper27 28 29def ecmascript_regex(test):30    if test.subject == "ecmascript-regex":31        return "ECMA regex support will be added in #1142."32 33 34def missing_format(Validator):35    def missing_format(test):  # pragma: no cover36        schema = test.schema37        if (38            schema is True39            or schema is False40            or "format" not in schema41            or schema["format"] in Validator.FORMAT_CHECKER.checkers42            or test.valid43        ):44            return45 46        return f"Format checker {schema['format']!r} not found."47    return missing_format48 49 50def complex_email_validation(test):51    if test.subject != "email":52        return53 54    message = "Complex email validation is (intentionally) unsupported."55    return skip(56        message=message,57        description="an invalid domain",58    )(test) or skip(59        message=message,60        description="an invalid IPv4-address-literal",61    )(test) or skip(62        message=message,63        description="dot after local part is not valid",64    )(test) or skip(65        message=message,66        description="dot before local part is not valid",67    )(test) or skip(68        message=message,69        description="two subsequent dots inside local part are not valid",70    )(test)71 72 73def leap_second(test):74    message = "Leap seconds are unsupported."75    return skip(76        message=message,77        subject="time",78        description="a valid time string with leap second",79    )(test) or skip(80        message=message,81        subject="time",82        description="a valid time string with leap second, Zulu",83    )(test) or skip(84        message=message,85        subject="time",86        description="a valid time string with leap second with offset",87    )(test) or skip(88        message=message,89        subject="time",90        description="valid leap second, positive time-offset",91    )(test) or skip(92        message=message,93        subject="time",94        description="valid leap second, negative time-offset",95    )(test) or skip(96        message=message,97        subject="time",98        description="valid leap second, large positive time-offset",99    )(test) or skip(100        message=message,101        subject="time",102        description="valid leap second, large negative time-offset",103    )(test) or skip(104        message=message,105        subject="time",106        description="valid leap second, zero time-offset",107    )(test) or skip(108        message=message,109        subject="date-time",110        description="a valid date-time with a leap second, UTC",111    )(test) or skip(112        message=message,113        subject="date-time",114        description="a valid date-time with a leap second, with minus offset",115    )(test)116 117 118TestDraft3 = DRAFT3.to_unittest_testcase(119    DRAFT3.cases(),120    DRAFT3.format_cases(),121    DRAFT3.optional_cases_of(name="bignum"),122    DRAFT3.optional_cases_of(name="non-bmp-regex"),123    DRAFT3.optional_cases_of(name="zeroTerminatedFloats"),124    Validator=jsonschema.Draft3Validator,125    format_checker=jsonschema.Draft3Validator.FORMAT_CHECKER,126    skip=lambda test: (127        ecmascript_regex(test)128        or missing_format(jsonschema.Draft3Validator)(test)129        or complex_email_validation(test)130    ),131)132 133 134TestDraft4 = DRAFT4.to_unittest_testcase(135    DRAFT4.cases(),136    DRAFT4.format_cases(),137    DRAFT4.optional_cases_of(name="bignum"),138    DRAFT4.optional_cases_of(name="float-overflow"),139    DRAFT4.optional_cases_of(name="id"),140    DRAFT4.optional_cases_of(name="non-bmp-regex"),141    DRAFT4.optional_cases_of(name="zeroTerminatedFloats"),142    Validator=jsonschema.Draft4Validator,143    format_checker=jsonschema.Draft4Validator.FORMAT_CHECKER,144    skip=lambda test: (145        ecmascript_regex(test)146        or leap_second(test)147        or missing_format(jsonschema.Draft4Validator)(test)148        or complex_email_validation(test)149    ),150)151 152 153TestDraft6 = DRAFT6.to_unittest_testcase(154    DRAFT6.cases(),155    DRAFT6.format_cases(),156    DRAFT6.optional_cases_of(name="bignum"),157    DRAFT6.optional_cases_of(name="float-overflow"),158    DRAFT6.optional_cases_of(name="id"),159    DRAFT6.optional_cases_of(name="non-bmp-regex"),160    Validator=jsonschema.Draft6Validator,161    format_checker=jsonschema.Draft6Validator.FORMAT_CHECKER,162    skip=lambda test: (163        ecmascript_regex(test)164        or leap_second(test)165        or missing_format(jsonschema.Draft6Validator)(test)166        or complex_email_validation(test)167    ),168)169 170 171TestDraft7 = DRAFT7.to_unittest_testcase(172    DRAFT7.cases(),173    DRAFT7.format_cases(),174    DRAFT7.optional_cases_of(name="bignum"),175    DRAFT7.optional_cases_of(name="cross-draft"),176    DRAFT7.optional_cases_of(name="float-overflow"),177    DRAFT6.optional_cases_of(name="id"),178    DRAFT7.optional_cases_of(name="non-bmp-regex"),179    DRAFT7.optional_cases_of(name="unknownKeyword"),180    Validator=jsonschema.Draft7Validator,181    format_checker=jsonschema.Draft7Validator.FORMAT_CHECKER,182    skip=lambda test: (183        ecmascript_regex(test)184        or leap_second(test)185        or missing_format(jsonschema.Draft7Validator)(test)186        or complex_email_validation(test)187    ),188)189 190 191TestDraft201909 = DRAFT201909.to_unittest_testcase(192    DRAFT201909.cases(),193    DRAFT201909.optional_cases_of(name="anchor"),194    DRAFT201909.optional_cases_of(name="bignum"),195    DRAFT201909.optional_cases_of(name="cross-draft"),196    DRAFT201909.optional_cases_of(name="float-overflow"),197    DRAFT201909.optional_cases_of(name="id"),198    DRAFT201909.optional_cases_of(name="no-schema"),199    DRAFT201909.optional_cases_of(name="non-bmp-regex"),200    DRAFT201909.optional_cases_of(name="refOfUnknownKeyword"),201    DRAFT201909.optional_cases_of(name="unknownKeyword"),202    Validator=jsonschema.Draft201909Validator,203    skip=skip(204        message="Vocabulary support is still in-progress.",205        subject="vocabulary",206        description=(207            "no validation: invalid number, but it still validates"208        ),209    ),210)211 212 213TestDraft201909Format = DRAFT201909.to_unittest_testcase(214    DRAFT201909.format_cases(),215    name="TestDraft201909Format",216    Validator=jsonschema.Draft201909Validator,217    format_checker=jsonschema.Draft201909Validator.FORMAT_CHECKER,218    skip=lambda test: (219        complex_email_validation(test)220        or ecmascript_regex(test)221        or leap_second(test)222        or missing_format(jsonschema.Draft201909Validator)(test)223        or complex_email_validation(test)224    ),225)226 227 228TestDraft202012 = DRAFT202012.to_unittest_testcase(229    DRAFT202012.cases(),230    DRAFT201909.optional_cases_of(name="anchor"),231    DRAFT202012.optional_cases_of(name="bignum"),232    DRAFT202012.optional_cases_of(name="cross-draft"),233    DRAFT202012.optional_cases_of(name="float-overflow"),234    DRAFT202012.optional_cases_of(name="id"),235    DRAFT202012.optional_cases_of(name="no-schema"),236    DRAFT202012.optional_cases_of(name="non-bmp-regex"),237    DRAFT202012.optional_cases_of(name="refOfUnknownKeyword"),238    DRAFT202012.optional_cases_of(name="unknownKeyword"),239    Validator=jsonschema.Draft202012Validator,240    skip=skip(241        message="Vocabulary support is still in-progress.",242        subject="vocabulary",243        description=(244            "no validation: invalid number, but it still validates"245        ),246    ),247)248 249 250TestDraft202012Format = DRAFT202012.to_unittest_testcase(251    DRAFT202012.format_cases(),252    name="TestDraft202012Format",253    Validator=jsonschema.Draft202012Validator,254    format_checker=jsonschema.Draft202012Validator.FORMAT_CHECKER,255    skip=lambda test: (256        complex_email_validation(test)257        or ecmascript_regex(test)258        or leap_second(test)259        or missing_format(jsonschema.Draft202012Validator)(test)260        or complex_email_validation(test)261    ),262)263 
codekingpro/portable-devtools · Team Ai