a kiÅ]êëã@sêddlmZddlmZddlmZddlmZddlm Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlZddlmZmZmZmZdd lmZmZdd lmZd d „ZGd d„deƒZGdd„deƒZGdd„de ƒZGdd„de ƒZGdd„de ƒZ Gdd„de!ƒZ"Gdd„de"e!ƒZ#Gdd„de!ƒZ$Gdd„de$e#e ƒZ%Gdd „d e$e#e ƒZ&Gd!d"„d"e#e ƒZ'Gd#d$„d$e#e ƒZ(Gd%d&„d&eƒZ)Gd'd(„d(eƒZ*Gd)d*„d*eƒZ+d+d,„Z,ej-Gd-d.„d.e!ƒƒZ.ej-Gd/d0„d0e!ƒƒZ/dS)1é)Údeque)Úcontextmanager)ÚDecimal)ÚBytesIO)ÚTestCaseN)ÚSynchronousTestCase)Ú FormatCheckerÚ TypeCheckerÚ exceptionsÚ validators)ÚPY3Ú pathname2url)Úbugccs| |¡st d¡VdS)NúWhoops!)Ú startswithr ÚValidationError)Ú validatorrÚinstanceÚschema©rúD/usr/lib/python3.9/site-packages/jsonschema/tests/test_validators.pyrs rc@sdeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dS)ÚTestCreateAndExtendcCsP| |jtjttjƒ¡ddi|_dti|_tƒ|_tj |j|j|jd|_ dS)Nú$idzsome://meta/schemar©Ú meta_schemar Ú type_checker) Ú addCleanupÚ assertEqualr Ú meta_schemasÚdictrrr rÚcreateÚ Validator©ÚselfrrrÚsetUpsý  ýzTestCreateAndExtend.setUpcCs.| |jj|jj|jjf|j|j|jf¡dS©N)rr!Ú VALIDATORSÚ META_SCHEMAÚ TYPE_CHECKERr rrr"rrrÚ test_attrs*sýýûzTestCreateAndExtend.test_attrscCs ddi}| | |¡j|¡dS)NrÚfoo)rr!r©r#rrrrÚ test_init7szTestCreateAndExtend.test_initcCs€ddi}| |¡j}t|dƒƒ}| |g¡tjdd|ddtdgƒd}t|dƒƒ}| t|ƒd¡| |d ¡| ¡¡dS) NrZhelZhellorZgoodbye)rrrÚvalidator_valueÚ schema_pathér) r!Ú iter_errorsÚlistrr rrÚlenZ _contents)r#rr0ÚerrorsZexpected_errorrrrÚtest_iter_errors;s   ú z$TestCreateAndExtend.test_iter_errorscCs4tjddidd}| tjjd¡| |jd¡dS)NrÚ somethingú my version©rÚversionZMyVersionValidator)r r rrÚpoprÚ__name__©r#r!rrrÚ.test_if_a_version_is_provided_it_is_registeredOs þzBTestCreateAndExtend.test_if_a_version_is_provided_it_is_registeredcCs,ttjƒ}tjddid| tj|¡dS)NÚid)r)rr rr r)r#ÚoriginalrrrÚ6test_if_a_version_is_not_provided_it_is_not_registeredWs zJTestCreateAndExtend.test_if_a_version_is_not_provided_it_is_not_registeredcCsBd}d|i}tj|ddd„d| tjj|¡| |tj¡dS)Númeta schema idr=r6cSs | dd¡S©Nr=Ú©Úget©ÚsrrrÚcózMTestCreateAndExtend.test_validates_registers_meta_schema_id..©rr8Úid_of©r r rrr9ÚassertIn©r#Zmeta_schema_keyZmy_meta_schemarrrÚ'test_validates_registers_meta_schema_id\sýz;TestCreateAndExtend.test_validates_registers_meta_schema_idcCs<d}d|i}tj|dd| tjj|¡| |tj¡dS)Númeta schema $idrr6r7rKrMrrrÚ.test_validates_registers_meta_schema_draft6_idisþzBTestCreateAndExtend.test_validates_registers_meta_schema_draft6_idc sDtjidd‰| t‡fdd„dgfdddd d ifd fDƒƒ¡dS) Nr©rr c3s$|]\}}ˆiƒj||dVqdS))rÚtypeN)Úis_type)Ú.0rRr©r!rrÚ xsÿz@TestCreateAndExtend.test_create_default_types..Úarray)ÚbooleanT)Úintegeré )ÚnullN)Únumberg(@Úobject)Ústringr*)r r Ú assertTrueÚallr"rrUrÚtest_create_default_typesus ùþÿz-TestCreateAndExtend.test_create_default_typescCs`t|jjƒ}tƒ}tj|jd|id}| |j|j|j|jjft||d|jj|jj|f¡dS)NÚnew©r ©rb) rr!r&r]r Úextendrr'r()r#r>rbÚExtendedrrrÚ test_extend†s$ þü üúzTestCreateAndExtend.test_extendcsf‡fdd„}d}d|dœ}tj|ˆjˆj|d}ˆ | |j¡|¡t |¡}ˆ | |j¡|¡dS)zK Extending a validator preserves its notion of schema IDs. cs| dˆj |¡¡S)NÚ__test__)rDr!ÚID_OF©rr"rrrJ sz3TestCreateAndExtend.test_extend_idof..id_ofzthe://correct/id/zthe://wrong/id/)rrh)rr rrJN)r r rrrir're)r#rJZ correct_idrZOriginalZDerivedrr"rÚtest_extend_idofœs þü z$TestCreateAndExtend.test_extend_idofN)r:Ú __module__Ú __qualname__r$r)r,r4r<r?rNrPrargrkrrrrrs   rc@steZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)ÚTestLegacyTypeCheckingcCs0tjidd}| t|jƒhd£¡| ¡dS)NrrQ>rXr[rWrYr\r]r^)r r rÚsetÚ DEFAULT_TYPESÚ flushWarningsr;rrrra´s ÿ z0TestLegacyTypeChecking.test_create_default_typesc Cs”tjidd}t|jƒ}tƒ}tj|d|id}| |j|j|j|j|j |iƒj |  ¡ddft||d|j|j||j |j |  ¡ddf¡dS)NrrQrbrcrÚmessagerd) r r rr&r]rerr'r(rprq)r#r!r>rbrfrrrrgÂs2 þø øöz"TestLegacyTypeChecking.test_extendcCsPddi}| t |¡ d¡¡tj|dttfid}| | d¡¡| ¡dS)NrRr^rZ)Útypes)Ú assertFalser ÚDraft7ValidatorÚis_validÚstrÚintr_rq)r#rrrrrÚ0test_types_redefines_the_validators_type_checkerás þzGTestLegacyTypeChecking.test_types_redefines_the_validators_type_checkerc Cs.|jtdtj|jjjtjiidtiddS)NzPThe default_types argument is deprecated. Use the type_checker argument instead.r*)ÚcategoryrrÚfilenameÚfrr Ú default_types) Ú assertWarnsÚDeprecationWarningÚsysÚmodulesrlÚ__file__r r r]r"rrrÚ"test_providing_default_types_warnsìsôz9TestLegacyTypeChecking.test_providing_default_types_warnscCsžtjiitƒd}| tj¡}|jWdƒn1s:0Y| dt|jƒ¡| tj¡|iƒjWdƒn1s‚0Y|  |  ¡¡dS)aš We raise an error when you ask a validator with non-default type checker for its DEFAULT_TYPES. The type checker argument is new, so no one but this library itself should be trying to use it, and doing so while then asking for DEFAULT_TYPES makes no sense (not to mention is deprecated), since type checkers are not strictly about Python type. rNz=DEFAULT_TYPES cannot be used on Validators using TypeCheckers) r r r Ú assertRaisesZ _DontDoThatrprLrwÚ exceptionrtrq©r#r!ÚerrrÚ?test_cannot_ask_for_default_types_with_non_default_type_checkerüs ý$þ(zVTestLegacyTypeChecking.test_cannot_ask_for_default_types_with_non_default_type_checkercCs:tjiitƒd}| | ¡¡|iƒ| | ¡¡dS)Nr)r r r rtrqr;rrrÚ2test_providing_explicit_type_checker_does_not_warnsýzITestLegacyTypeChecking.test_providing_explicit_type_checker_does_not_warncCs6tjiid}| | ¡¡|iƒ| | ¡¡dS)NrQ)r r rtrqr;rrrÚ$test_providing_neither_does_not_warn#sz;TestLegacyTypeChecking.test_providing_neither_does_not_warncCsf| t¡(}tjiidtitƒdWdƒn1s80Y| dt|jƒ¡|  |  ¡¡dS)Nr*)rr r}rz:Do not specify default_types when providing a type checker) r„Ú TypeErrorr r r]r rLrwr…rtrq©r#r‡rrrÚ5test_providing_default_types_with_type_checker_errors*s ü$þzLTestLegacyTypeChecking.test_providing_default_types_with_type_checker_errorscCsntjiidtid}| t¡"}tj|itƒdWdƒn1sF0Y| dt|j ƒ¡|  ¡dS)NrW)rr r})r rz‚Cannot extend a validator created with default_types with a type_checker. Update the validator to use a type_checker when created.) r r r1r„r‹rer rLrwr…rqr†rrrÚ.z%r is disallowed for [1, 2]rŸz[1, 2] is too shortz[1, 2] is not one of %rr )rr0rÚsorted)r#rrZgotZexpectedrrrr4“sý  ýzTestIterErrors.test_iter_errorscCsXddgdddœ}dddid did gd ¢d œd œi}t|j ||¡ƒ}| t|ƒd¡dS)Nr™r/éÚspam©r*r•ÚbazÚquuxÚ propertiesrRr^r¡é ©r™ééé©Úmaximumr ©r*r•r§r¬)r1rr0rr2)r#rrr3rrrÚ0test_iter_errors_multiple_failures_one_validator£s ýÿz?TestIterErrors.test_iter_errors_multiple_failures_one_validatorN)r:rlrmr$r4r²rrrrr—sr—c@s¬eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)S)*ÚTestValidationErrorMessagescOs\| dtj¡| tj¡*}tj||g|¢Ri|¤ŽWdƒn1sJ0Y|jjS)NÚcls) Ú setdefaultr r˜r„r rÚvalidater…rr)r#rrÚargsÚkwargsr‡rrrÚ message_for²s8z'TestValidationErrorMessages.message_forcCs&|jdddid}| |dd¡dS©Nr/rRr^©rrz1 is not of type %r©r¹r©r#rrrrrÚtest_single_type_failure¸sz4TestValidationErrorMessages.test_single_type_failurecCs(|jdddgid}| |dd¡dSrºr¼r½rrrÚtest_single_type_list_failure¼sz9TestValidationErrorMessages.test_single_type_list_failurecCs.d}|jddt|ƒid}| |d|¡dS)N)r^r]r/rRr»z1 is not of type %r, %r)r¹r1r)r#rsrrrrrÚtest_multiple_type_failureÀsz6TestValidationErrorMessages.test_multiple_type_failurecCs2dddigi}|jdd|gid}| |d¡dS)NrRÚminimumržr/r»ú1 is less than the minimum of 3r¼)r#rRrrrrrÚ&test_object_without_title_type_failureÅszBTestValidationErrorMessages.test_object_without_title_type_failurecCs.ddddœgi}|jd|d}| |d¡dS)NrRZFoorž)ÚnamerÁr/r»rÂr¼©r#rrrrrrÚ#test_object_with_named_type_failureÊsz?TestValidationErrorMessages.test_object_with_named_type_failurecCs"|jdddid}| |d¡dS)Nr/rÁr™r»z1 is less than the minimum of 2r¼r½rrrÚ test_minimumÏsz(TestValidationErrorMessages.test_minimumcCs"|jdddid}| |d¡dS)Nr/r°rr»z"1 is greater than the maximum of 0r¼r½rrrÚ test_maximumÓsz(TestValidationErrorMessages.test_maximumcCsBd\}}d||ii}|jddi|tjd}| |d||f¡dS©N©r•r*Z dependenciesr•r™©rrr´z%r is a dependency of %r©r¹r r˜r©r#ZdependZonrrrrrrÚ test_dependencies_single_element×s ýz.ÚformatZbla)rrÚformat_checkerzis not a)rÚchecksr¹rLrÚ)r#ÚcheckerrrrrrrÚ#test_invalid_format_default_message)s ýz?TestValidationErrorMessages.test_invalid_format_default_messagec Cs–ddddiddidœdœ}|jddi|tjd }| |d  tdƒtd ƒtd ƒ¡¡|jdd dœ|tjd }| |d tdƒtdƒtd ƒtd ƒ¡¡dS)Nr]FrRr^)ú^abc$ú^def$)rRrÖÚpatternPropertiesÚzebraé{rËz,{} does not match any of the regexes: {}, {}rìríiÈ)rïÚfishz.{}, {} do not match any of the regexes: {}, {}rñ)r¹r ÚDraft4ValidatorrrçrÚrÅrrrÚ1test_additionalProperties_false_patternProperties8s8þþýÿþýÿþzMTestValidationErrorMessages.test_additionalProperties_false_patternPropertiescCs"|jddtjd}| d|¡dS)Nr5FrËz'False schema does not allow 'something')r¹r rurLr½rrrÚtest_False_schemaVs ýz-TestValidationErrorMessages.test_False_schemaN)r:rlrmr¹r¾r¿rÀrÃrÆrÇrÈrÎrÏrÐrÔrÕrØrÛrßrárërórôrrrrr³±s(      r³c@s|eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)ÚTestValidationErrorDetailscCsèd}dddiddigi}t |¡}t| |¡ƒ}| t|ƒd¡|d}| |jd¡| |j|d¡| |j|¡| |j |¡|  |j ¡| |j t gƒ¡| |jt gƒ¡| |jt gƒ¡| |jt dgƒ¡| |jt dgƒ¡| |jt dgƒ¡| t|jƒd ¡t|jƒ\}}| |jd¡| |j|ddd¡| |j|¡| |j |dd¡| |j |¡| |j t gƒ¡| |jt gƒ¡| |jt gƒ¡| |jt ddgƒ¡| |jt ddgƒ¡| |jt gd ¢ƒ¡| |j¡| |jd¡| |j|ddd¡| |j|¡| |j |dd¡| |j |¡| |j t gƒ¡| |jt gƒ¡| |jt gƒ¡| |jt ddgƒ¡| |jt ddgƒ¡| |jt gd ¢ƒ¡| t|jƒd¡dS) NéÚanyOfrÁérRr^r/rr™)r÷rrÁ)r÷r/rR)r ròr1r0rr2rr-rrÚ assertIsNoneÚparentÚpathrÚ relative_pathÚ absolute_pathr.Úrelative_schema_pathÚabsolute_schema_pathÚcontextÚ sorted_errorsÚassertIsrt©r#rrrr3r‡Úe1Úe2rrrÚ test_anyOfbsbþÿ  ÿ z%TestValidationErrorDetails.test_anyOfcCsìddi}dddiddddgiidœgi}t |¡}t| |¡ƒ}| t|ƒd¡|d }| |jd¡| |j|d¡| |j|¡| |j |¡|  |j ¡| |j t gƒ¡| |jt gƒ¡| |jt gƒ¡| |jt dgƒ¡| |jt dgƒ¡| |jt dgƒ¡| t|jƒd¡t|jƒ\}}| |jd¡| |j|dd d¡| |j|¡| |j |dd ¡| |j |¡| |j t gƒ¡| |jt gƒ¡| |jt gƒ¡| |jt d dgƒ¡| |jt d dgƒ¡| |jt gd ¢ƒ¡| |j¡| |jd¡| |jdg¡| |jd¡| |j ddgi¡| |j |¡| |j t dgƒ¡| |jt dgƒ¡| |jt dgƒ¡| |jt gd ¢ƒ¡| |jt gd ¢ƒ¡| |jt gd ¢ƒ¡| |j¡dS) Nr*r/rRrYr]r r™©rRr©r)rRrrR)r/r©r*r )rRr/r©r*r )r r˜r1r0rr2rr-rrrùrúrûrrürýr.rþrÿrrrrtrrrrÚ test_type¤sp þþÿ   ÿÿ þz$TestValidationErrorDetails.test_typec Cs‚ddgdddœ}dddid did gd ¢d œd œi}t |¡}| |¡}t|ƒ\}}}}| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |jtdgƒ¡| |j d ¡| |j d¡| |j d¡| |j d¡dS)Nr™r/r¤r¥r¦r©rRr^r¡rªr«r¯r±r•r§r*r r°) r r˜r0rrrûrrürýr) r#rrrr3rrÚe3Úe4rrrÚtest_single_nestingîs4 ýÿ  z.TestValidationErrorDetails.test_single_nestingc CsÌddddgidœdg}dddgddd gid d d id didœdœdœdœdœ}t |¡}| |¡}t|ƒ\}}}}} } | |jtgƒ¡| |jtdgƒ¡| |jtddgƒ¡| |jtgd¢ƒ¡| | jtgd¢ƒ¡| | jtddgƒ¡| |jtdgƒ¡| |jtddgƒ¡| t|jƒgd¢¡| t|jƒgd¢¡| t| jƒgd¢¡| t| jƒgd¢¡| |j d¡| |j d¡| |j d¡| |j d ¡| | j d ¡| | j d¡dS)Nr/r™r§)r*r•r¨r^r]r ržrWÚrequiredTr¡)r•r§r)rRrÒrr•)r/r•r•)r/r•r§r*rRrÒ)rÒr©r•rR)rÒr©r•r©r•r )rÒr©r•r©r§r¡)rÒr©r*r ) r r˜r0rrrûrr.r1r) r#rrrr3rrr r Ze5Ze6rrrÚtest_multiple_nestingsV þþþþþ  ÿþþÿz0TestValidationErrorDetails.test_multiple_nestingc Csdddddgddiddd d iid œd œd œgiiddgdd d iidœ}dddddddiid œid œi}t |¡}| |¡\}| |jtdgƒ¡| |jtgd¢ƒ¡|j\}| |jtgd¢ƒ¡| |jtgd¢ƒ¡|j\}| |jtgd¢ƒ¡| |jtgd¢ƒ¡dS)NZnoder÷r]rÄÚchildrenrRr^ú^.*$ú$refz#/definitions/node)rRrî)rÄr)rRr r©Úroot)Z definitionsrRr r©ršÚab)r©rr÷)rrrš) r©rr÷rr©rrîrr÷)rrršrr)r©rr÷rr©rrîrr÷rr©rrîrr÷)r ròr0rrýrrÿr)r#rrrr‡rrrrrÚtest_recursiveFspÿÿÿþüýÿÿ èÿÿþÿþÿ  ÿÿÿÿÿÿÿz)TestValidationErrorDetails.test_recursivecCs€dddœ}ddddœi}t |¡}| |¡}t|ƒ\}}| |jtdgƒ¡| |jtdgƒ¡| |jd ¡| |jd ¡dS) Nr•r™rÊrÖrYrö©rRrÁr*rRrÁ©r r˜r0rrrûrr©r#rrrr3rrrrrÚtest_additionalProperties¨s    z4TestValidationErrorDetails.test_additionalPropertiescCsˆdddœ}dddiddidœi}t |¡}| |¡}t|ƒ\}}| |jtd gƒ¡| |jtd gƒ¡| |jd¡| |jd¡dS) Nr/r™rÊrîrRr^rÁrör•r*rrrrrÚtest_patternProperties¶s þÿ   z1TestValidationErrorDetails.test_patternPropertiescCs€ddg}gdddœdœ}t |¡}| |¡}t|ƒ\}}| |jtdgƒ¡| |jtdgƒ¡| |jd¡| |jd ¡dS) Nr*r/rYrörrÑrrRrÁrrrrrÚtest_additionalItemsÉsþ   z/TestValidationErrorDetails.test_additionalItemscCs‚gd¢}igdddœdœ}t |¡}| |¡}t|ƒ\}}| |jtdgƒ¡| |jtdgƒ¡| |jd¡| |jd ¡dS) N)r*r•r/rYrörrÑr/r™rRrÁrrrrrÚtest_additionalItems_with_itemsÚsþ   z:TestValidationErrorDetails.test_additionalItems_with_itemscCs‚ddi}ddddiii}t |¡}| |¡\}| |jd¡| |jdddidf¡| |jtgƒ¡| |jtddgƒ¡dS)Nr*rZZ propertyNamesÚnotrÜz%r is not allowed for %r© r rur0rrrrrûrr.)r#rrrÚerrorrrrÚtest_propertyNamesës  þz-TestValidationErrorDetails.test_propertyNamescCspddiddidœ}t |¡}| d¡\}| |jd¡| |jd¡| |jtgƒ¡| |jtgd¢ƒ¡dS)NrÜrZé )ÚifÚthenú13 was expected)r r!rÜr©r#rrrrrrÚ test_if_thenúsþ  z'TestValidationErrorDetails.test_if_thencCspddiddidœ}t |¡}| d¡\}| |jd¡| |jd¡| |jtgƒ¡| |jtgd¢ƒ¡dS)NrÜrZr)r Úelser¤r")r r%rÜrr#rrrÚ test_if_elsesþ  z'TestValidationErrorDetails.test_if_elsec CsNt d¡}| d¡\}| |j|j|j|j|j|j fdddddt gƒf¡dS)NFrZzFalse schema does not allow 12) r rur0rrrrr-rrr.r)r#rrrrrÚtest_boolean_schema_Falses$  ú ú÷z4TestValidationErrorDetails.test_boolean_schema_Falsec Csddddii}}tjd|itjdi||idd}| d d i¡\}| |j|j|j|j|j |j |j fd ddd t d gƒddit ddgƒf¡dS) NZsomeRefrÖrRrYrrB©Ústore©Úresolverr*Z notAnIntegerz''notAnInteger' is not of type 'integer') r ruÚ RefResolverr0rrrrr-rrýrr.r)r#ÚrefrrrrrrÚtest_ref-s0þù  ùöz#TestValidationErrorDetails.test_refN)r:rlrmrrr r rrrrrrr$r&r'r.rrrrrõ_sBJ"6brõc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚMetaSchemaTestsMixincCsF| tj¡&|j ddtƒii¡Wdƒn1s80YdS)Nr©Útest)r„r Ú SchemaErrorr!Ú check_schemar]r"rrrÚtest_invalid_propertiesMsz,MetaSchemaTestsMixin.test_invalid_propertiescCs@| tj¡ |j ddi¡Wdƒn1s20YdS)Nr¡Ú1)r„r r1r!r2r"rrrÚtest_minItems_invalid_stringQsz1MetaSchemaTestsMixin.test_minItems_invalid_stringcCs|j dgi¡dS)z– Technically, all the spec says is they SHOULD have elements, not MUST. See https://github.com/Julian/jsonschema/issues/529. r N©r!r2r"rrrÚtest_enum_allows_empty_arraysVsz2MetaSchemaTestsMixin.test_enum_allows_empty_arrayscCs|j dddgi¡dS)z’ Technically, all the spec says is they SHOULD be unique, not MUST. See https://github.com/Julian/jsonschema/issues/529. r rZNr6r"rrrÚ!test_enum_allows_non_unique_items^sz6MetaSchemaTestsMixin.test_enum_allows_non_unique_itemsN)r:rlrmr3r5r7r8rrrrr/Ksr/c@s eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z e   ed¡dd„ƒZdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$S)%ÚValidatorTestMixincCs$|j\}}| | |¡ |¡¡dSr%)Úvalidr_r!rv©r#rrrrrÚtest_valid_instances_are_validhs z1ValidatorTestMixin.test_valid_instances_are_validcCs$|j\}}| | |¡ |¡¡dSr%)Úinvalidrtr!rvr;rrrÚ$test_invalid_instances_are_not_validls z7ValidatorTestMixin.test_invalid_instances_are_not_validcCs | tƒtƒi¡jtƒddS)N©r)r!r]r¶r"rrrÚ(test_non_existent_properties_are_ignoredpsz;ValidatorTestMixin.test_non_existent_properties_are_ignoredcCs| | i¡jtj¡dSr%)ZassertIsInstancer!r+r r,r"rrrÚ.test_it_creates_a_ref_resolver_if_not_providedss þzAValidatorTestMixin.test_it_creates_a_ref_resolver_if_not_providedcCsndddi}}tjdi||id}|jd|i|d}| tj¡| d¡Wdƒn1s`0YdS)NZ someCoolRefrRrYrBr(rr*)r r,r!r„r rr¶)r#r-rr+rrrrÚ#test_it_delegates_to_a_ref_resolverys z6ValidatorTestMixin.test_it_delegates_to_a_ref_resolvercsfG‡fdd„dtƒ}|ƒ}ddi}ˆ tj¡$ˆj||d d¡Wdƒn1sX0YdS)zb Legacy RefResolvers support only the context manager form of resolution. cseZdZe‡fdd„ƒZdS)zXValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver..LegacyRefResolverc3sˆ |d¡ddiVdS)Núthe refrRrY©r)Úthisr-r"rrÚ resolvingˆs zbValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver..LegacyRefResolver.resolvingN)r:rlrmrrFrr"rrÚLegacyRefResolver‡srGrrCr*N)r]r„r rr!r¶)r#rGr+rrr"rÚ*test_it_delegates_to_a_legacy_ref_resolvers z=ValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolvercCs| | i¡ dd¡¡dS)Nr*r^)r_r!rSr"rrrÚ#test_is_type_is_true_for_valid_type“sz6ValidatorTestMixin.test_is_type_is_true_for_valid_typecCs| | i¡ dd¡¡dS)Nr*rW©rtr!rSr"rrrÚ&test_is_type_is_false_for_invalid_type–sz9ValidatorTestMixin.test_is_type_is_false_for_invalid_typecCs4| | i¡ dd¡¡| | i¡ dd¡¡dS)NTrYr\rJr"rrrÚ,test_is_type_evades_bool_inheriting_from_int™sz?ValidatorTestMixin.test_is_type_evades_bool_inheriting_from_intz-In Python 3 json.load always produces unicodecCs| ddi¡ d¡dS)NrRr^sfoo©r!r¶r"rrrÚ$test_string_a_bytestring_is_a_stringsz7ValidatorTestMixin.test_string_a_bytestring_is_a_stringcCs| ddi¡ d¡dS)zF See https://github.com/Julian/jsonschema/issues/611. Úpatternr*NrMr"rrrÚ#test_patterns_can_be_native_strings¡sz6ValidatorTestMixin.test_patterns_can_be_native_stringscCs~dddii}tj|j|jj ddd„¡d}||ƒ}| ddtdƒtd ƒg¡d igd dg}| d d „| |¡Dƒ|¡dS)NrÒrRr\cSst|tttfƒot|tƒ Sr%)Ú isinstancerxÚfloatrÚbool©rêrãrrrrG­s ÿzGValidatorTestMixin.test_it_can_validate_with_decimals..©rr/gš™™™™™ñ?r®r*TcSsg|] }|j‘qSrr?)rTrrrrÚ ¸rHzIValidatorTestMixin.test_it_can_validate_with_decimals..) r rer!r(Úredefiner¶rrr0)r#rr!rr=rrrÚ"test_it_can_validate_with_decimals§s þþ þz5ValidatorTestMixin.test_it_can_validate_with_decimalscCs"|jdditƒd}| d¡dS)NrçZcarrot©rèZbugs)r!rr¶©r#rrrrÚ7test_it_returns_true_for_formats_it_does_not_know_about¼s ÿzJValidatorTestMixin.test_it_returns_true_for_formats_it_does_not_know_aboutcCs| i¡}| |j¡dSr%)r!rùrèrZrrrÚ,test_it_does_not_validate_formats_by_defaultÂs z?ValidatorTestMixin.test_it_does_not_validate_formats_by_defaultcstƒ}tdƒ‰|jdtd‡‡fdd„ƒ}ˆjddi|d}| d¡ˆ tj¡}| d ¡Wdƒn1sr0Yˆ |j j ˆ¡dS) NzBad!r*)Zraisescs.|dkr dS|dkrˆ‚nˆ d |¡¡dS)NÚgoodTÚbadz What is {}? [Baby Don't Hurt Me])Úfailrçrå©r^r#rrÚcheckÊs zTValidatorTestMixin.test_it_validates_formats_if_a_checker_is_provided..checkrçrYr]r^) rÚ ValueErrorrér!r¶r„r rrr…Úcause)r#rêrarÚcmrr`rÚ2test_it_validates_formats_if_a_checker_is_providedÆs ÿ (zEValidatorTestMixin.test_it_validates_formats_if_a_checker_is_providedcCsBtƒ}d|gi}tj|j|jj |dd„¡d}||ƒ d¡dS)NrRcSs t|tƒSr%©rQrxrTrrrrGårHz@ValidatorTestMixin.test_non_string_custom_type..rUr¤)r]r rer!r(rWr¶)r#Znon_string_typerÚCrazyrrrÚtest_non_string_custom_typeÞs þþz.ValidatorTestMixin.test_non_string_custom_typecCsttj|j|jj ddd„¡d}| tj¡"}|ddiƒ d¡Wdƒn1sT0Y|  d t |j ƒ¡dS) z‘ A tuple instance properly formats validation errors for uniqueItems. See https://github.com/Julian/jsonschema/pull/224 rWcSs t|tƒSr%)rQÚtuplerTrrrrGôrHzNValidatorTestMixin.test_it_properly_formats_tuples_in_errors..rUZ uniqueItemsT)r/r/Nz(1, 1) has non-unique elements) r rer!r(rWr„r rr¶rLrwr…)r#ZTupleValidatorr‡rrrÚ)test_it_properly_formats_tuples_in_errorsêsþþ0zr@rArBrHrIrKrLÚunittestZskipIfr rNrPrXr[r\rerhrjrrrrr9gs$   r9c@sLeZdZdZdd„Zdd„Ze edƒ¡dd„ƒZ e edƒ¡d d „ƒZ d S) ÚAntiDraft6LeakMixinzN Make sure functionality from draft 6 doesn't leak backwards in time. cCsN| tj¡}|j d¡Wdƒn1s.0Y| dt|jƒ¡dS)NTzTrue is not of type©r„r r1r!r2rLrwr…rŒrrrÚtest_True_is_not_a_schemas*z-AntiDraft6LeakMixin.test_True_is_not_a_schemacCsN| tj¡}|j d¡Wdƒn1s.0Y| dt|jƒ¡dS)NFzFalse is not of typermrŒrrrÚtest_False_is_not_a_schemas*z.AntiDraft6LeakMixin.test_False_is_not_a_schemai cCs^t di¡}| t¡$}|jd|d d¡Wdƒn1s@0Y| |jtj ¡dS)NrBTr*rZ© r r,r„Ú Exceptionr!r¶ZassertNotIsInstancer…r r©r#r+r‡rrrÚ5test_True_is_not_a_schema_even_if_you_forget_to_check s  2zIAntiDraft6LeakMixin.test_True_is_not_a_schema_even_if_you_forget_to_checkcCs^t di¡}| t¡$}|jd|d d¡Wdƒn1s@0Y| |jtj ¡dS)NrBFr*rZrprrrrrÚ6test_False_is_not_a_schema_even_if_you_forget_to_checks  2zJAntiDraft6LeakMixin.test_False_is_not_a_schema_even_if_you_forget_to_checkN) r:rlrmÚ__doc__rnrorkÚskiprrsrtrrrrrlüs   rlc@sFeZdZejZiifZddidfZdd„Zdd„Z dd „Z d d „Z d S) ÚTestDraft3ValidatorrRrYr*cCs| ddi¡}| tƒ¡dS©NrRÚany)r!r¶r]rZrrrÚ#test_any_type_is_valid_for_type_anysz7TestDraft3Validator.test_any_type_is_valid_for_type_anycCsptj|j|jj ddd„¡d}|ddiƒ}| d¡| tj¡| d¡Wdƒn1sb0YdS) z( Sigh, because why not. rycSs t|tƒSr%rfrTrrrrG*rHzBTestDraft3Validator.test_any_type_is_redefinable..rUrRrZr*N) r rer!r(rWr¶r„r r)r#rgrrrrÚtest_any_type_is_redefinable#sÿþ  z0TestDraft3Validator.test_any_type_is_redefinablecCs"| | i¡ tƒddi¡¡dSrx)r_r!rvr]r"rrrÚ!test_is_type_is_true_for_any_type2sz5TestDraft3Validator.test_is_type_is_true_for_any_typecCs8| | i¡ dd¡¡| | i¡ dddi¡¡dS)NTrXrRry)r_r!rSrvr"rrrÚ6test_is_type_does_not_evade_bool_if_it_is_being_tested5szJTestDraft3Validator.test_is_type_does_not_evade_bool_if_it_is_being_testedN) r:rlrmr r˜r!r:r=rzr{r|r}rrrrrws rwc@s&eZdZejZiifZddidfZdS)ÚTestDraft4ValidatorrRrYr*N)r:rlrmr ròr!r:r=rrrrr~:sr~c@s&eZdZejZiifZddidfZdS)ÚTestDraft6ValidatorrRrYr*N)r:rlrmr rÞr!r:r=rrrrr@src@s&eZdZejZiifZddidfZdS)ÚTestDraft7ValidatorrRrYr*N)r:rlrmr rur!r:r=rrrrr€Fsr€c@sleZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)ÚTestValidatorForcCs<ddi}| t |¡tj¡ddi}| t |¡tj¡dS)Nú$schemaú&http://json-schema.org/draft-03/schemaú'http://json-schema.org/draft-03/schema#)rr Ú validator_forr˜r+rrrÚ test_draft_3MsþþzTestValidatorFor.test_draft_3cCs<ddi}| t |¡tj¡ddi}| t |¡tj¡dS)Nr‚ú&http://json-schema.org/draft-04/schemaú'http://json-schema.org/draft-04/schema#)rr r…ròr+rrrÚ test_draft_4ZsþþzTestValidatorFor.test_draft_4cCs<ddi}| t |¡tj¡ddi}| t |¡tj¡dS)Nr‚ú&http://json-schema.org/draft-06/schemaú'http://json-schema.org/draft-06/schema#)rr r…rÞr+rrrÚ test_draft_6gsþþzTestValidatorFor.test_draft_6cCs<ddi}| t |¡tj¡ddi}| t |¡tj¡dS)Nr‚ú&http://json-schema.org/draft-07/schemaú'http://json-schema.org/draft-07/schema#)rr r…rur+rrrÚ test_draft_7tsþþzTestValidatorFor.test_draft_7cCs| t d¡tj¡dS)NT©rr r…Z_LATEST_VERSIONr"rrrÚ test_TruesþzTestValidatorFor.test_TruecCs| t d¡tj¡dSrärr"rrrÚ test_False‡sþzTestValidatorFor.test_FalsecCs6tjddiddd„d}ddi}| t |¡|¡dS)Nr=r@Z12cSs | dd¡SrArCrErrrrG‘rHz8TestValidatorFor.test_custom_validator..rIr‚©r r rr…©r#r!rrrrÚtest_custom_validatorsýþz&TestValidatorFor.test_custom_validatorcCs0tjddidd}ddi}| t |¡|¡dS)NrrOZ13r7r‚r“r”rrrÚtest_custom_validator_draft6™sþþz-TestValidatorFor.test_custom_validator_draft6cCs| t i¡tj¡dSr%rr"rrrÚ%test_validator_for_jsonschema_default¤sz6TestValidatorFor.test_validator_for_jsonschema_defaultcCs| tjiddd¡dS)N)Údefault)rr r…r"rrrÚ!test_validator_for_custom_default§sz2TestValidatorFor.test_validator_for_custom_defaultcCs,|jtdtj|jjjtjddiiddS)Nz‚The metaschema specified by $schema was not found. Using the latest draft to validate, but this will raise an error in the future.r‚Z unknownSchema)rzrrr{r|rr˜)r~rr€rrlr‚r r…r"rrrÚ1test_warns_if_meta_schema_specified_was_not_foundªsôzBTestValidatorFor.test_warns_if_meta_schema_specified_was_not_foundcCs"tjiidf| | ¡¡dS)N)rr˜)r r…rtrqr"rrrÚ0test_does_not_warn_if_meta_schema_is_unspecifiedºszATestValidatorFor.test_does_not_warn_if_meta_schema_is_unspecifiedN)r:rlrmr†r‰rŒrr‘r’r•r–r—r™ršr›rrrrrLs      rc@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)Ú TestValidatecCs2g}| |d|j¡t i|¡| ||g¡dS)Nr2)ÚpatchÚappendr r¶r)r#rr!ÚresultrrrÚ assertUsesÀs zTestValidate.assertUsescCs,|jdditjd|jdditjddS)Nr‚r„©rr!rƒ)r r r˜r"rrrÚtest_draft3_validator_is_chosenÆsþþz,TestValidate.test_draft3_validator_is_chosencCs,|jdditjd|jdditjddS)Nr‚rˆr¡r‡)r r ròr"rrrÚtest_draft4_validator_is_chosenÑsþþz,TestValidate.test_draft4_validator_is_chosencCs,|jdditjd|jdditjddS)Nr‚r‹r¡rŠ)r r rÞr"rrrÚtest_draft6_validator_is_chosenÜsþþz,TestValidate.test_draft6_validator_is_chosencCs,|jdditjd|jdditjddS)Nr‚rŽr¡r©r r rur"rrrÚtest_draft7_validator_is_chosençsþþz,TestValidate.test_draft7_validator_is_chosencCs|jitjddS)Nr¡r¥r"rrrÚ$test_draft7_validator_is_the_defaultòsz1TestValidate.test_draft7_validator_is_the_defaultcCsR| tj¡ }t dddi¡Wdƒn1s20Y| t|jƒd¡dS)NrZrRr^z3(?s)Failed validating u?'.*' in schema.*On instance)r„r rr r¶ÚassertRegexpMatchesrwr…rŒrrrÚtest_validation_error_messageõs .þz*TestValidate.test_validation_error_messagecCsR| tj¡ }t dddi¡Wdƒn1s20Y| t|jƒd¡dS)NrZrRz5(?s)Failed validating u?'.*' in metaschema.*On schema)r„r r1r r¶r¨rwr…rŒrrrÚtest_schema_error_messageýs .þz&TestValidate.test_schema_error_messagecCsbdddiddigi}| tj¡}t d|¡Wdƒn1sB0Y| dt|jƒ¡dS)NZoneOfrRr^rWrZz12 is not of type)r„r rr r¶rLrwr…)r#rr‡rrrÚtest_it_uses_best_matchs*z$TestValidate.test_it_uses_best_matchN) r:rlrmr r¢r£r¤r¦r§r©rªr«rrrrrœ¿s    rœc@s”eZdZdZdZddiZdd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#S)$ÚTestRefResolverrBz foo://storedZstoredrcCs.i|_|j|ji|_t |j|j|j¡|_dSr%)ÚreferrerÚ stored_uriÚ stored_schemar)r r,Úbase_urir+r"rrrr$s  ÿzTestRefResolver.setUpcsdtjjd}ˆ ˆjd‡fdd„¡ˆj |¡}Wdƒn1sF0Yˆ |tjj¡dS)Nr=Zresolve_remotecs ˆ d¡S)NzShould not have been called!)r_)r·r¸r"rrrGrHzXTestRefResolver.test_it_does_not_retrieve_schema_urls_from_the_network..)r r˜r'rr+rFr©r#r-Úresolvedrr"rÚ6test_it_does_not_retrieve_schema_urls_from_the_networks  ýzFTestRefResolver.test_it_does_not_retrieve_schema_urls_from_the_networkcCsZd}dtƒi|jd<|j |¡&}| ||jdd¡Wdƒn1sL0YdS)Nz#/properties/foor*r©)r]r­r+rFrr±rrrÚtest_it_resolves_local_refs%sz+TestRefResolver.test_it_resolves_local_refscCsšdddidœ}tjj|dd„d}| d¡ }| ||d ¡Wdƒn1sR0Y| d ¡ }| ||d ¡Wdƒn1sŒ0YdS) Nzhttp://bar/schema#r*r•)r=ršcSs | dd¡SrArCrjrrrrG/rHzETestRefResolver.test_it_resolves_local_refs_with_id..©rJz#/aršzhttp://bar/schema#/a)r r,Ú from_schemarFr©r#rr+r²rrrÚ#test_it_resolves_local_refs_with_id+sþ . z3TestRefResolver.test_it_resolves_local_refs_with_idcCsˆ|j |j¡}| ||j¡Wdƒn1s20Yddi|jjd<|j d¡}| |d¡Wdƒn1sz0YdS)Nr*rZZ cached_refzcached_ref#/foo)r+rFr®rr¯r)r)r#r²rrrÚtest_it_retrieves_stored_refs6s ,z-TestRefResolver.test_it_retrieves_stored_refscCs|d}ddi}dtjvr.| tjjdtjd¡td|iƒtjd<|j |¡}| |d¡Wdƒn1sn0YdS)Núhttp://bar#bazr§rZÚrequestsú http://bar)r€rrÚ __setitem__ÚReallyFakeRequestsr+rFr)r#r-rr²rrrÚ,test_it_retrieves_unstored_refs_via_requests>s ÿz.fake_urlopenÚurlopen) r€rrr½rÚsetattrr rÈr+rFr)r#r-rÇr²rrÆrÚ+test_it_retrieves_unstored_refs_via_urlopenKs ÿ z;TestRefResolver.test_it_retrieves_unstored_refs_via_urlopencCsštjddd0}| tj|j¡t ddi|¡Wdƒn1sD0Yd t |jƒ¡}|j   |¡}|  |d¡Wdƒn1sŒ0YdS)NFZwt)ÚdeleteÚmoder*r•z file://{}#foo) ÚtempfileZNamedTemporaryFilerÚosÚremoverÄrÁÚdumprçr r+rFr)r#Ztempfr-r²rrrÚ(test_it_retrieves_local_refs_via_urlopenas .z8TestRefResolver.test_it_retrieves_local_refs_via_urlopencCsddi}tjj|dd„d}| |jd¡| |jd¡| d¡}| ||¡Wdƒn1sd0Y| d¡}| ||¡Wdƒn1sš0Y| d¡}| ||¡Wdƒn1sÐ0Y| d¡}| ||¡Wdƒn1s0YdS) Nr=r*cSs | dd¡SrArCrjrrrrGnrHzPTestRefResolver.test_it_can_construct_a_base_uri_from_a_schema..rµrBú#zfoo#©r r,r¶rr°Zresolution_scoperFr·rrrÚ.test_it_can_construct_a_base_uri_from_a_schemajsþ * * * z>TestRefResolver.test_it_can_construct_a_base_uri_from_a_schemacCsœi}tj |¡}| |jd¡| |jd¡| d¡}| ||¡Wdƒn1sX0Y| d¡}| ||¡Wdƒn1sŽ0YdS)NrBrÒrÓr·rrrÚ9test_it_can_construct_a_base_uri_from_a_schema_without_id{s  * zITestRefResolver.test_it_can_construct_a_base_uri_from_a_schema_without_idcsj‡‡‡fdd„}ddi‰d‰tjdid|id}| ˆ¡}ˆ |ˆ¡Wdƒn1s\0YdS)Ncsˆ |ˆ¡ˆSr%rDrÄ©r-rr#rrÚhandler†s z@TestRefResolver.test_custom_uri_scheme_handlers..handlerr*r•ú foo://barrB©Úhandlers)r r,rFr)r#r×r+r²rrÖrÚtest_custom_uri_scheme_handlers…s  z/TestRefResolver.test_custom_uri_scheme_handlerscsˆtƒg‰‡‡fdd„}d}tjdidd|id}| |¡Wdƒn1sP0Y| |¡Wdƒn1sz0YdS)Ncs,z ˆ ¡WSty&ˆ d¡Yn0dS)Nz#Response must not have been cached!©r9Ú IndexErrorr_rÄ©Úresponser#rrrדs  z5TestRefResolver.test_cache_remote_on..handlerrØrBTr*©Z cache_remoterÚ©r]r r,rF©r#r×r-r+rrÞrÚtest_cache_remote_ons ÿ  z$TestRefResolver.test_cache_remote_oncs^tƒg‰‡‡fdd„}d}tjdidd|id}| |¡Wdƒn1sP0YdS)Ncs,z ˆ ¡WSty&ˆ d¡Yn0dS)NzHandler called twice!rÜrÄrÞrrr×¥s  z6TestRefResolver.test_cache_remote_off..handlerrØrBFr*ràrárârrÞrÚtest_cache_remote_off¢s ÿ z%TestRefResolver.test_cache_remote_offc s¤tdƒ‰‡fdd„}d}tjdid|id}| tj¡D}| |¡| d¡Wdƒn1sd0YWdƒn1s‚0Y| |j t ˆ¡¡dS) NzOh no! What's this?csˆ‚dSr%rrÄ©rrrr×µszTTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_error..handlerrØrBr*rÙzShouldn't get this far!) rbr r,r„r ÚRefResolutionErrorrFr_rr…)r#r×r-r+ÚerrrrårÚ3test_if_you_give_it_junk_you_get_a_resolution_error²s  FzCTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_errorcCs^t di¡}| ¡| tj¡}| ¡Wdƒn1s>0Y| dt|jƒ¡dS)NrBzFailed to pop the scope) r r,Z pop_scoper„r rærLrwr…)r#r+ÚexcrrrÚ.test_helpful_error_message_on_failed_pop_scope¿s  &z>TestRefResolver.test_helpful_error_message_on_failed_pop_scopeN)r:rlrmr°r®r¯r$r³r´r¸r¹r¿rÊrÑrÔrÕrÛrãrärèrêrrrrr¬ s$       r¬cCsdd„}t||dS)NcSs dd„|jDƒdd„|jDƒfS)NcSsg|] }t|ƒ‘qSr©rwr¢rrrrVÊrHz.sorted_errors..key..cSsg|] }t|ƒ‘qSrrër¢rrrrVËrH)rûr.rårrrÚkeyÈsþzsorted_errors..key)rì)r£)r3rìrrrrÇsrc@seZdZe ¡Zdd„ZdS)r¾cCs2|j |¡}|dur$tdt|ƒƒ‚tt |¡ƒS)Nz Unknown URL: )Ú _responsesrDrbrÚÚ_ReallyFakeJSONResponserÁrÂ)r#rÅrßrrrrDÕs zReallyFakeRequests.getN)r:rlrmÚattrÚibrírDrrrrr¾Ðsr¾c@seZdZe ¡Zdd„ZdS)rîcCs t |j¡Sr%)rÁÚloadsÚ _responser"rrrrÁász_ReallyFakeJSONResponse.jsonN)r:rlrmrïrðròrÁrrrrrîÜsrî)0Ú collectionsrÚ contextlibrZdecimalrÚiorrkrrÁrÎr€rÍZtwisted.trial.unittestrrïZ jsonschemarr r r Zjsonschema.compatr r Zjsonschema.tests._helpersrrrrnr—r³rõr]r/r9rlrwr~rr€rrœr¬rrFr¾rîrrrrÚsV       ]"/o sN;