U
    ±[Öeêë  ã                   @   sê  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dlZd dlZd dlZd dlZd dlmZ d dlZd dlmZmZmZmZ d d	lmZmZ d d
lmZ dd„ ZG dd„ deƒZG dd„ deƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ de	ƒZ G dd„ de!ƒZ"G dd„ de"e!ƒZ#G dd„ de!ƒZ$G dd„ de$e#e	ƒZ%G dd „ d e$e#e	ƒZ&G d!d"„ d"e#e	ƒZ'G d#d$„ d$e#e	ƒZ(G d%d&„ d&eƒZ)G d'd(„ d(eƒZ*G d)d*„ d*eƒZ+d+d,„ Z,ej-G d-d.„ d.e!ƒƒZ.ej-G d/d0„ d0e!ƒƒZ/dS )1é    )Údeque)Úcontextmanager)ÚDecimal)ÚBytesIO)ÚTestCaseN)ÚSynchronousTestCase)ÚFormatCheckerÚTypeCheckerÚ
exceptionsÚ
validators)ÚPY3Úpathname2url)Úbugc                 c   s   |  |¡st d¡V  d S )NúWhoops!)Ú
startswithr
   ÚValidationError)Ú	validatorr   ÚinstanceÚschema© r   úb/var/www/html/services/stratfitenv/lib/python3.8/site-packages/jsonschema/tests/test_validators.pyr      s    
r   c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestCreateAndExtendc                 C   sP   |   | jtjttjƒ¡ ddi| _dti| _tƒ | _tj	| j| j| jd| _
d S )Nú$idzsome://meta/schemar   ©Úmeta_schemar   Útype_checker)Ú
addCleanupÚassertEqualr   Úmeta_schemasÚdictr   r   r	   r   ÚcreateÚ	Validator©Úselfr   r   r   ÚsetUp   s    ý

ýzTestCreateAndExtend.setUpc                 C   s.   |   | jj| jj| jjf| j| j| jf¡ d S ©N)r   r!   Ú
VALIDATORSÚMETA_SCHEMAÚTYPE_CHECKERr   r   r   r"   r   r   r   Ú
test_attrs*   s    ýýûzTestCreateAndExtend.test_attrsc                 C   s    ddi}|   |  |¡j|¡ d S )Nr   Úfoo)r   r!   r   ©r#   r   r   r   r   Ú	test_init7   s    zTestCreateAndExtend.test_initc                 C   s€   ddi}|   |¡j}t|dƒƒ}|  |g ¡ tjdd|ddtdgƒd}t|dƒƒ}|  t|ƒd¡ |  |d  ¡ | ¡ ¡ d S )	Nr   ZhelZhellor   Zgoodbye)r   r   r   Úvalidator_valueÚschema_pathé   r   )	r!   Úiter_errorsÚlistr   r
   r   r   ÚlenZ	_contents)r#   r   r0   ÚerrorsZexpected_errorr   r   r   Útest_iter_errors;   s    ú	z$TestCreateAndExtend.test_iter_errorsc                 C   s4   t jddidd}|  t jjd¡ |  |jd¡ d S )Nr   Ú	somethingú
my version©r   ÚversionZMyVersionValidator)r   r    r   r   Úpopr   Ú__name__©r#   r!   r   r   r   Ú.test_if_a_version_is_provided_it_is_registeredO   s    þzBTestCreateAndExtend.test_if_a_version_is_provided_it_is_registeredc                 C   s,   t tjƒ}tjddid |  tj|¡ d S )NÚid)r   )r   r   r   r    r   )r#   Úoriginalr   r   r   Ú6test_if_a_version_is_not_provided_it_is_not_registeredW   s    
zJTestCreateAndExtend.test_if_a_version_is_not_provided_it_is_not_registeredc                 C   sB   d}d|i}t j|ddd„ d |  t jj|¡ |  |t j¡ d S )Númeta schema idr=   r6   c                 S   s   |   dd¡S ©Nr=   Ú ©Úget©Úsr   r   r   Ú<lambda>c   ó    zMTestCreateAndExtend.test_validates_registers_meta_schema_id.<locals>.<lambda>©r   r8   Úid_of©r   r    r   r   r9   ÚassertIn©r#   Zmeta_schema_keyZmy_meta_schemar   r   r   Ú'test_validates_registers_meta_schema_id\   s    ýz;TestCreateAndExtend.test_validates_registers_meta_schema_idc                 C   s<   d}d|i}t j|dd |  t jj|¡ |  |t j¡ d S )Númeta schema $idr   r6   r7   rK   rM   r   r   r   Ú.test_validates_registers_meta_schema_draft6_idi   s    þzBTestCreateAndExtend.test_validates_registers_meta_schema_draft6_idc                    sD   t ji dd‰ |  t‡ fdd„dg fdddd	d
i fdfD ƒƒ¡ d S )Nr   ©r   r   c                 3   s$   | ]\}}ˆ i ƒj ||d V  qdS ))r   ÚtypeN)Úis_type)Ú.0rR   r   ©r!   r   r   Ú	<genexpr>x   s   ÿz@TestCreateAndExtend.test_create_default_types.<locals>.<genexpr>Úarray)ÚbooleanT)Úintegeré   )ÚnullN)Únumberg      (@Úobject)Ústringr*   )r   r    Ú
assertTrueÚallr"   r   rU   r   Útest_create_default_typesu   s    ùþÿz-TestCreateAndExtend.test_create_default_typesc                 C   s`   t | jjƒ}tƒ }tj| jd|id}|  |j|j|j| jjft ||d| jj| jj|f¡ d S )NÚnew©r   ©rb   )	r   r!   r&   r]   r   Úextendr   r'   r(   )r#   r>   rb   ÚExtendedr   r   r   Útest_extend†   s$    þü
üúzTestCreateAndExtend.test_extendc                    sf   ‡ fdd„}d}d|dœ}t j|ˆ j ˆ j|d}ˆ  | |j¡|¡ t  |¡}ˆ  | |j¡|¡ dS )zK
        Extending a validator preserves its notion of schema IDs.
        c                    s   |   dˆ j | ¡¡S )NÚ__test__)rD   r!   ÚID_OF©r   r"   r   r   rJ       s    z3TestCreateAndExtend.test_extend_idof.<locals>.id_ofzthe://correct/id/zthe://wrong/id/)r   rh   )r   r   r   rJ   N)r   r    r   r   ri   r'   re   )r#   rJ   Z
correct_idr   ZOriginalZDerivedr   r"   r   Útest_extend_idofœ   s    þü
z$TestCreateAndExtend.test_extend_idofN)r:   Ú
__module__Ú__qualname__r$   r)   r,   r4   r<   r?   rN   rP   ra   rg   rk   r   r   r   r   r      s   r   c                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestLegacyTypeCheckingc              
   C   s:   t ji dd}|  t|jƒddddddd	h¡ |  ¡  d S )
Nr   rQ   rW   rX   rY   r[   r\   r]   r^   )r   r    r   ÚsetÚDEFAULT_TYPESÚflushWarningsr;   r   r   r   ra   ´   s     úÿ
z0TestLegacyTypeChecking.test_create_default_typesc                 C   s”   t ji dd}t|jƒ}tƒ }t j|d|id}|  |j|j|j|j|j	|i ƒj	|  
¡ d d ft||d|j|j||j	|j	|  
¡ d d f¡ d S )Nr   rQ   rb   rc   r   Úmessagerd   )r   r    r   r&   r]   re   r   r'   r(   rp   rq   )r#   r!   r>   rb   rf   r   r   r   rg   Â   s2    
þø

øöz"TestLegacyTypeChecking.test_extendc                 C   sP   ddi}|   t |¡ d¡¡ tj|dttfid}|  | d¡¡ |  ¡  d S )NrR   r^   rZ   )Útypes)ÚassertFalser   ÚDraft7ValidatorÚis_validÚstrÚintr_   rq   )r#   r   r   r   r   r   Ú0test_types_redefines_the_validators_type_checkerá   s    
þzGTestLegacyTypeChecking.test_types_redefines_the_validators_type_checkerc              	   C   s.   | j tdtj| j j jtji i dtid d S )NzPThe default_types argument is deprecated. Use the type_checker argument instead.r*   )Úcategoryrr   ÚfilenameÚfr   r   Údefault_types)	ÚassertWarnsÚDeprecationWarningÚsysÚmodulesrl   Ú__file__r   r    r]   r"   r   r   r   Ú"test_providing_default_types_warnsì   s    ôz9TestLegacyTypeChecking.test_providing_default_types_warnsc              	   C   sv   t ji i tƒ d}|  t j¡}|j W 5 Q R X |  dt|jƒ¡ |  t j¡ |i ƒj W 5 Q R X |  	|  
¡ ¡ dS )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.
        r   z=DEFAULT_TYPES cannot be used on Validators using TypeCheckersN)r   r    r	   ÚassertRaisesZ_DontDoThatrp   rL   rw   Ú	exceptionrt   rq   ©r#   r!   Úer   r   r   Ú?test_cannot_ask_for_default_types_with_non_default_type_checkerü   s    ýþzVTestLegacyTypeChecking.test_cannot_ask_for_default_types_with_non_default_type_checkerc                 C   s:   t ji i tƒ d}|  |  ¡ ¡ |i ƒ |  |  ¡ ¡ d S )Nr   )r   r    r	   rt   rq   r;   r   r   r   Ú2test_providing_explicit_type_checker_does_not_warn  s    ýzITestLegacyTypeChecking.test_providing_explicit_type_checker_does_not_warnc                 C   s6   t ji i d}|  |  ¡ ¡ |i ƒ |  |  ¡ ¡ d S )NrQ   )r   r    rt   rq   r;   r   r   r   Ú$test_providing_neither_does_not_warn#  s    z;TestLegacyTypeChecking.test_providing_neither_does_not_warnc              	   C   sR   |   t¡}tji i dtitƒ d W 5 Q R X |  dt|jƒ¡ |  	|  
¡ ¡ d S )Nr*   )r   r   r}   r   z:Do not specify default_types when providing a type checker)r„   Ú	TypeErrorr   r    r]   r	   rL   rw   r…   rt   rq   ©r#   r‡   r   r   r   Ú5test_providing_default_types_with_type_checker_errors*  s    üþzLTestLegacyTypeChecking.test_providing_default_types_with_type_checker_errorsc              	   C   sZ   t ji i dtid}|  t¡}t j|i tƒ d W 5 Q R X |  dt|j	ƒ¡ |  
¡  d S )NrW   )r   r   r}   )r   r   z‚Cannot extend a validator created with default_types with a type_checker. Update the validator to use a type_checker when created.)r   r    r1   r„   r‹   re   r	   rL   rw   r…   rq   r†   r   r   r   Ú<test_extending_a_legacy_validator_with_a_type_checker_errors9  s     ýýúzSTestLegacyTypeChecking.test_extending_a_legacy_validator_with_a_type_checker_errorsc                 C   s8   t ji i d}|  |  ¡ ¡ t  |¡ |  |  ¡ ¡ d S )N)r   r}   )r   r    r_   rq   re   rt   r;   r   r   r   Ú1test_extending_a_legacy_validator_does_not_rewarnP  s    
zHTestLegacyTypeChecking.test_extending_a_legacy_validator_does_not_rewarnc                 C   s@   t ji i d}|  |  ¡ ¡ |  tdtj| jj j	t
|d¡ d S ©NrQ   zcThe DEFAULT_TYPES attribute is deprecated. See the type checker attached to this validator instead.rp   ©r   r    rt   rq   r~   r   r€   r   rl   r‚   Úgetattrr;   r   r   r   Ú"test_accessing_default_types_warnsW  s    õz9TestLegacyTypeChecking.test_accessing_default_types_warnsc                 C   sD   t ji i d}|  |  ¡ ¡ |  tdtj| jj j	t
|i ƒd¡ d S r   r‘   r;   r   r   r   Ú2test_accessing_default_types_on_the_instance_warnsi  s    õzITestLegacyTypeChecking.test_accessing_default_types_on_the_instance_warnsc                 C   sF   t ji i d}|  |  ¡ ¡ | jtdtj| jj j	|i dt
id d S )NrQ   zaThe types argument is deprecated. Provide a type_checker to jsonschema.validators.extend instead.Úbar)rz   rr   r{   r|   r   rs   )r   r    rt   rq   r~   r   r€   r   rl   r‚   r]   r;   r   r   r   Ú"test_providing_types_to_init_warns{  s    ôz9TestLegacyTypeChecking.test_providing_types_to_init_warnsN)r:   rl   rm   ra   rg   ry   rƒ   rˆ   r‰   rŠ   r   rŽ   r   r“   r”   r–   r   r   r   r   rn   ³   s   rn   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestIterErrorsc                 C   s   t  i ¡| _d S r%   )r   ÚDraft3Validatorr   r"   r   r   r   r$     s    zTestIterErrors.setUpc                 C   sr   ddg}ddddgddd	ggd
dœ}dd„ | j  ||¡D ƒ}d|d f dd|d f g}|  t|ƒt|ƒ¡ d S )Nr/   é   rW   ÚaÚbÚcÚdr‡   r|   é   )ÚdisallowÚenumÚminItemsc                 s   s   | ]}|j V  qd S r%   )rr   ©rT   r‡   r   r   r   rV   ›  s     z2TestIterErrors.test_iter_errors.<locals>.<genexpr>z%r is disallowed for [1, 2]rŸ   z[1, 2] is too shortz[1, 2] is not one of %rr    )r   r0   r   Úsorted)r#   r   r   ÚgotÚexpectedr   r   r   r4   “  s    ýýzTestIterErrors.test_iter_errorsc                 C   s\   ddgdddœ}dddid	did
ddddgdœdœi}t | j ||¡ƒ}|  t|ƒd¡ d S )Nr™   r/   é   Úspam©r*   r•   ÚbazÚquuxÚ
propertiesrR   r^   r¡   é
   é   é   é   ©Úmaximumr    ©r*   r•   r©   )r1   r   r0   r   r2   )r#   r   r   r3   r   r   r   Ú0test_iter_errors_multiple_failures_one_validator£  s    ýÿz?TestIterErrors.test_iter_errors_multiple_failures_one_validatorN)r:   rl   rm   r$   r4   r³   r   r   r   r   r—     s   r—   c                   @   s¬   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)S )*ÚTestValidationErrorMessagesc              	   O   sB   |  dtj¡ |  tj¡}tj||f|ž|Ž W 5 Q R X |jjS )NÚcls)	Ú
setdefaultr   r˜   r„   r
   r   Úvalidater…   rr   )r#   r   r   ÚargsÚkwargsr‡   r   r   r   Úmessage_for²  s    z'TestValidationErrorMessages.message_forc                 C   s&   | j dddid}|  |dd ¡ d S ©Nr/   rR   r^   ©r   r   z1 is not of type %r©rº   r   ©r#   rr   r   r   r   Útest_single_type_failure¸  s    z4TestValidationErrorMessages.test_single_type_failurec                 C   s(   | j dddgid}|  |dd ¡ d S r»   r½   r¾   r   r   r   Útest_single_type_list_failure¼  s    z9TestValidationErrorMessages.test_single_type_list_failurec                 C   s.   d}| j ddt|ƒid}|  |d| ¡ d S )N)r^   r]   r/   rR   r¼   z1 is not of type %r, %r)rº   r1   r   )r#   rs   rr   r   r   r   Útest_multiple_type_failureÀ  s    z6TestValidationErrorMessages.test_multiple_type_failurec                 C   s2   dddigi}| j dd|gid}|  |d¡ d S )NrR   Úminimumrž   r/   r¼   ú1 is less than the minimum of 3r½   )r#   rR   rr   r   r   r   Ú&test_object_without_title_type_failureÅ  s    zBTestValidationErrorMessages.test_object_without_title_type_failurec                 C   s.   ddddœgi}| j d|d}|  |d¡ d S )NrR   ZFoorž   )ÚnamerÂ   r/   r¼   rÃ   r½   ©r#   r   rr   r   r   r   Ú#test_object_with_named_type_failureÊ  s    z?TestValidationErrorMessages.test_object_with_named_type_failurec                 C   s"   | j dddid}|  |d¡ d S )Nr/   rÂ   r™   r¼   z1 is less than the minimum of 2r½   r¾   r   r   r   Útest_minimumÏ  s    z(TestValidationErrorMessages.test_minimumc                 C   s"   | j dddid}|  |d¡ d S )Nr/   r±   r   r¼   z"1 is greater than the maximum of 0r½   r¾   r   r   r   Útest_maximumÓ  s    z(TestValidationErrorMessages.test_maximumc                 C   sB   d\}}d||ii}| j ddi|tjd}|  |d||f ¡ d S ©N©r•   r*   Údependenciesr•   r™   ©r   r   rµ   z%r is a dependency of %r©rº   r   r˜   r   ©r#   ZdependÚonr   rr   r   r   r   Ú test_dependencies_single_element×  s    ýz<TestValidationErrorMessages.test_dependencies_single_elementc                 C   sD   d\}}d||gii}| j ddi|tjd}|  |d||f ¡ d S rÊ   rÎ   rÏ   r   r   r   Útest_dependencies_list_draft3á  s    ýz9TestValidationErrorMessages.test_dependencies_list_draft3c                 C   sD   d\}}d||gii}| j ddi|tjd}|  |d||f ¡ d S rÊ   )rº   r   ru   r   rÏ   r   r   r   Útest_dependencies_list_draft7ë  s    ýz9TestValidationErrorMessages.test_dependencies_list_draft7c                 C   s&   | j dgg ddœd}|  d|¡ d S )Nr™   F©ÚitemsZadditionalItemsr¼   z(2 was unexpected)©rº   rL   r¾   r   r   r   Ú#test_additionalItems_single_failureõ  s
    þz?TestValidationErrorMessages.test_additionalItems_single_failurec                 C   s*   | j dddgg ddœd}|  d|¡ d S )Nr/   r™   rž   FrÔ   r¼   z(1, 2, 3 were unexpected)rÖ   r¾   r   r   r   Ú&test_additionalItems_multiple_failuresü  s
    þzBTestValidationErrorMessages.test_additionalItems_multiple_failuresc                 C   s4   d}ddi}| j |di|d}|  d|f |¡ d S )Nr*   ÚadditionalPropertiesFr™   r¼   z(%r was unexpected)rÖ   )r#   Ú
additionalr   rr   r   r   r   Ú(test_additionalProperties_single_failure  s    zDTestValidationErrorMessages.test_additionalProperties_single_failurec                 C   sP   ddi}| j t ddg¡|d}|  tdƒ|¡ |  tdƒ|¡ |  d|¡ d S )NrÙ   Fr*   r•   r¼   zwere unexpected))rº   r   ÚfromkeysrL   ÚreprrÆ   r   r   r   Ú+test_additionalProperties_multiple_failures	  s    þzGTestValidationErrorMessages.test_additionalProperties_multiple_failuresc                 C   s.   ddi}| j ddi|tjd}|  d|¡ d S )NÚconstrZ   r*   r•   rÍ   z12 was expected©rº   r   ÚDraft6ValidatorrL   rÆ   r   r   r   Ú
test_const  s    ýz&TestValidationErrorMessages.test_constc                 C   s4   dddii}| j di g g|tjd}|  d|¡ d S )NÚcontainsrß   rZ   r™   rÍ   z4None of [2, {}, []] are valid under the given schemarà   rÆ   r   r   r   Útest_contains  s    ýþz)TestValidationErrorMessages.test_containsc                 C   sd   t dd}| d¡dd„ ƒ ddi}| jd||d}|  tdƒ|¡ |  tdƒ|¡ |  d	|¡ d S )
Nr   )ÚformatsÚthingc                 S   s   dS ©NFr   ©Úvaluer   r   r   rG   +  rH   zQTestValidationErrorMessages.test_invalid_format_default_message.<locals>.<lambda>ÚformatZbla)r   r   Úformat_checkerzis not a)r   Úchecksrº   rL   rÝ   )r#   Úcheckerr   rr   r   r   r   Ú#test_invalid_format_default_message)  s    
ýz?TestValidationErrorMessages.test_invalid_format_default_messagec              
   C   s–   ddddiddidœdœ}| j ddi|tjd	}|  |d
 tdƒtdƒtdƒ¡¡ | j dddœ|tjd	}|  |d tdƒtdƒtdƒtdƒ¡¡ d S )Nr]   FrR   r^   )ú^abc$ú^def$)rR   rÙ   Ú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   ÚDraft4Validatorr   rê   rÝ   rÆ   r   r   r   Ú1test_additionalProperties_false_patternProperties8  sB    þþý  ÿþý   ÿþzMTestValidationErrorMessages.test_additionalProperties_false_patternPropertiesc                 C   s"   | j ddtjd}|  d|¡ d S )Nr5   FrÍ   z'False schema does not allow 'something')rº   r   ru   rL   r¾   r   r   r   Útest_False_schemaV  s    ýz-TestValidationErrorMessages.test_False_schemaN)r:   rl   rm   rº   r¿   rÀ   rÁ   rÄ   rÇ   rÈ   rÉ   rÑ   rÒ   rÓ   r×   rØ   rÛ   rÞ   râ   rä   rî   rö   r÷   r   r   r   r   r´   ±  s(   


	r´   c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestValidationErrorDetailsc                 C   sì  d}dddiddigi}t  |¡}t| |¡ƒ}|  t|ƒd¡ |d }|  |jd¡ |  |j|d ¡ |  |j|¡ |  |j	|¡ |  
|j¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  t|jƒd	¡ t|jƒ\}}|  |jd¡ |  |j|d d d ¡ |  |j|¡ |  |j	|d d ¡ |  |j|¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtddgƒ¡ |  |jtddgƒ¡ |  |jtdddgƒ¡ |  |j¡ |  |jd¡ |  |j|d d d ¡ |  |j|¡ |  |j	|d d ¡ |  |j|¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtddgƒ¡ |  |jtddgƒ¡ |  |jtdddgƒ¡ |  t|jƒd¡ d S )
Né   ÚanyOfrÂ   é   rR   r^   r/   r   r™   )r   rõ   r1   r0   r   r2   r   r-   r   r   ÚassertIsNoneÚparentÚpathr   Úrelative_pathÚabsolute_pathr.   Úrelative_schema_pathÚabsolute_schema_pathÚcontextÚsorted_errorsÚassertIsrt   ©r#   r   r   r   r3   r‡   Úe1Úe2r   r   r   Ú
test_anyOfb  sd    þÿ
 ÿz%TestValidationErrorDetails.test_anyOfc              	   C   sü  ddi}dddiddddgiidœgi}t  |¡}t| |¡ƒ}|  t|ƒd¡ |d	 }|  |jd¡ |  |j|d ¡ |  |j|¡ |  |j	|¡ |  
|j¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  t|jƒd¡ t|jƒ\}}|  |jd¡ |  |j|d d	 d ¡ |  |j|¡ |  |j	|d d	 ¡ |  |j|¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtg ƒ¡ |  |jtd	dgƒ¡ |  |jtd	dgƒ¡ |  |jtdd	dgƒ¡ |  |j¡ |  |jd¡ |  |jdg¡ |  |jd¡ |  |j	ddgi¡ |  |j|¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdd
ddgƒ¡ |  |jtdd
ddgƒ¡ |  |jtddd
ddgƒ¡ |  |j¡ d S )Nr*   r/   rR   rY   r]   r    r™   ©rR   r«   r   r«   )r   r˜   r1   r0   r   r2   r   r-   r   r   rü   rý   rþ   r   rÿ   r   r.   r  r  r  r  r  rt   r  r   r   r   Ú	test_type¤  st    þþÿ

 ÿ ÿþz$TestValidationErrorDetails.test_typec           	      C   s†  ddgdddœ}dddid	did
ddddgdœdœi}t  |¡}| |¡}t|ƒ\}}}}|  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |jtdgƒ¡ |  |j	d	¡ |  |j	d¡ |  |j	d¡ |  |j	d¡ d S )Nr™   r/   r¦   r§   r¨   r«   rR   r^   r¡   r¬   r­   r®   r¯   r°   r²   r•   r©   r*   r    r±   )
r   r˜   r0   r  r   rþ   r   rÿ   r   r   )	r#   r   r   r   r3   r  r  Úe3Úe4r   r   r   Útest_single_nestingî  s4    ýÿ

z.TestValidationErrorDetails.test_single_nestingc              	   C   sè  ddddgidœdg}dddgddd	gid
ddiddidœdœdœdœdœ}t  |¡}| |¡}t|ƒ\}}}}}	}
|  |jtg ƒ¡ |  |jtdgƒ¡ |  |jtddgƒ¡ |  |jtdddgƒ¡ |  |	jtdddgƒ¡ |  |
jtddgƒ¡ |  |jtdgƒ¡ |  |jtddgƒ¡ |  t|jƒddddg¡ |  t|jƒddddddg¡ |  t|	jƒddddddg¡ |  t|
jƒddddg¡ |  |j	d¡ |  |j	d¡ |  |j	d¡ |  |j	d¡ |  |	j	d¡ |  |
j	d¡ d S )Nr/   r™   r©   )r*   r•   rª   r^   r]   r    rž   rW   ÚrequiredTr¡   )r•   r©   r
  )rR   rÕ   r   r•   r*   rR   rÕ   r«   )
r   r˜   r0   r  r   rþ   r   r.   r1   r   )r#   r   r   r   r3   r  r  r  r  Ze5Ze6r   r   r   Útest_multiple_nesting  sZ    
þþþþþ

 
ÿþþ 
ÿz0TestValidationErrorDetails.test_multiple_nestingc                 C   sD  dddddgddiddd	d
iidœdœdœgiiddgdd	d
iidœ}dddddddiidœidœi}t  |¡}| |¡\}|  |jtdgƒ¡ |  |jtdddgƒ¡ |j\}|  |jtdddgƒ¡ |  |jtdddddddddg	ƒ¡ |j\}|  |jtdddddgƒ¡ |  |jtdddddddddddddddgƒ¡ d S )NÚnoderú   r]   rÅ   ÚchildrenrR   r^   z^.*$ú$refz#/definitions/node)rR   rñ   )rÅ   r  )rR   r  r«   Úroot)ZdefinitionsrR   r  r«   rš   Úabr«   r   rñ   )r   rõ   r0   r   r   r   r  r  )r#   r   r   r   r‡   r  r  r   r   r   Útest_recursiveF  s®     ÿ ÿÿþüýÿÿ
è ÿÿþÿþÿ
 ÿ ÷ÿÿ ÿÿ ñÿÿz)TestValidationErrorDetails.test_recursivec                 C   s€   dddœ}ddddœi}t  |¡}| |¡}t|ƒ\}}|  |jtdgƒ¡ |  |jtdgƒ¡ |  |jd	¡ |  |jd
¡ d S )Nr•   r™   rË   rÙ   rY   rù   ©rR   rÂ   r*   rR   rÂ   ©r   r˜   r0   r  r   rþ   r   r   ©r#   r   r   r   r3   r  r  r   r   r   Útest_additionalProperties¨  s    


z4TestValidationErrorDetails.test_additionalPropertiesc                 C   sˆ   dddœ}dddiddidœi}t  |¡}| |¡}t|ƒ\}}|  |jtd	gƒ¡ |  |jtd
gƒ¡ |  |jd¡ |  |jd¡ d S )Nr/   r™   rË   rñ   rR   r^   rÂ   rù   r•   r*   r  r  r   r   r   Útest_patternProperties¶  s    
þÿ

z1TestValidationErrorDetails.test_patternPropertiesc                 C   s€   ddg}g dddœdœ}t  |¡}| |¡}t|ƒ\}}|  |jtdgƒ¡ |  |jtdgƒ¡ |  |jd¡ |  |jd	¡ d S )
Nr*   r/   rY   rù   r  rÔ   r   rR   rÂ   r  r  r   r   r   Útest_additionalItemsÉ  s    þ

z/TestValidationErrorDetails.test_additionalItemsc                 C   s„   dddg}i gdddœdœ}t  |¡}| |¡}t|ƒ\}}|  |jtdgƒ¡ |  |jtdgƒ¡ |  |jd	¡ |  |jd
¡ d S )Nr*   r•   r/   rY   rù   r  rÔ   r™   rR   rÂ   r  r  r   r   r   Útest_additionalItems_with_itemsÚ  s    
þ

z:TestValidationErrorDetails.test_additionalItems_with_itemsc                 C   s‚   ddi}ddddiii}t  |¡}| |¡\}|  |jd¡ |  |jdddidf ¡ |  |jtg ƒ¡ |  |jtddgƒ¡ d S )Nr*   rZ   ZpropertyNamesÚnotrß   z%r is not allowed for %r©	r   ru   r0   r   r   rr   rþ   r   r.   )r#   r   r   r   Úerrorr   r   r   Útest_propertyNamesë  s    
þz-TestValidationErrorDetails.test_propertyNamesc                 C   sr   ddiddidœ}t  |¡}| d¡\}|  |jd¡ |  |jd¡ |  |jtg ƒ¡ |  |jtdddgƒ¡ d S )Nrß   rZ   é   )ÚifÚthenú13 was expectedr#  r$  r  ©r#   r   r   r   r   r   r   Útest_if_thenú  s    þ
z'TestValidationErrorDetails.test_if_thenc                 C   sr   ddiddidœ}t  |¡}| d¡\}|  |jd¡ |  |jd¡ |  |jtg ƒ¡ |  |jtdddgƒ¡ d S )	Nrß   rZ   r"  )r#  Úelser¦   r%  r#  r(  r  r&  r   r   r   Útest_if_else  s    þ
z'TestValidationErrorDetails.test_if_elsec              
   C   sN   t  d¡}| d¡\}|  |j|j|j|j|j|j	fdd d ddt
g ƒf¡ d S )NFrZ   zFalse schema does not allow 12)r   ru   r0   r   rr   r   r-   r   r   r.   r   )r#   r   r   r   r   r   Útest_boolean_schema_False  s$    
ú	ú÷z4TestValidationErrorDetails.test_boolean_schema_Falsec                 C   s   ddddii }}t jd|it jdi ||idd}| d	d
i¡\}|  |j|j|j|j|j	|j
|jfdddd
td	gƒdditddgƒf¡ d S )NZsomeRefrÙ   rR   rY   r  rB   ©Ústore©Úresolverr*   ZnotAnIntegerz''notAnInteger' is not of type 'integer')r   ru   ÚRefResolverr0   r   rr   r   r-   r   r   r   r.   r   )r#   Úrefr   r   r   r   r   r   Útest_ref-  s0    þù

ùöz#TestValidationErrorDetails.test_refN)r:   rl   rm   r	  r  r  r  r  r  r  r  r  r!  r'  r)  r*  r1  r   r   r   r   rø   _  s   BJ"6brø   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMetaSchemaTestsMixinc              	   C   s2   |   tj¡ | j ddtƒ ii¡ W 5 Q R X d S )Nr«   Útest)r„   r
   ÚSchemaErrorr!   Úcheck_schemar]   r"   r   r   r   Útest_invalid_propertiesM  s    z,MetaSchemaTestsMixin.test_invalid_propertiesc              	   C   s,   |   tj¡ | j ddi¡ W 5 Q R X d S )Nr¡   Ú1)r„   r
   r4  r!   r5  r"   r   r   r   Útest_minItems_invalid_stringQ  s    z1MetaSchemaTestsMixin.test_minItems_invalid_stringc                 C   s   | j  dg i¡ dS )z–
        Technically, all the spec says is they SHOULD have elements, not MUST.

        See https://github.com/Julian/jsonschema/issues/529.
        r    N©r!   r5  r"   r   r   r   Útest_enum_allows_empty_arraysV  s    z2MetaSchemaTestsMixin.test_enum_allows_empty_arraysc                 C   s   | j  dddgi¡ dS )z’
        Technically, all the spec says is they SHOULD be unique, not MUST.

        See https://github.com/Julian/jsonschema/issues/529.
        r    rZ   Nr9  r"   r   r   r   Ú!test_enum_allows_non_unique_items^  s    z6MetaSchemaTestsMixin.test_enum_allows_non_unique_itemsN)r:   rl   rm   r6  r8  r:  r;  r   r   r   r   r2  K  s   r2  c                   @   s    e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze ed¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )%ÚValidatorTestMixinc                 C   s$   | j \}}|  |  |¡ |¡¡ d S r%   )Úvalidr_   r!   rv   ©r#   r   r   r   r   r   Útest_valid_instances_are_validh  s    
z1ValidatorTestMixin.test_valid_instances_are_validc                 C   s$   | j \}}|  |  |¡ |¡¡ d S r%   )Úinvalidrt   r!   rv   r>  r   r   r   Ú$test_invalid_instances_are_not_validl  s    
z7ValidatorTestMixin.test_invalid_instances_are_not_validc                 C   s    |   tƒ tƒ i¡jtƒ d d S )N©r   )r!   r]   r·   r"   r   r   r   Ú(test_non_existent_properties_are_ignoredp  s    z;ValidatorTestMixin.test_non_existent_properties_are_ignoredc                 C   s   |   |  i ¡jtj¡ d S r%   )ZassertIsInstancer!   r.  r   r/  r"   r   r   r   Ú.test_it_creates_a_ref_resolver_if_not_provideds  s    
þzAValidatorTestMixin.test_it_creates_a_ref_resolver_if_not_providedc              	   C   sZ   dddi }}t jdi ||id}| jd|i|d}|  tj¡ | d ¡ W 5 Q R X d S )NZsomeCoolRefrR   rY   rB   r+  r  r-  )r   r/  r!   r„   r
   r   r·   )r#   r0  r   r.  r   r   r   r   Ú#test_it_delegates_to_a_ref_resolvery  s
    z6ValidatorTestMixin.test_it_delegates_to_a_ref_resolverc              	      sR   G ‡ fdd„dt ƒ}|ƒ }ddi}ˆ  tj¡ ˆ j||d d¡ W 5 Q R X dS )zb
        Legacy RefResolvers support only the context manager form of
        resolution.
        c                       s   e Zd Ze‡ fdd„ƒZdS )zXValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver.<locals>.LegacyRefResolverc                 3   s   ˆ   |d¡ ddiV  d S )Núthe refrR   rY   ©r   )Úthisr0  r"   r   r   Ú	resolvingˆ  s    zbValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver.<locals>.LegacyRefResolver.resolvingN)r:   rl   rm   r   rI  r   r"   r   r   ÚLegacyRefResolver‡  s   rJ  r  rF  r-  N)r]   r„   r
   r   r!   r·   )r#   rJ  r.  r   r   r"   r   Ú*test_it_delegates_to_a_legacy_ref_resolver  s
    z=ValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolverc                 C   s   |   |  i ¡ dd¡¡ d S )Nr*   r^   )r_   r!   rS   r"   r   r   r   Ú#test_is_type_is_true_for_valid_type“  s    z6ValidatorTestMixin.test_is_type_is_true_for_valid_typec                 C   s   |   |  i ¡ dd¡¡ d S )Nr*   rW   ©rt   r!   rS   r"   r   r   r   Ú&test_is_type_is_false_for_invalid_type–  s    z9ValidatorTestMixin.test_is_type_is_false_for_invalid_typec                 C   s4   |   |  i ¡ dd¡¡ |   |  i ¡ dd¡¡ d S )NTrY   r\   rM  r"   r   r   r   Ú,test_is_type_evades_bool_inheriting_from_int™  s    z?ValidatorTestMixin.test_is_type_evades_bool_inheriting_from_intz-In Python 3 json.load always produces unicodec                 C   s   |   ddi¡ d¡ d S )NrR   r^   s   foo©r!   r·   r"   r   r   r   Ú$test_string_a_bytestring_is_a_string  s    z7ValidatorTestMixin.test_string_a_bytestring_is_a_stringc                 C   s   |   ddi¡ d¡ dS )zF
        See https://github.com/Julian/jsonschema/issues/611.
        Úpatternr*   NrP  r"   r   r   r   Ú#test_patterns_can_be_native_strings¡  s    z6ValidatorTestMixin.test_patterns_can_be_native_stringsc                 C   s~   dddii}t j| j| jj ddd„ ¡d}||ƒ}| ddtdƒtd	ƒ g¡ d
i g dd g}|  dd„ | |¡D ƒ|¡ d S )NrÕ   rR   r\   c                 S   s   t |tttfƒot |tƒ S r%   )Ú
isinstancerx   Úfloatr   Úbool©rí   ræ   r   r   r   rG   ­  s    ÿzGValidatorTestMixin.test_it_can_validate_with_decimals.<locals>.<lambda>©r   r/   gš™™™™™ñ?r¯   r*   Tc                 S   s   g | ]
}|j ‘qS r   rB  )rT   r   r   r   r   Ú
<listcomp>¸  s     zIValidatorTestMixin.test_it_can_validate_with_decimals.<locals>.<listcomp>)	r   re   r!   r(   Úredefiner·   r   r   r0   )r#   r   r!   r   r@  r   r   r   Ú"test_it_can_validate_with_decimals§  s    þþ
þz5ValidatorTestMixin.test_it_can_validate_with_decimalsc                 C   s"   | j dditƒ d}| d¡ d S )Nrê   Úcarrot©rë   Úbugs)r!   r   r·   ©r#   r   r   r   r   Ú7test_it_returns_true_for_formats_it_does_not_know_about¼  s
     ÿzJValidatorTestMixin.test_it_returns_true_for_formats_it_does_not_know_aboutc                 C   s   |   i ¡}|  |j¡ d S r%   )r!   rü   rë   r_  r   r   r   Ú,test_it_does_not_validate_formats_by_defaultÂ  s    
z?ValidatorTestMixin.test_it_does_not_validate_formats_by_defaultc              	      s|   t ƒ }tdƒ‰ |jdtd‡ ‡fdd„ƒ}ˆjddi|d}| d¡ ˆ tj¡}| d	¡ W 5 Q R X ˆ |j	j
ˆ ¡ d S )
NzBad!r*   )Zraisesc                    s.   | dkrdS | dkrˆ ‚nˆ  d | ¡¡ d S )NÚgoodTÚbadz What is {}? [Baby Don't Hurt Me])Úfailrê   rè   ©rc  r#   r   r   ÚcheckÊ  s
    zTValidatorTestMixin.test_it_validates_formats_if_a_checker_is_provided.<locals>.checkrê   r]  rb  rc  )r   Ú
ValueErrorrì   r!   r·   r„   r
   r   r  r…   Úcause)r#   rí   rf  r   Úcmr   re  r   Ú2test_it_validates_formats_if_a_checker_is_providedÆ  s     ÿ
zEValidatorTestMixin.test_it_validates_formats_if_a_checker_is_providedc                 C   sB   t ƒ }d|gi}tj| j| jj |dd„ ¡d}||ƒ d¡ d S )NrR   c                 S   s
   t |tƒS r%   ©rT  rx   rW  r   r   r   rG   å  rH   z@ValidatorTestMixin.test_non_string_custom_type.<locals>.<lambda>rX  r¦   )r]   r   re   r!   r(   rZ  r·   )r#   Znon_string_typer   ÚCrazyr   r   r   Útest_non_string_custom_typeÞ  s    
þþz.ValidatorTestMixin.test_non_string_custom_typec              	   C   s`   t j| j| jj ddd„ ¡d}|  tj¡}|ddiƒ d¡ W 5 Q R X |  	dt
|jƒ¡ d	S )
z‘
        A tuple instance properly formats validation errors for uniqueItems.

        See https://github.com/Julian/jsonschema/pull/224
        rW   c                 S   s
   t |tƒS r%   )rT  ÚtuplerW  r   r   r   rG   ô  rH   zNValidatorTestMixin.test_it_properly_formats_tuples_in_errors.<locals>.<lambda>rX  ZuniqueItemsT)r/   r/   z(1, 1) has non-unique elementsN)r   re   r!   r(   rZ  r„   r
   r   r·   rL   rw   r…   )r#   ZTupleValidatorr‡   r   r   r   Ú)test_it_properly_formats_tuples_in_errorsê  s    þþz<ValidatorTestMixin.test_it_properly_formats_tuples_in_errorsN)r:   rl   rm   r?  rA  rC  rD  rE  rK  rL  rN  rO  ÚunittestZskipIfr   rQ  rS  r[  r`  ra  rj  rm  ro  r   r   r   r   r<  g  s$   

r<  c                   @   sL   e Zd ZdZdd„ Zdd„ Ze edƒ¡dd„ ƒZ	e edƒ¡d	d
„ ƒZ
dS )ÚAntiDraft6LeakMixinzN
    Make sure functionality from draft 6 doesn't leak backwards in time.
    c              	   C   s:   |   tj¡}| j d¡ W 5 Q R X |  dt|jƒ¡ d S )NTzTrue is not of type©r„   r
   r4  r!   r5  rL   rw   r…   rŒ   r   r   r   Útest_True_is_not_a_schema  s    z-AntiDraft6LeakMixin.test_True_is_not_a_schemac              	   C   s:   |   tj¡}| j d¡ W 5 Q R X |  dt|jƒ¡ d S )NFzFalse is not of typerr  rŒ   r   r   r   Útest_False_is_not_a_schema  s    z.AntiDraft6LeakMixin.test_False_is_not_a_schemai  c              	   C   sJ   t  di ¡}|  t¡}| jd|d d¡ W 5 Q R X |  |jtj	¡ d S )NrB   Tr-  rZ   ©
r   r/  r„   Ú	Exceptionr!   r·   ZassertNotIsInstancer…   r
   r   ©r#   r.  r‡   r   r   r   Ú5test_True_is_not_a_schema_even_if_you_forget_to_check  s    zIAntiDraft6LeakMixin.test_True_is_not_a_schema_even_if_you_forget_to_checkc              	   C   sJ   t  di ¡}|  t¡}| jd|d d¡ W 5 Q R X |  |jtj	¡ d S )NrB   Fr-  rZ   ru  rw  r   r   r   Ú6test_False_is_not_a_schema_even_if_you_forget_to_check  s    zJAntiDraft6LeakMixin.test_False_is_not_a_schema_even_if_you_forget_to_checkN)r:   rl   rm   Ú__doc__rs  rt  rp  Úskipr   rx  ry  r   r   r   r   rq  ü  s   
rq  c                   @   sF   e Zd ZejZi i fZddidfZdd„ Zdd„ Z	dd	„ Z
d
d„ ZdS )ÚTestDraft3ValidatorrR   rY   r*   c                 C   s   |   ddi¡}| tƒ ¡ d S ©NrR   Úany)r!   r·   r]   r_  r   r   r   Ú#test_any_type_is_valid_for_type_any  s    z7TestDraft3Validator.test_any_type_is_valid_for_type_anyc              	   C   s\   t j| j| jj ddd„ ¡d}|ddiƒ}| d¡ |  tj¡ | d¡ W 5 Q R X dS )	z(
        Sigh, because why not.
        r~  c                 S   s
   t |tƒS r%   rk  rW  r   r   r   rG   *  rH   zBTestDraft3Validator.test_any_type_is_redefinable.<locals>.<lambda>rX  rR   rZ   r*   N)	r   re   r!   r(   rZ  r·   r„   r
   r   )r#   rl  r   r   r   r   Útest_any_type_is_redefinable#  s     ÿþ
z0TestDraft3Validator.test_any_type_is_redefinablec                 C   s"   |   |  i ¡ tƒ ddi¡¡ d S r}  )r_   r!   rv   r]   r"   r   r   r   Ú!test_is_type_is_true_for_any_type2  s    z5TestDraft3Validator.test_is_type_is_true_for_any_typec                 C   s8   |   |  i ¡ dd¡¡ |   |  i ¡ dddi¡¡ d S )NTrX   rR   r~  )r_   r!   rS   rv   r"   r   r   r   Ú6test_is_type_does_not_evade_bool_if_it_is_being_tested5  s    zJTestDraft3Validator.test_is_type_does_not_evade_bool_if_it_is_being_testedN)r:   rl   rm   r   r˜   r!   r=  r@  r  r€  r  r‚  r   r   r   r   r|    s   r|  c                   @   s&   e Zd ZejZi i fZddidfZdS )ÚTestDraft4ValidatorrR   rY   r*   N)r:   rl   rm   r   rõ   r!   r=  r@  r   r   r   r   rƒ  :  s   rƒ  c                   @   s&   e Zd ZejZi i fZddidfZdS )ÚTestDraft6ValidatorrR   rY   r*   N)r:   rl   rm   r   rá   r!   r=  r@  r   r   r   r   r„  @  s   r„  c                   @   s&   e Zd ZejZi i fZddidfZdS )ÚTestDraft7ValidatorrR   rY   r*   N)r:   rl   rm   r   ru   r!   r=  r@  r   r   r   r   r…  F  s   r…  c                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestValidatorForc                 C   s<   ddi}|   t |¡tj¡ ddi}|   t |¡tj¡ d S )Nú$schemaú&http://json-schema.org/draft-03/schemaú'http://json-schema.org/draft-03/schema#)r  r   Úvalidator_forr˜   r+   r   r   r   Útest_draft_3M  s    þþzTestValidatorFor.test_draft_3c                 C   s<   ddi}|   t |¡tj¡ ddi}|   t |¡tj¡ d S )Nr‡  ú&http://json-schema.org/draft-04/schemaú'http://json-schema.org/draft-04/schema#)r  r   rŠ  rõ   r+   r   r   r   Útest_draft_4Z  s    þþzTestValidatorFor.test_draft_4c                 C   s<   ddi}|   t |¡tj¡ ddi}|   t |¡tj¡ d S )Nr‡  ú&http://json-schema.org/draft-06/schemaú'http://json-schema.org/draft-06/schema#)r  r   rŠ  rá   r+   r   r   r   Útest_draft_6g  s    þþzTestValidatorFor.test_draft_6c                 C   s<   ddi}|   t |¡tj¡ ddi}|   t |¡tj¡ d S )Nr‡  ú&http://json-schema.org/draft-07/schemaú'http://json-schema.org/draft-07/schema#)r  r   rŠ  ru   r+   r   r   r   Útest_draft_7t  s    þþzTestValidatorFor.test_draft_7c                 C   s   |   t d¡tj¡ d S )NT©r  r   rŠ  Z_LATEST_VERSIONr"   r   r   r   Ú	test_True  s    þzTestValidatorFor.test_Truec                 C   s   |   t d¡tj¡ d S rç   r•  r"   r   r   r   Ú
test_False‡  s    þzTestValidatorFor.test_Falsec                 C   s6   t jddiddd„ d}ddi}|  t  |¡|¡ d S )Nr=   r@   Z12c                 S   s   |   dd¡S rA   rC   rE   r   r   r   rG   ‘  rH   z8TestValidatorFor.test_custom_validator.<locals>.<lambda>rI   r‡  ©r   r    r  rŠ  ©r#   r!   r   r   r   r   Útest_custom_validator  s    ýþz&TestValidatorFor.test_custom_validatorc                 C   s0   t jddidd}ddi}|  t  |¡|¡ d S )Nr   rO   Z13r7   r‡  r˜  r™  r   r   r   Útest_custom_validator_draft6™  s    þþz-TestValidatorFor.test_custom_validator_draft6c                 C   s   |   t i ¡tj¡ d S r%   r•  r"   r   r   r   Ú%test_validator_for_jsonschema_default¤  s    z6TestValidatorFor.test_validator_for_jsonschema_defaultc                 C   s   |   tji d dd ¡ d S )N)Údefault)r  r   rŠ  r"   r   r   r   Ú!test_validator_for_custom_default§  s    z2TestValidatorFor.test_validator_for_custom_defaultc                 C   s,   | j tdtj| j j jtjddii d d S )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)rz   rr   r{   r|   r   r  )r~   r   r€   r   rl   r‚   r   rŠ  r"   r   r   r   Ú1test_warns_if_meta_schema_specified_was_not_foundª  s    ôzBTestValidatorFor.test_warns_if_meta_schema_specified_was_not_foundc                 C   s"   t ji i df |  |  ¡ ¡ d S )N)r   r  )r   rŠ  rt   rq   r"   r   r   r   Ú0test_does_not_warn_if_meta_schema_is_unspecifiedº  s    zATestValidatorFor.test_does_not_warn_if_meta_schema_is_unspecifiedN)r:   rl   rm   r‹  rŽ  r‘  r”  r–  r—  rš  r›  rœ  rž  rŸ  r   r   r   r   r   r†  L  s   r†  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestValidatec                 C   s2   g }|   |d|j¡ t i |¡ |  ||g¡ d S )Nr5  )ÚpatchÚappendr   r·   r   )r#   r   r!   Úresultr   r   r   Ú
assertUsesÀ  s    zTestValidate.assertUsesc                 C   s,   | j dditjd | j dditjd d S )Nr‡  r‰  ©r   r!   rˆ  )r¥  r   r˜   r"   r   r   r   Útest_draft3_validator_is_chosenÆ  s    þþz,TestValidate.test_draft3_validator_is_chosenc                 C   s,   | j dditjd | j dditjd d S )Nr‡  r  r¦  rŒ  )r¥  r   rõ   r"   r   r   r   Útest_draft4_validator_is_chosenÑ  s    þþz,TestValidate.test_draft4_validator_is_chosenc                 C   s,   | j dditjd | j dditjd d S )Nr‡  r  r¦  r  )r¥  r   rá   r"   r   r   r   Útest_draft6_validator_is_chosenÜ  s    þþz,TestValidate.test_draft6_validator_is_chosenc                 C   s,   | j dditjd | j dditjd d S )Nr‡  r“  r¦  r’  ©r¥  r   ru   r"   r   r   r   Útest_draft7_validator_is_chosenç  s    þþz,TestValidate.test_draft7_validator_is_chosenc                 C   s   | j i tjd d S )Nr¦  rª  r"   r   r   r   Ú$test_draft7_validator_is_the_defaultò  s    z1TestValidate.test_draft7_validator_is_the_defaultc              	   C   s>   |   tj¡}t dddi¡ W 5 Q R X |  t|jƒd¡ d S )NrZ   rR   r^   z3(?s)Failed validating u?'.*' in schema.*On instance)r„   r
   r   r   r·   ÚassertRegexpMatchesrw   r…   rŒ   r   r   r   Útest_validation_error_messageõ  s    þz*TestValidate.test_validation_error_messagec              	   C   s>   |   tj¡}t dddi¡ W 5 Q R X |  t|jƒd¡ d S )NrZ   rR   z5(?s)Failed validating u?'.*' in metaschema.*On schema)r„   r
   r4  r   r·   r­  rw   r…   rŒ   r   r   r   Útest_schema_error_messageý  s    þz&TestValidate.test_schema_error_messagec              	   C   sN   dddiddigi}|   tj¡}t d|¡ W 5 Q R X |  dt|jƒ¡ d S )NÚoneOfrR   r^   rW   rZ   z12 is not of type)r„   r
   r   r   r·   rL   rw   r…   )r#   r   r‡   r   r   r   Útest_it_uses_best_match  s    z$TestValidate.test_it_uses_best_matchN)r:   rl   rm   r¥  r§  r¨  r©  r«  r¬  r®  r¯  r±  r   r   r   r   r¡  ¿  s   r¡  c                   @   s”   e Zd ZdZdZddiZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚTestRefResolverrB   zfoo://storedZstoredr   c                 C   s.   i | _ | j| ji| _t | j| j | j¡| _d S r%   )ÚreferrerÚ
stored_uriÚstored_schemar,  r   r/  Úbase_urir.  r"   r   r   r   r$     s      ÿzTestRefResolver.setUpc              	      sP   t jjd }ˆ  ˆ jd‡ fdd„¡ ˆ j |¡}W 5 Q R X ˆ  |t jj¡ d S )Nr=   Zresolve_remotec                     s
   ˆ   d¡S )NzShould not have been called!)rd  )r¸   r¹   r"   r   r   rG     rH   zXTestRefResolver.test_it_does_not_retrieve_schema_urls_from_the_network.<locals>.<lambda>)r   r˜   r'   r¢  r.  rI  r   ©r#   r0  Úresolvedr   r"   r   Ú6test_it_does_not_retrieve_schema_urls_from_the_network  s    
ý
zFTestRefResolver.test_it_does_not_retrieve_schema_urls_from_the_networkc              	   C   sF   d}dt ƒ i| jd< | j |¡}|  || jd d ¡ W 5 Q R X d S )Nz#/properties/foor*   r«   )r]   r³  r.  rI  r   r·  r   r   r   Útest_it_resolves_local_refs%  s    z+TestRefResolver.test_it_resolves_local_refsc              	   C   sr   dddidœ}t jj|dd„ d}| d¡}|  ||d	 ¡ W 5 Q R X | d
¡}|  ||d	 ¡ W 5 Q R X d S )Nzhttp://bar/schema#r*   r•   )r=   rš   c                 S   s   |   dd¡S rA   rC   rj   r   r   r   rG   /  rH   zETestRefResolver.test_it_resolves_local_refs_with_id.<locals>.<lambda>©rJ   z#/arš   zhttp://bar/schema#/a)r   r/  Úfrom_schemarI  r   ©r#   r   r.  r¸  r   r   r   Ú#test_it_resolves_local_refs_with_id+  s    þz3TestRefResolver.test_it_resolves_local_refs_with_idc              	   C   s`   | j  | j¡}|  || j¡ W 5 Q R X ddi| j jd< | j  d¡}|  |d¡ W 5 Q R X d S )Nr*   rZ   Z
cached_refzcached_ref#/foo)r.  rI  r´  r  rµ  r,  r   )r#   r¸  r   r   r   Útest_it_retrieves_stored_refs6  s
    z-TestRefResolver.test_it_retrieves_stored_refsc              	   C   sh   d}ddi}dt jkr.|  t jjdt jd ¡ td|iƒt jd< | j |¡}|  |d¡ W 5 Q R X d S )Núhttp://bar#bazr©   rZ   Úrequestsú
http://bar)r€   r   r   Ú__setitem__ÚReallyFakeRequestsr.  rI  r   )r#   r0  r   r¸  r   r   r   Ú,test_it_retrieves_unstored_refs_via_requests>  s    
  ÿz<TestRefResolver.test_it_retrieves_unstored_refs_via_requestsc              	      sŠ   d}ddi‰ dt jkr.ˆ t jjdt jd ¡ d t jd< t‡ ‡fdd„ƒ}ˆ ttdtj¡ |t_ˆj 	|¡}W 5 Q R X ˆ 
|d¡ d S )NrÀ  r©   rZ   rÁ  c                 3   s&   ˆ  | d¡ tt ˆ ¡ d¡ƒV  d S )NrÂ  Úutf8)r   r   ÚjsonÚdumpsÚencode©Úurl©r   r#   r   r   Úfake_urlopenU  s    zQTestRefResolver.test_it_retrieves_unstored_refs_via_urlopen.<locals>.fake_urlopenÚurlopen)r€   r   r   rÃ  r   Úsetattrr   rÎ  r.  rI  r   )r#   r0  rÍ  r¸  r   rÌ  r   Ú+test_it_retrieves_unstored_refs_via_urlopenK  s     
  ÿ

z;TestRefResolver.test_it_retrieves_unstored_refs_via_urlopenc              	   C   sr   t jddd&}|  tj|j¡ t ddi|¡ W 5 Q R X d t	|jƒ¡}| j
 |¡}|  |d¡ W 5 Q R X d S )NFÚwt)ÚdeleteÚmoder*   r•   zfile://{}#foo)ÚtempfileÚNamedTemporaryFiler   ÚosÚremoverÅ   rÇ  Údumprê   r   r.  rI  r   )r#   Ztempfr0  r¸  r   r   r   Ú(test_it_retrieves_local_refs_via_urlopena  s    z8TestRefResolver.test_it_retrieves_local_refs_via_urlopenc              	   C   sÄ   ddi}t jj|dd„ d}|  |jd¡ |  |jd¡ | d¡}|  ||¡ W 5 Q R X | d¡}|  ||¡ W 5 Q R X | d¡}|  ||¡ W 5 Q R X | d¡}|  ||¡ W 5 Q R X d S )	Nr=   r*   c                 S   s   |   dd¡S rA   rC   rj   r   r   r   rG   n  rH   zPTestRefResolver.test_it_can_construct_a_base_uri_from_a_schema.<locals>.<lambda>r»  rB   ú#zfoo#©r   r/  r¼  r   r¶  Zresolution_scoperI  r½  r   r   r   Ú.test_it_can_construct_a_base_uri_from_a_schemaj  s    þz>TestRefResolver.test_it_can_construct_a_base_uri_from_a_schemac              	   C   st   i }t j |¡}|  |jd¡ |  |jd¡ | d¡}|  ||¡ W 5 Q R X | d¡}|  ||¡ W 5 Q R X d S )NrB   rÚ  rÛ  r½  r   r   r   Ú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   ‡ ‡‡fdd„}ddi‰d‰ t jdi d|id}| ˆ ¡}ˆ |ˆ¡ W 5 Q R X d S )Nc                    s   ˆ  | ˆ ¡ ˆS r%   rG  rÊ  ©r0  r   r#   r   r   Úhandler†  s    z@TestRefResolver.test_custom_uri_scheme_handlers.<locals>.handlerr*   r•   ú	foo://barrB   ©Úhandlers)r   r/  rI  r   )r#   rß  r.  r¸  r   rÞ  r   Útest_custom_uri_scheme_handlers…  s    z/TestRefResolver.test_custom_uri_scheme_handlersc              	      s`   t ƒ g‰ ‡ ‡fdd„}d}tjdi dd|id}| |¡ W 5 Q R X | |¡ W 5 Q R X d S )Nc                    s.   z
ˆ   ¡ W S  tk
r(   ˆ d¡ Y nX d S )Nz#Response must not have been cached!©r9   Ú
IndexErrorrd  rÊ  ©Úresponser#   r   r   rß  “  s    
z5TestRefResolver.test_cache_remote_on.<locals>.handlerrà  rB   Tr*   ©Zcache_remoterâ  ©r]   r   r/  rI  ©r#   rß  r0  r.  r   ræ  r   Útest_cache_remote_on  s       ÿ
z$TestRefResolver.test_cache_remote_onc              	      sJ   t ƒ g‰ ‡ ‡fdd„}d}tjdi dd|id}| |¡ W 5 Q R X d S )Nc                    s.   z
ˆ   ¡ W S  tk
r(   ˆ d¡ Y nX d S )NzHandler called twice!rä  rÊ  ræ  r   r   rß  ¥  s    
z6TestRefResolver.test_cache_remote_off.<locals>.handlerrà  rB   Fr*   rè  ré  rê  r   ræ  r   Útest_cache_remote_off¢  s       ÿz%TestRefResolver.test_cache_remote_offc              
      s|   t dƒ‰ ‡ fdd„}d}tjdi d|id}|  tj¡&}| |¡ |  d¡ W 5 Q R X W 5 Q R X |  |j	t ˆ ¡¡ d S )	NzOh no! What's this?c                    s   ˆ ‚d S r%   r   rÊ  ©r   r   r   rß  µ  s    zTTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_error.<locals>.handlerrà  rB   r*   rá  zShouldn't get this far!)
rg  r   r/  r„   r
   ÚRefResolutionErrorrI  rd  r   r…   )r#   rß  r0  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              	   C   sJ   t  di ¡}| ¡  |  tj¡}| ¡  W 5 Q R X |  dt|jƒ¡ d S )NrB   zFailed to pop the scope)	r   r/  Z	pop_scoper„   r
   rî  rL   rw   r…   )r#   r.  Úexcr   r   r   Ú.test_helpful_error_message_on_failed_pop_scope¿  s
    z>TestRefResolver.test_helpful_error_message_on_failed_pop_scopeN)r:   rl   rm   r¶  r´  rµ  r$   r¹  rº  r¾  r¿  rÅ  rÐ  rÙ  rÜ  rÝ  rã  rë  rì  rð  rò  r   r   r   r   r²    s$   	
r²  c                 C   s   dd„ }t | |dS )Nc                 S   s    dd„ | j D ƒdd„ | jD ƒfS )Nc                 S   s   g | ]}t |ƒ‘qS r   ©rw   r¢   r   r   r   rY  Ê  s     z.sorted_errors.<locals>.key.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r   ró  r¢   r   r   r   rY  Ë  s     )rþ   r.   rí  r   r   r   ÚkeyÈ  s    þzsorted_errors.<locals>.key)rô  )r£   )r3   rô  r   r   r   r  Ç  s    r  c                   @   s   e Zd Ze ¡ Zdd„ ZdS )rÄ  c                 C   s2   | j  |¡}|d kr$tdt|ƒ ƒ‚tt |¡ƒS )NzUnknown URL: )Ú
_responsesrD   rg  rÝ   Ú_ReallyFakeJSONResponserÇ  rÈ  )r#   rË  rç  r   r   r   rD   Õ  s    zReallyFakeRequests.getN)r:   rl   rm   ÚattrÚibrõ  rD   r   r   r   r   rÄ  Ð  s   rÄ  c                   @   s   e Zd Ze ¡ Zdd„ ZdS )rö  c                 C   s   t  | j¡S r%   )rÇ  ÚloadsÚ	_responser"   r   r   r   rÇ  á  s    z_ReallyFakeJSONResponse.jsonN)r:   rl   rm   r÷  rø  rú  rÇ  r   r   r   r   rö  Ü  s   rö  )0Úcollectionsr   Ú
contextlibr   Údecimalr   Úior   rp  r   rÇ  rÖ  r€   rÔ  Ztwisted.trial.unittestr   r÷  Z
jsonschemar   r	   r
   r   Zjsonschema.compatr   r   Zjsonschema.tests._helpersr   r   r   rn   r—   r´   rø   r]   r2  r<  rq  r|  rƒ  r„  r…  r†  r¡  r²  r  rF   rÄ  rö  r   r   r   r   Ú<module>   sV     ]" /   o  sN ;	