B ÉpSeêëã@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)NzWhoops!)Ú startswithr ÚValidationError)Ú validatorrÚinstanceÚschema©rúQ/opt/alt/python37/lib/python3.7/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)Nz$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 rr)rrrrÚ test_attrs*szTestCreateAndExtend.test_attrscCs ddi}| | |¡j|¡dS)NrÚfoo)rrr)rrrrrÚ test_init7szTestCreateAndExtend.test_initcCs€ddi}| |¡j}t|dƒƒ}| |g¡tjdd|ddtdgƒd}t|dƒƒ}| t|ƒd¡| |d ¡| ¡¡dS) NrZhelZhellozWhoops!Zgoodbye)rrrÚvalidator_valueÚ schema_pathér) rÚ iter_errorsÚlistrr rrÚlenZ _contents)rrr*ÚerrorsZexpected_errorrrrÚtest_iter_errors;s    z$TestCreateAndExtend.test_iter_errorscCs4tjddidd}| tjjd¡| |jd¡dS)Nz$idÚ somethingz my version)rÚversionZMyVersionValidator)r rrrÚpoprÚ__name__)rrrrrÚ.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 rrr)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)Nzmeta schema idr4z my versioncSs | dd¡S)Nr4Ú)Úget)ÚsrrrÚcózMTestCreateAndExtend.test_validates_registers_meta_schema_id..)rr0Úid_of)r rrrr1ÚassertIn)rÚmeta_schema_keyÚmy_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)Nzmeta schema $idz$idz my version)rr0)r rrrr1r=)rr>r?rrrÚ.test_validates_registers_meta_schema_draft6_idiszBTestCreateAndExtend.test_validates_registers_meta_schema_draft6_idc sDtjidd‰| t‡fdd„dgfdddd d ifd gDƒƒ¡dS) Nr)rr c3s$|]\}}ˆiƒj||dVqdS))rÚtypeN)Úis_type)Ú.0rBr)rrrú ysz@TestCreateAndExtend.test_create_default_types..Úarray)ÚbooleanT)Úintegeré )ÚnullN)Únumberg(@Úobject)Ústringr%)r rÚ assertTrueÚall)rr)rrÚ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 )rQ) rrr!rLr Úextendrr"r#)rr5rQÚ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__)r8rÚID_OF)r)rrrr< sz3TestCreateAndExtend.test_extend_idof..id_ofzthe://correct/id/zthe://wrong/id/)z$idrU)rr rr<N)r rrrrVr"rR)rr<Z correct_idrZOriginalZDerivedr)rrÚtest_extend_idofœs  z$TestCreateAndExtend.test_extend_idofN)r2Ú __module__Ú __qualname__r r$r&r.r3r6r@rArPrTrWrrrrrs   rc@steZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)ÚTestLegacyTypeCheckingc Cs:tjidd}| t|jƒddddddd h¡| ¡dS) Nr)rr rFrGrHrJrKrLrM)r rrÚsetÚ DEFAULT_TYPESÚ flushWarnings)rrrrrrP´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)Nr)rr rQ)r rÚmessage)rQ) r rrr!rLrRrr"r#r\r])rrr5rQrSrrrrTÂs*   z"TestLegacyTypeChecking.test_extendcCsPddi}| t |¡ d¡¡tj|dttfid}| | d¡¡| ¡dS)NrBrMrI)Útypes)Ú assertFalser ÚDraft7ValidatorÚis_validÚstrÚintrNr])rrrrrrÚ0test_types_redefines_the_validators_type_checkerászGTestLegacyTypeChecking.test_types_redefines_the_validators_type_checkerc Cs.|jtdtj|jjjtjiidtiddS)NzPThe default_types argument is deprecated. Use the type_checker argument instead.r%)Úcategoryr^ÚfilenameÚfrr Ú default_types) Ú assertWarnsÚDeprecationWarningÚsysÚmodulesrXÚ__file__r rrL)rrrrÚ"test_providing_default_types_warnsìsz9TestLegacyTypeChecking.test_providing_default_types_warnsc Csvtjiitƒd}| tj¡ }|jWdQRX| dt|jƒ¡| tj¡|iƒjWdQRX|  |  ¡¡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. )rr rNz=DEFAULT_TYPES cannot be used on Validators using TypeCheckers) r rr Ú assertRaisesZ _DontDoThatr\r=rcÚ exceptionr`r])rrÚ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)N)rr r)r rr r`r])rrrrrÚ2test_providing_explicit_type_checker_does_not_warns zITestLegacyTypeChecking.test_providing_explicit_type_checker_does_not_warncCs6tjiid}| | ¡¡|iƒ| | ¡¡dS)N)rr )r rr`r])rrrrrÚ$test_providing_neither_does_not_warn#sz;TestLegacyTypeChecking.test_providing_neither_does_not_warnc CsR| t¡}tjiidtitƒdWdQRX| dt|jƒ¡|  |  ¡¡dS)Nr%)rr rirz:Do not specify default_types when providing a type checker) rpÚ TypeErrorr rrLr r=rcrqr`r])rrrrrrÚ5test_providing_default_types_with_type_checker_errors*s  zLTestLegacyTypeChecking.test_providing_default_types_with_type_checker_errorsc CsZtjiidtid}| t¡}tj|itƒdWdQRX| dt|j ƒ¡|  ¡dS)NrF)rr ri)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 rr+rprvrRr r=rcrqr])rrrrrrrÚ.z%r is disallowed for [1, 2]r‡z[1, 2] is too shortz[1, 2] is not one of %rrˆ)rr*rÚsorted)rrrZgotZexpectedrrrr.“s zTestIterErrors.test_iter_errorscCs\ddgdddœ}dddid did dd d d gdœdœi}t|j ||¡ƒ}| t|ƒd ¡dS)Nrr)éÚspam)r%r}ÚbazÚquuxÚ propertiesrBrMr‰é ééé)Úmaximumrˆ)r%r}r)r+rr*rr,)rrrr-rrrÚ0test_iter_errors_multiple_failures_one_validator£sz?TestIterErrors.test_iter_errors_multiple_failures_one_validatorN)r2rXrYr r.r•rrrrrsrc@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)*ÚTestValidationErrorMessagesc OsB| dtj¡| tj¡}tj||f|ž|ŽWdQRX|jjS)NÚcls) Ú setdefaultr r€rpr rÚvalidaterqr^)rrrÚargsÚkwargsrrrrrÚ message_for²sz'TestValidationErrorMessages.message_forcCs&|jdddid}| |dd¡dS)Nr)rBrM)rrz1 is not of type %r)rœr)rr^rrrÚtest_single_type_failure¸sz4TestValidationErrorMessages.test_single_type_failurecCs(|jdddgid}| |dd¡dS)Nr)rBrM)rrz1 is not of type %r)rœr)rr^rrrÚtest_single_type_list_failure¼sz9TestValidationErrorMessages.test_single_type_list_failurecCs.d}|jddt|ƒid}| |d|¡dS)N)rMrLr)rB)rrz1 is not of type %r, %r)rœr+r)rr_r^rrrÚtest_multiple_type_failureÀsz6TestValidationErrorMessages.test_multiple_type_failurecCs2dddigi}|jdd|gid}| |d¡dS)NrBÚminimumr†r))rrz1 is less than the minimum of 3)rœr)rrBr^rrrÚ&test_object_without_title_type_failureÅszBTestValidationErrorMessages.test_object_without_title_type_failurecCs.ddddœgi}|jd|d}| |d¡dS)NrBZFoor†)Únamer r))rrz1 is less than the minimum of 3)rœr)rrr^rrrÚ#test_object_with_named_type_failureÊsz?TestValidationErrorMessages.test_object_with_named_type_failurecCs"|jdddid}| |d¡dS)Nr)r r)rrz1 is less than the minimum of 2)rœr)rr^rrrÚ test_minimumÏsz(TestValidationErrorMessages.test_minimumcCs"|jdddid}| |d¡dS)Nr)r”r)rrz"1 is greater than the maximum of 0)rœr)rr^rrrÚ test_maximumÓsz(TestValidationErrorMessages.test_maximumcCsBd\}}d||ii}|jddi|tjd}| |d||f¡dS)N)r}r%Ú dependenciesr}r)rrr—z%r is a dependency of %r)rœr r€r)rÚdependÚonrr^rrrÚ test_dependencies_single_element×s  z.ÚformatZbla)rrÚformat_checkerzis not a)rÚchecksrœr=r´)rÚcheckerrr^rrrÚ#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)NrLFrBrM)z^abc$z^def$)rBr°ÚpatternPropertiesÚzebraé{)rrr—z,{} does not match any of the regexes: {}, {}z^abc$z^def$iÈ)rÄÚfishz.{}, {} do not match any of the regexes: {}, {}rÆ)rœr ÚDraft4Validatorrr¾r´)rrr^rrrÚ1test_additionalProperties_false_patternProperties8s(  zMTestValidationErrorMessages.test_additionalProperties_false_patternPropertiescCs"|jddtjd}| d|¡dS)Nr/F)rrr—z'False schema does not allow 'something')rœr rar=)rr^rrrÚtest_False_schemaVs  z-TestValidationErrorMessages.test_False_schemaN)r2rXrYrœrrž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 dddgƒ¡| |j¡| |jd¡| |j|ddd¡| |j|¡| |j |dd¡| |j |¡| |j t gƒ¡| |jt gƒ¡| |jt gƒ¡| |jt ddgƒ¡| |jt ddgƒ¡| |jt dddgƒ¡| t|jƒd¡dS) NéÚanyOfr érBrMr)rr)r rÇr+r*rr,rr'rrÚ assertIsNoneÚparentÚpathrÚ relative_pathÚ absolute_pathr(Úrelative_schema_pathÚabsolute_schema_pathÚcontextÚ sorted_errorsÚassertIsr`)rrrrr-rrÚe1Úe2rrrÚ test_anyOfbs\    z%TestValidationErrorDetails.test_anyOfc Csü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 dd dgƒ¡| |j¡| |jd¡| |jdg¡| |jd¡| |j ddgi¡| |j |¡| |j t dgƒ¡| |jt dgƒ¡| |jt dgƒ¡| |jt dd ddgƒ¡| |jt dd ddgƒ¡| |jt ddd ddgƒ¡| |j¡dS) Nr%r)rBrHrLrˆr)rBrrr)r r€r+r*rr,rr'rrrÎrÏrÐrrÑrÒr(rÓrÔrÕrÖr×r`)rrrrr-rrrØrÙrrrÚ test_type¤sd   z$TestValidationErrorDetails.test_typec Cs†ddgdddœ}dddid did dd d d gdœ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)Nrr)r‹rŒ)r%r}rrŽrrBrMr‰rr‘r’r“)r”rˆ)r%r}rr}rr%rˆr”) r r€r*rÖrrÐrrÑrÒr) rrrrr-rØrÙÚe3Úe4rrrÚtest_single_nestingîs0  z.TestValidationErrorDetails.test_single_nestingc Csèddddgidœdg}dddgddd gid d d id didœdœdœdœdœ}t |¡}| |¡}t|ƒ\}}}}} } | |jtgƒ¡| |jtdgƒ¡| |jtddgƒ¡| |jtdddgƒ¡| | jtdddgƒ¡| | jtddgƒ¡| |jtdgƒ¡| |jtddgƒ¡| t|jƒddddg¡| t|jƒdddddd g¡| t| jƒdddddd g¡| t| jƒddddg¡| |j d¡| |j d¡| |j d¡| |j d ¡| | j d ¡| | j d¡dS)Nr)rr)r%r}rŽrMrLrˆr†rFÚrequiredTr‰)r}r)rBr)rBr¬rr}r%rBr¬r) r r€r*rÖrrÐrr(r+r) rrrrr-rØrÙrÜrÝZe5Ze6rrrÚtest_multiple_nestingsD   z0TestValidationErrorDetails.test_multiple_nestingcCsDdddddgddiddd d iid œd œd œgiiddgdd d iidœ}dddddddiid œid œi}t |¡}| |¡\}| |jtdgƒ¡| |jtdddgƒ¡|j\}| |jtdddgƒ¡| |jtdddddddddg ƒ¡|j\}| |jtdddddgƒ¡| |jtdddddddddddddddgƒ¡dS)NÚnoderÌrLr¢ÚchildrenrBrMz^.*$z$refz#/definitions/node)rBrÃ)r¢râ)rBrßrÚroot)Ú definitionsrBrßrr‚ÚabrrrÃ)r rÇr*rrÒrrÔrÕ)rrrrrrrØrÙrrrÚtest_recursiveFsp   z)TestValidationErrorDetails.test_recursivecCs€dddœ}ddddœi}t |¡}| |¡}t|ƒ\}}| |jtdgƒ¡| |jtdgƒ¡| |jd ¡| |jd ¡dS) Nr}r)r}r%r°rHrË)rBr r%rBr )r r€r*rÖrrÐrr)rrrrr-rØrÙrrrÚtest_additionalProperties¨s    z4TestValidationErrorDetails.test_additionalPropertiescCsˆdddœ}dddiddidœi}t |¡}| |¡}t|ƒ\}}| |jtd gƒ¡| |jtd gƒ¡| |jd¡| |jd¡dS) Nr)r)r}r%rÃrBrMr rËr}r%)r r€r*rÖrrÐrr)rrrrr-rØrÙrrrÚtest_patternProperties¶s    z1TestValidationErrorDetails.test_patternPropertiescCs€ddg}gdddœdœ}t |¡}| |¡}t|ƒ\}}| |jtdgƒ¡| |jtdgƒ¡| |jd¡| |jd ¡dS) Nr%r)rHrË)rBr )r¬r­rrBr )r r€r*rÖrrÐrr)rrrrr-rØrÙrrrÚtest_additionalItemsÉs   z/TestValidationErrorDetails.test_additionalItemscCs„dddg}igdddœdœ}t |¡}| |¡}t|ƒ\}}| |jtdgƒ¡| |jtdgƒ¡| |jd ¡| |jd ¡dS) Nr%r}r)rHrË)rBr )r¬r­rrBr )r r€r*rÖrrÐrr)rrrrr-rØrÙrrrÚtest_additionalItems_with_itemsÚs    z:TestValidationErrorDetails.test_additionalItems_with_itemscCs‚ddi}ddddiii}t |¡}| |¡\}| |jd¡| |jdddidf¡| |jtgƒ¡| |jtddgƒ¡dS)Nr%rIZ propertyNamesÚnotr¶z%r is not allowed for %r) r rar*rrr^rÐrr()rrrrÚerrorrrrÚtest_propertyNamesës  z-TestValidationErrorDetails.test_propertyNamescCsrddiddidœ}t |¡}| d¡\}| |jd¡| |jd¡| |jtgƒ¡| |jtdddgƒ¡dS)Nr¶rIé )ÚifÚthenz13 was expectedrïrð) r rar*rrr^rÐrr()rrrrìrrrÚ test_if_thenús   z'TestValidationErrorDetails.test_if_thencCsrddiddidœ}t |¡}| d¡\}| |jd¡| |jd¡| |jtgƒ¡| |jtdddgƒ¡dS) Nr¶rIrî)rïÚelser‹z13 was expectedrïrò) r rar*rrr^rÐrr()rrrrìrrrÚ test_if_elses   z'TestValidationErrorDetails.test_if_elsec CsNt d¡}| d¡\}| |j|j|j|j|j|j fdddddt gƒf¡dS)NFrIzFalse schema does not allow 12) r rar*rr^rr'rrr(r)rrrìrrrÚ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°rBrHz$refr7)Ústore)Úresolverr%Z notAnIntegerz''notAnInteger' is not of type 'integer') r raÚ RefResolverr*rr^rr'rrÒrr(r)rÚrefrrrìrrrÚtest_ref-s(z#TestValidationErrorDetails.test_refN)r2rXrYrÚrÛrÞràrærçrèrérêrírñrórôrùrrrrrÊ_sBJ"6brÊc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚMetaSchemaTestsMixinc Cs2| tj¡|j ddtƒii¡WdQRXdS)NrÚtest)rpr Ú SchemaErrorrÚ check_schemarL)rrrrÚtest_invalid_propertiesMsz,MetaSchemaTestsMixin.test_invalid_propertiesc Cs,| tj¡|j ddi¡WdQRXdS)Nr‰Ú1)rpr rürrý)rrrrÚ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)rrý)rrrrÚ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ˆrIN)rrý)rrrrÚ!test_enum_allows_non_unique_items^sz6MetaSchemaTestsMixin.test_enum_allows_non_unique_itemsN)r2rXrYrþrrrrrrrrú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\}}| | |¡ |¡¡dS)N)ÚvalidrNrrb)rrrrrrÚtest_valid_instances_are_validhs z1ValidatorTestMixin.test_valid_instances_are_validcCs$|j\}}| | |¡ |¡¡dS)N)Úinvalidr`rrb)rrrrrrÚ$test_invalid_instances_are_not_validls z7ValidatorTestMixin.test_invalid_instances_are_not_validcCs | tƒtƒi¡jtƒddS)N)r)rrLr™)rrrrÚ(test_non_existent_properties_are_ignoredpsz;ValidatorTestMixin.test_non_existent_properties_are_ignoredcCs| | i¡jtj¡dS)N)ZassertIsInstancerrör r÷)rrrrÚ.test_it_creates_a_ref_resolver_if_not_providedss zAValidatorTestMixin.test_it_creates_a_ref_resolver_if_not_providedc CsZdddi}}tjdi||id}|jd|i|d}| tj¡| d¡WdQRXdS)NZ someCoolRefrBrHr7)rõz$ref)rö)r r÷rrpr rr™)rrørrörrrrÚ#test_it_delegates_to_a_ref_resolverys z6ValidatorTestMixin.test_it_delegates_to_a_ref_resolverc sRG‡fdd„dtƒ}|ƒ}ddi}ˆ tj¡ˆj||d d¡WdQRXdS)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)Nzthe refrBrH)r)Úthisrø)rrrÚ resolvingˆs zbValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver..LegacyRefResolver.resolvingN)r2rXrYrr r)rrrÚLegacyRefResolver‡sr z$refzthe ref)röN)rLrpr rrr™)rr rörr)rrÚ*test_it_delegates_to_a_legacy_ref_resolvers z=ValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolvercCs| | i¡ dd¡¡dS)Nr%rM)rNrrC)rrrrÚ#test_is_type_is_true_for_valid_type“sz6ValidatorTestMixin.test_is_type_is_true_for_valid_typecCs| | i¡ dd¡¡dS)Nr%rF)r`rrC)rrrrÚ&test_is_type_is_false_for_invalid_type–sz9ValidatorTestMixin.test_is_type_is_false_for_invalid_typecCs4| | i¡ dd¡¡| | i¡ dd¡¡dS)NTrHrK)r`rrC)rrrrÚ,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)NrBrMsfoo)rr™)rrrrÚ$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%N)rr™)rrrrÚ#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¬rBrKcSst|tttfƒot|tƒ S)N)Ú isinstancerdÚfloatrÚbool)rÁr¼rrrr:­szGValidatorTestMixin.test_it_can_validate_with_decimals..)rr)gš™™™™™ñ?r“r%TcSsg|] }|j‘qSr)r)rDrìrrrú ¸szIValidatorTestMixin.test_it_can_validate_with_decimals..) r rRrr#Úredefiner™rrr*)rrrrrrrrÚ"test_it_can_validate_with_decimals§s z5ValidatorTestMixin.test_it_can_validate_with_decimalscCs"|jdditƒd}| d¡dS)Nr¾Zcarrot)r¿Zbugs)rrr™)rrrrrÚ7test_it_returns_true_for_formats_it_does_not_know_about¼szJValidatorTestMixin.test_it_returns_true_for_formats_it_does_not_know_aboutcCs| i¡}| |j¡dS)N)rrÎr¿)rrrrrÚ,test_it_does_not_validate_formats_by_defaultÂs z?ValidatorTestMixin.test_it_does_not_validate_formats_by_defaultc s|tƒ}tdƒ‰|jdtd‡‡fdd„ƒ}ˆjddi|d}| d¡ˆ tj¡}| d ¡WdQRXˆ |j j ˆ¡dS) NzBad!r%)Zraisescs.|dkr dS|dkrˆ‚nˆ d |¡¡dS)NÚgoodTÚbadz What is {}? [Baby Don't Hurt Me])Úfailr¾)r½)rrrrÚcheckÊs zTValidatorTestMixin.test_it_validates_formats_if_a_checker_is_provided..checkr¾)r¿rr) rÚ ValueErrorrÀrr™rpr rr×rqÚcause)rrÁr rÚcmr)rrrÚ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)NrBcSs t|tƒS)N)rrd)rÁr¼rrrr:år;z@ValidatorTestMixin.test_non_string_custom_type..)rr‹)rLr rRrr#rr™)rZnon_string_typerÚCrazyrrrÚtest_non_string_custom_typeÞs z.ValidatorTestMixin.test_non_string_custom_typec Cs`tj|j|jj ddd„¡d}| tj¡}|ddiƒ d¡WdQRX|  d t |j ƒ¡dS) z‘ A tuple instance properly formats validation errors for uniqueItems. See https://github.com/Julian/jsonschema/pull/224 rFcSs t|tƒS)N)rÚtuple)rÁr¼rrrr:ôr;zNValidatorTestMixin.test_it_properly_formats_tuples_in_errors..)rZ uniqueItemsT)r)r)Nz(1, 1) has non-unique elements) r rRrr#rrpr rr™r=rcrq)rZTupleValidatorrrrrrÚ)test_it_properly_formats_tuples_in_errorsêsz.)rrBrIr%N) r rRrr#rr™rpr r)rr%rrrrÚtest_any_type_is_redefinable#s  z0TestDraft3Validator.test_any_type_is_redefinablecCs"| | i¡ tƒddi¡¡dS)NrBr4)rNrrbrL)rrrrÚ!test_is_type_is_true_for_any_type2sz5TestDraft3Validator.test_is_type_is_true_for_any_typecCs8| | i¡ dd¡¡| | i¡ dddi¡¡dS)NTrGrBr4)rNrrCrb)rrrrÚ6test_is_type_does_not_evade_bool_if_it_is_being_tested5szJTestDraft3Validator.test_is_type_does_not_evade_bool_if_it_is_being_testedN) r2rXrYr r€rrrr5r6r7r8rrrrr3s r3c@s&eZdZejZiifZddidfZdS)ÚTestDraft4ValidatorrBrHr%N)r2rXrYr rÇrrrrrrrr9:sr9c@s&eZdZejZiifZddidfZdS)ÚTestDraft6ValidatorrBrHr%N)r2rXrYr r·rrrrrrrr:@sr:c@s&eZdZejZiifZddidfZdS)ÚTestDraft7ValidatorrBrHr%N)r2rXrYr rarrrrrrrr;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)Nz$schemaz&http://json-schema.org/draft-03/schemaz'http://json-schema.org/draft-03/schema#)r×r Ú validator_forr€)rrrrrÚ test_draft_3MszTestValidatorFor.test_draft_3cCs<ddi}| t |¡tj¡ddi}| t |¡tj¡dS)Nz$schemaz&http://json-schema.org/draft-04/schemaz'http://json-schema.org/draft-04/schema#)r×r r=rÇ)rrrrrÚ test_draft_4ZszTestValidatorFor.test_draft_4cCs<ddi}| t |¡tj¡ddi}| t |¡tj¡dS)Nz$schemaz&http://json-schema.org/draft-06/schemaz'http://json-schema.org/draft-06/schema#)r×r r=r·)rrrrrÚ test_draft_6gszTestValidatorFor.test_draft_6cCs<ddi}| t |¡tj¡ddi}| t |¡tj¡dS)Nz$schemaz&http://json-schema.org/draft-07/schemaz'http://json-schema.org/draft-07/schema#)r×r r=ra)rrrrrÚ test_draft_7tszTestValidatorFor.test_draft_7cCs| t d¡tj¡dS)NT)r×r r=Ú_LATEST_VERSION)rrrrÚ test_TrueszTestValidatorFor.test_TruecCs| t d¡tj¡dS)NF)r×r r=rB)rrrrÚ test_False‡szTestValidatorFor.test_FalsecCs6tjddiddd„d}ddi}| t |¡|¡dS)Nr4zmeta schema idZ12cSs | dd¡S)Nr4r7)r8)r9rrrr:‘r;z8TestValidatorFor.test_custom_validator..)rr0r<z$schema)r rr×r=)rrrrrrÚtest_custom_validators z&TestValidatorFor.test_custom_validatorcCs0tjddidd}ddi}| t |¡|¡dS)Nz$idzmeta schema $idZ13)rr0z$schema)r rr×r=)rrrrrrÚtest_custom_validator_draft6™sz-TestValidatorFor.test_custom_validator_draft6cCs| t i¡tj¡dS)N)r×r r=rB)rrrrÚ%test_validator_for_jsonschema_default¤sz6TestValidatorFor.test_validator_for_jsonschema_defaultcCs| tjiddd¡dS)N)Údefault)r×r r=)rrrrÚ!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.z$schemaZ unknownSchema)rfr^rgrhrrH)rjrkrlrmrXrnr r=)rrrrÚ1test_warns_if_meta_schema_specified_was_not_foundªszBTestValidatorFor.test_warns_if_meta_schema_specified_was_not_foundcCs"tjiidf| | ¡¡dS)N)rrH)r r=r`r])rrrrÚ0test_does_not_warn_if_meta_schema_is_unspecifiedºszATestValidatorFor.test_does_not_warn_if_meta_schema_is_unspecifiedN)r2rXrYr>r?r@rArCrDrErFrGrIrJrKrrrrr<Ls      r<c@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)Ú TestValidatecCs2g}| |d|j¡t i|¡| ||g¡dS)Nrý)ÚpatchÚappendr r™r)rrrÚresultrrrÚ assertUsesÀs zTestValidate.assertUsescCs,|jdditjd|jdditjddS)Nz$schemaz'http://json-schema.org/draft-03/schema#)rrz&http://json-schema.org/draft-03/schema)rPr r€)rrrrÚtest_draft3_validator_is_chosenÆs  z,TestValidate.test_draft3_validator_is_chosencCs,|jdditjd|jdditjddS)Nz$schemaz'http://json-schema.org/draft-04/schema#)rrz&http://json-schema.org/draft-04/schema)rPr rÇ)rrrrÚtest_draft4_validator_is_chosenÑs  z,TestValidate.test_draft4_validator_is_chosencCs,|jdditjd|jdditjddS)Nz$schemaz'http://json-schema.org/draft-06/schema#)rrz&http://json-schema.org/draft-06/schema)rPr r·)rrrrÚtest_draft6_validator_is_chosenÜs  z,TestValidate.test_draft6_validator_is_chosencCs,|jdditjd|jdditjddS)Nz$schemaz'http://json-schema.org/draft-07/schema#)rrz&http://json-schema.org/draft-07/schema)rPr ra)rrrrÚtest_draft7_validator_is_chosençs  z,TestValidate.test_draft7_validator_is_chosencCs|jitjddS)N)rr)rPr ra)rrrrÚ$test_draft7_validator_is_the_defaultòsz1TestValidate.test_draft7_validator_is_the_defaultc Cs>| tj¡}t dddi¡WdQRX| t|jƒd¡dS)NrIrBrMz3(?s)Failed validating u?'.*' in schema.*On instance)rpr rr r™ÚassertRegexpMatchesrcrq)rrrrrrÚtest_validation_error_messageõs z*TestValidate.test_validation_error_messagec Cs>| tj¡}t dddi¡WdQRX| t|jƒd¡dS)NrIrBz5(?s)Failed validating u?'.*' in metaschema.*On schema)rpr rür r™rVrcrq)rrrrrrÚtest_schema_error_messageýs z&TestValidate.test_schema_error_messagec CsNdddiddigi}| tj¡}t d|¡WdQRX| dt|jƒ¡dS)NÚoneOfrBrMrFrIz12 is not of type)rpr rr r™r=rcrq)rrrrrrrÚtest_it_uses_best_matchsz$TestValidate.test_it_uses_best_matchN) r2rXrYrPrQrRrSrTrUrWrXrZrrrrrL¿s    rLc@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)$ÚTestRefResolverr7z foo://storedZstoredrcCs.i|_|j|ji|_t |j|j|j¡|_dS)N)ÚreferrerÚ stored_uriÚ stored_schemarõr r÷Úbase_urirö)rrrrr szTestRefResolver.setUpc sPtjjd}ˆ ˆjd‡fdd„¡ˆj |¡}WdQRXˆ |tjj¡dS)Nr4Zresolve_remotecs ˆ d¡S)NzShould not have been called!)r)ršr›)rrrr:r;zXTestRefResolver.test_it_does_not_retrieve_schema_urls_from_the_network..)r r€r"rMrör r)rrøÚresolvedr)rrÚ6test_it_does_not_retrieve_schema_urls_from_the_networks  zFTestRefResolver.test_it_does_not_retrieve_schema_urls_from_the_networkc CsFd}dtƒi|jd<|j |¡}| ||jdd¡WdQRXdS)Nz#/properties/foor%r)rLr\rör r)rrør`rrrÚtest_it_resolves_local_refs%sz+TestRefResolver.test_it_resolves_local_refsc Csrdddidœ}tjj|dd„d}| d¡}| ||d ¡WdQRX| d ¡}| ||d ¡WdQRXdS) Nzhttp://bar/schema#r%r})r4r‚cSs | dd¡S)Nr4r7)r8)rrrrr:/r;zETestRefResolver.test_it_resolves_local_refs_with_id..)r<z#/ar‚zhttp://bar/schema#/a)r r÷Ú from_schemar r)rrrör`rrrÚ#test_it_resolves_local_refs_with_id+s   z3TestRefResolver.test_it_resolves_local_refs_with_idc Cs`|j |j¡}| ||j¡WdQRXddi|jjd<|j d¡}| |d¡WdQRXdS)Nr%rIZ cached_refzcached_ref#/foo)rör r]r×r^rõr)rr`rrrÚtest_it_retrieves_stored_refs6s z-TestRefResolver.test_it_retrieves_stored_refsc Cshd}ddi}dtjkr.| tjjdtjd¡td|iƒtjd<|j |¡}| |d¡WdQRXdS)Nzhttp://bar#bazrrIÚrequestsz http://bar)rlrmrÚ __setitem__ÚReallyFakeRequestsrör r)rrørr`rrrÚ,test_it_retrieves_unstored_refs_via_requests>s z.fake_urlopenÚurlopen) rlrmrrgrÚsetattrr rprör r)rrøror`r)rrrÚ+test_it_retrieves_unstored_refs_via_urlopenKs   z;TestRefResolver.test_it_retrieves_unstored_refs_via_urlopenc Csrtjddd&}| tj|j¡t ddi|¡WdQRXd t |jƒ¡}|j   |¡}|  |d¡WdQRXdS)NFÚwt)ÚdeleteÚmoder%r}z file://{}#foo) ÚtempfileÚNamedTemporaryFilerÚosÚremover¢rkÚdumpr¾r rör r)rZtempfrør`rrrÚ(test_it_retrieves_local_refs_via_urlopenas z8TestRefResolver.test_it_retrieves_local_refs_via_urlopenc CsÄddi}tjj|dd„d}| |jd¡| |jd¡| d¡}| ||¡WdQRX| d¡}| ||¡WdQRX| d¡}| ||¡WdQRX| d¡}| ||¡WdQRXdS) Nr4r%cSs | dd¡S)Nr4r7)r8)rrrrr:nr;zPTestRefResolver.test_it_can_construct_a_base_uri_from_a_schema..)r<r7ú#zfoo#)r r÷rcrr_Úresolution_scoper )rrrör`rrrÚ.test_it_can_construct_a_base_uri_from_a_schemajs     z>TestRefResolver.test_it_can_construct_a_base_uri_from_a_schemac Csti}tj |¡}| |jd¡| |jd¡| d¡}| ||¡WdQRX| d¡}| ||¡WdQRXdS)Nr7r|)r r÷rcrr_r}r )rrrö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_idc sV‡‡‡fdd„}ddi‰d‰tjdid|id}| ˆ¡}ˆ |ˆ¡WdQRXdS)Ncsˆ |ˆ¡ˆS)N)r)rn)rørrrrÚhandler†s z@TestRefResolver.test_custom_uri_scheme_handlers..handlerr%r}z foo://barr7)Úhandlers)r r÷r r)rr€rör`r)rørrrÚtest_custom_uri_scheme_handlers…s  z/TestRefResolver.test_custom_uri_scheme_handlersc s`tƒg‰‡‡fdd„}d}tjdidd|id}| |¡WdQRX| |¡WdQRXdS)Ncs,yˆ ¡Stk r&ˆ d¡YnXdS)Nz#Response must not have been cached!)r1Ú IndexErrorr)rn)Úresponserrrr€“sz5TestRefResolver.test_cache_remote_on..handlerz foo://barr7Tr%)Ú cache_remoter)rLr r÷r )rr€rørör)r„rrÚtest_cache_remote_ons   z$TestRefResolver.test_cache_remote_onc sJtƒg‰‡‡fdd„}d}tjdidd|id}| |¡WdQRXdS)Ncs,yˆ ¡Stk r&ˆ d¡YnXdS)NzHandler called twice!)r1rƒr)rn)r„rrrr€¥sz6TestRefResolver.test_cache_remote_off..handlerz foo://barr7Fr%)r…r)rLr r÷r )rr€rørör)r„rrÚtest_cache_remote_off¢s z%TestRefResolver.test_cache_remote_offc s|tdƒ‰‡fdd„}d}tjdid|id}| tj¡&}| |¡| d¡WdQRXWdQRX| |j t ˆ¡¡dS) NzOh no! What's this?csˆ‚dS)Nr)rn)rìrrr€µszTTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_error..handlerz foo://barr7r%)rzShouldn't get this far!) r!r r÷rpr ÚRefResolutionErrorr rrrq)rr€røröÚerrr)rìrÚ3test_if_you_give_it_junk_you_get_a_resolution_error²s  zCTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_errorc CsJt di¡}| ¡| tj¡}| ¡WdQRX| dt|jƒ¡dS)Nr7zFailed to pop the scope) r r÷Z pop_scoperpr rˆr=rcrq)rröÚexcrrrÚ.test_helpful_error_message_on_failed_pop_scope¿s  z>TestRefResolver.test_helpful_error_message_on_failed_pop_scopeN)r2rXrYr_r]r^r rarbrdrerirrr{r~rr‚r†r‡rŠrŒrrrrr[ s$       r[cCsdd„}t||dS)NcSs dd„|jDƒdd„|jDƒfS)NcSsg|] }t|ƒ‘qSr)rc)rDrrrrrrÊsz.sorted_errors..key..cSsg|] }t|ƒ‘qSr)rc)rDrrrrrrËs)rÐr()rìrrrÚkeyÈszsorted_errors..key)r)rŠ)r-rrrrrÖÇsrÖc@seZdZe ¡Zdd„ZdS)rhcCs2|j |¡}|dkr$tdt|ƒƒ‚tt |¡ƒS)Nz Unknown URL: )Ú _responsesr8r!r´Ú_ReallyFakeJSONResponserkrl)rrnr„rrrr8Õs zReallyFakeRequests.getN)r2rXrYÚattrÚibrŽr8rrrrrhÐsrhc@seZdZe ¡Zdd„ZdS)rcCs t |j¡S)N)rkÚloadsÚ _response)rrrrrkász_ReallyFakeJSONResponse.jsonN)r2rXrYrr‘r“rkrrrrrÜsr)0Ú collectionsrÚ contextlibrZdecimalrÚiorr)rrkrxrlrvZtwisted.trial.unittestrrZ jsonschemarr r r Zjsonschema.compatr r Zjsonschema.tests._helpersrrrrZrr–rÊrLrúrr*r3r9r:r;r<rLr[rÖr9rhrrrrrÚsV       ]"/o sN;