<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    ÉpSeêë  ã               @   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 )NzWhoops!)Ú
startswithr
   ÚValidationError)Ú	validatorr   ÚinstanceÚschema© r   úQ/opt/alt/python37/lib/python3.7/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 )Nz$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hellozWhoops!Zgoodbye)r   r   r   Úvalidator_valueÚschema_pathé   r   )	r   Úiter_errorsÚlistr   r
   r   r   ÚlenZ	_contents)r   r   r*   Ú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 )Nz$idÚ	somethingz
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 )Nzmeta schema idr4   z
my versionc             S   s   |   dd¡S )Nr4   Ú )Úget)Úsr   r   r   Ú<lambda>c   ó    zMTestCreateAndExtend.test_validates_registers_meta_schema_id.<locals>.<lambda>)r   r0   Úid_of)r   r   r   r   r1   ÚassertIn)r   Úmeta_schema_keyÚ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 )Nzmeta schema $idz$idz
my version)r   r0   )r   r   r   r   r1   r=   )r   r>   r?   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gD ƒƒ¡ d S )Nr   )r   r   c             3   s$   | ]\}}ˆ i ƒj ||d V  qdS ))r   ÚtypeN)Úis_type)Ú.0rB   r   )r   r   r   ú	<genexpr>y   s   z@TestCreateAndExtend.test_create_default_types.<locals>.<genexpr>Úarray)ÚbooleanT)Úintegeré   )ÚnullN)Únumberg      (@Úobject)Ústringr%   )r   r   Ú
assertTrueÚall)r   r   )r   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   )rQ   )	r   r   r!   rL   r   Úextendr   r"   r#   )r   r5   rQ   Ú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__)r8   r   ÚID_OF)r   )r   r   r   r<       s    z3TestCreateAndExtend.test_extend_idof.<locals>.id_ofzthe://correct/id/zthe://wrong/id/)z$idrU   )r   r   r   r<   N)r   r   r   r   rV   r"   rR   )r   r<   Z
correct_idr   ZOriginalZDerivedr   )r   r   Útest_extend_idofœ   s    
z$TestCreateAndExtend.test_extend_idofN)r2   Ú
__module__Ú__qualname__r    r$   r&   r.   r3   r6   r@   rA   rP   rT   rW   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   )r   r   rF   rG   rH   rJ   rK   rL   rM   )r   r   r   ÚsetÚDEFAULT_TYPESÚflushWarnings)r   r   r   r   r   rP   ´   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   )r   r   rQ   )r   r   Úmessage)rQ   )r   r   r   r!   rL   rR   r   r"   r#   r\   r]   )r   r   r5   rQ   rS   r   r   r   rT   Â   s*    

z"TestLegacyTypeChecking.test_extendc             C   sP   ddi}|   t |¡ d¡¡ tj|dttfid}|  | d¡¡ |  ¡  d S )NrB   rM   rI   )Útypes)ÚassertFalser   ÚDraft7ValidatorÚis_validÚstrÚintrN   r]   )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%   )Úcategoryr^   ÚfilenameÚfr   r   Údefault_types)	ÚassertWarnsÚDeprecationWarningÚsysÚmodulesrX   Ú__file__r   r   rL   )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 dQ R X |  dt|jƒ¡ |  t j¡ |i ƒj W d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   r   r   Nz=DEFAULT_TYPES cannot be used on Validators using TypeCheckers)r   r   r	   ÚassertRaisesZ_DontDoThatr\   r=   rc   Ú	exceptionr`   r]   )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 )N)r   r   r   )r   r   r	   r`   r]   )r   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 )N)r   r   )r   r   r`   r]   )r   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 d Q R X |  dt|jƒ¡ |  	|  
¡ ¡ d S )Nr%   )r   r   ri   r   z:Do not specify default_types when providing a type checker)rp   Ú	TypeErrorr   r   rL   r	   r=   rc   rq   r`   r]   )r   rr   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 d Q R X |  dt|j	ƒ¡ |  
¡  d S )NrF   )r   r   ri   )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   r+   rp   rv   rR   r	   r=   rc   rq   r]   )r   r   rr   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   ri   )r   r   rN   r]   rR   r`   )r   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 )N)r   r   zcThe DEFAULT_TYPES attribute is deprecated. See the type checker attached to this validator instead.r\   )r   r   r`   r]   rj   rk   rl   rm   rX   rn   Úgetattr)r   r   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 )N)r   r   zcThe DEFAULT_TYPES attribute is deprecated. See the type checker attached to this validator instead.r\   )r   r   r`   r]   rj   rk   rl   rm   rX   rn   rz   )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 )N)r   r   zaThe types argument is deprecated. Provide a type_checker to jsonschema.validators.extend instead.Úbar)rf   r^   rg   rh   r   r_   )r   r   r`   r]   rj   rk   rl   rm   rX   rn   rL   )r   r   r   r   r   Ú"test_providing_types_to_init_warns{  s    z9TestLegacyTypeChecking.test_providing_types_to_init_warnsN)r2   rX   rY   rP   rT   re   ro   rs   rt   ru   rw   rx   ry   r{   r|   r~   r   r   r   r   rZ   ³   s   rZ   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestIterErrorsc             C   s   t  i ¡| _d S )N)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)   é   rF   ÚaÚbÚcÚdrr   rh   é   )ÚdisallowÚenumÚminItemsc             s   s   | ]}|j V  qd S )N)r^   )rD   rr   r   r   r   rE   ›  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   r*   r   Úsorted)r   r   r   ZgotZexpectedr   r   r   r.   “  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Ú
propertiesrB   rM   r‰   é
   é   é   é   )Úmaximumrˆ   )r%   r}   r   )r+   r   r*   r   r,   )r   r   r   r-   r   r   r   Ú0test_iter_errors_multiple_failures_one_validator£  s    z?TestIterErrors.test_iter_errors_multiple_failures_one_validatorN)r2   rX   rY   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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 d Q R X |jjS )NÚcls)	Ú
setdefaultr   r€   rp   r
   r   Úvalidaterq   r^   )r   r   r   ÚargsÚkwargsrr   r   r   r   Úmessage_for²  s    z'TestValidationErrorMessages.message_forc             C   s&   | j dddid}|  |dd ¡ d S )Nr)   rB   rM   )r   r   z1 is not of type %r)rœ   r   )r   r^   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 )Nr)   rB   rM   )r   r   z1 is not of type %r)rœ   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)rM   rL   r)   rB   )r   r   z1 is not of type %r, %r)rœ   r+   r   )r   r_   r^   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 )NrB   Úminimumr†   r)   )r   r   z1 is less than the minimum of 3)rœ   r   )r   rB   r^   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 )NrB   ZFoor†   )Únamer    r)   )r   r   z1 is less than the minimum of 3)rœ   r   )r   r   r^   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   r   z1 is less than the minimum of 2)rœ   r   )r   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   r   z"1 is greater than the maximum of 0)rœ   r   )r   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   ÚdependÚonr   r^   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 )N)r}   r%   r¦   r}   r   )r   r   r—   z%r is a dependency of %r)rœ   r   r€   r   )r   r§   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 )N)r}   r%   r¦   r}   r   )r   r   r—   z%r is a dependency of %r)rœ   r   ra   r   )r   r§   r¨   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)ÚitemsÚadditionalItems)r   r   z(2 was unexpected))rœ   r=   )r   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†   F)r¬   r­   )r   r   z(1, 2, 3 were unexpected))rœ   r=   )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   r   z(%r was unexpected))rœ   r=   )r   Ú
additionalr   r^   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   r   zwere unexpected))rœ   r   Úfromkeysr=   Úrepr)r   r   r^   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ÚconstrI   r%   r}   )r   r   r—   z12 was expected)rœ   r   ÚDraft6Validatorr=   )r   r   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¶   rI   r   )r   r   r—   z4None of [2, {}, []] are valid under the given schema)rœ   r   r·   r=   )r   r   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   r:   +  r;   zQTestValidationErrorMessages.test_invalid_format_default_message.<locals>.<lambda>ÚformatZbla)r   r   Úformat_checkerzis not a)r   Úchecksrœ   r=   r´   )r   Úcheckerr   r^   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 )NrL   FrB   rM   )z^abc$z^def$)rB   r°   ÚpatternPropertiesÚzebraé{   )r   r   r—   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   ÚDraft4Validatorr   r¾   r´   )r   r   r^   r   r   r   Ú1test_additionalProperties_false_patternProperties8  s(    

zMTestValidationErrorMessages.test_additionalProperties_false_patternPropertiesc             C   s"   | j ddtjd}|  d|¡ d S )Nr/   F)r   r   r—   z'False schema does not allow 'something')rœ   r   ra   r=   )r   r^   r   r   r   Útest_False_schemaV  s
    
z-TestValidationErrorMessages.test_False_schemaN)r2   rX   rY   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    é   rB   rM   r)   r   r   )r   rÇ   r+   r*   r   r,   r   r'   r   r   ÚassertIsNoneÚparentÚpathr   Úrelative_pathÚabsolute_pathr(   Úrelative_schema_pathÚabsolute_schema_pathÚcontextÚsorted_errorsÚassertIsr`   )r   r   r   r   r-   rr   Úe1Úe2r   r   r   Ú
test_anyOfb  s\    
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)   rB   rH   rL   rˆ   r   )rB   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×   r`   )r   r   r   r   r-   rr   rØ   rÙ   r   r   r   Ú	test_type¤  sd    
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}   r   rŽ   r   rB   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   )	r   r   r   r   r-   rØ   rÙ   Úe3Úe4r   r   r   Útest_single_nestingî  s0    

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Ž   rM   rL   rˆ   r†   rF   ÚrequiredTr‰   )r}   r   )rB   r   )rB   r¬   r   r}   r%   rB   r¬   r   )
r   r€   r*   rÖ   r   rÐ   r   r(   r+   r   )r   r   r   r   r-   rØ   rÙ   rÜ   rÝ   Ze5Ze6r   r   r   Útest_multiple_nesting  sD    


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Ì   rL   r¢   ÚchildrenrB   rM   z^.*$z$refz#/definitions/node)rB   rÃ   )r¢   râ   )rB   rß   r   Úroot)ÚdefinitionsrB   rß   r   r‚   Úabr   r   rÃ   )r   rÇ   r*   r   rÒ   r   rÔ   rÕ   )r   r   r   r   rr   rØ   rÙ   r   r   r   Útest_recursiveF  sp    

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%   r°   rH   rË   )rB   r    r%   rB   r    )r   r€   r*   rÖ   r   rÐ   r   r   )r   r   r   r   r-   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%   rÃ   rB   rM   r    rË   r}   r%   )r   r€   r*   rÖ   r   rÐ   r   r   )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)   rH   rË   )rB   r    )r¬   r­   r   rB   r    )r   r€   r*   rÖ   r   rÐ   r   r   )r   r   r   r   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)   rH   rË   )rB   r    )r¬   r­   r   rB   r    )r   r€   r*   rÖ   r   rÐ   r   r   )r   r   r   r   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%   rI   ZpropertyNamesÚnotr¶   z%r is not allowed for %r)	r   ra   r*   r   r   r^   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¶   rI   é   )ÚifÚthenz13 was expectedrï   rð   )	r   ra   r*   r   r   r^   rÐ   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¶   rI   rî   )rï   Úelser‹   z13 was expectedrï   rò   )	r   ra   r*   r   r   r^   rÐ   r   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 )NFrI   zFalse schema does not allow 12)r   ra   r*   r   r^   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°   rB   rH   z$refr7   )Ústore)Úresolverr%   ZnotAnIntegerz''notAnInteger' is not of type 'integer')r   ra   ÚRefResolverr*   r   r^   r   r'   r   rÒ   r   r(   r   )r   Úrefr   r   rì   r   r   r   Útest_ref-  s(    z#TestValidationErrorDetails.test_refN)r2   rX   rY   rÚ   rÛ   rÞ   rà   ræ   rç   rè   ré   rê   rí   rñ   ró   rô   rù   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 d Q R X d S )Nr   Útest)rp   r
   ÚSchemaErrorr   Úcheck_schemarL   )r   r   r   r   Útest_invalid_propertiesM  s    z,MetaSchemaTestsMixin.test_invalid_propertiesc          	   C   s,   |   tj¡ | j ddi¡ W d Q R X d S )Nr‰   Ú1)rp   r
   rü   r   rý   )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   rý   )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ˆ   rI   N)r   rý   )r   r   r   r   Ú!test_enum_allows_non_unique_items^  s    z6MetaSchemaTestsMixin.test_enum_allows_non_unique_itemsN)r2   rX   rY   rþ   r   r  r  r   r   r   r   rú   K  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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 )N)ÚvalidrN   r   rb   )r   r   r   r   r   r   Útest_valid_instances_are_validh  s    
z1ValidatorTestMixin.test_valid_instances_are_validc             C   s$   | j \}}|  |  |¡ |¡¡ d S )N)Úinvalidr`   r   rb   )r   r   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   rL   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 )N)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 d Q R X d S )NZsomeCoolRefrB   rH   r7   )rõ   z$ref)rö   )r   r÷   r   rp   r
   r   r™   )r   rø   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 d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 )Nzthe refrB   rH   )r   )Úthisrø   )r   r   r   Ú	resolvingˆ  s    zbValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver.<locals>.LegacyRefResolver.resolvingN)r2   rX   rY   r   r  r   )r   r   r   ÚLegacyRefResolver‡  s   r  z$refzthe ref)rö   N)rL   rp   r
   r   r   r™   )r   r  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%   rM   )rN   r   rC   )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%   rF   )r`   r   rC   )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 )NTrH   rK   )r`   r   rC   )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 )NrB   rM   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%   N)r   r™   )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¬   rB   rK   c             S   s   t |tttfƒot |tƒ S )N)Ú
isinstancerd   Úfloatr   Úbool)rÁ   r¼   r   r   r   r:   ­  s   zGValidatorTestMixin.test_it_can_validate_with_decimals.<locals>.<lambda>)r   r)   gš™™™™™ñ?r“   r%   Tc             S   s   g | ]
}|j ‘qS r   )r   )rD   rì   r   r   r   ú
<listcomp>¸  s    zIValidatorTestMixin.test_it_can_validate_with_decimals.<locals>.<listcomp>)	r   rR   r   r#   Úredefiner™   r   r   r*   )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¾   Zcarrot)r¿   Z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 )N)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 d 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½   )r  r   r   r   ÚcheckÊ  s
    zTValidatorTestMixin.test_it_validates_formats_if_a_checker_is_provided.<locals>.checkr¾   )r¿   r  r  )r   Ú
ValueErrorrÀ   r   r™   rp   r
   r   r×   rq   Úcause)r   rÁ   r   r   Úcmr   )r  r   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 )NrB   c             S   s
   t |tƒS )N)r  rd   )rÁ   r¼   r   r   r   r:   å  r;   z@ValidatorTestMixin.test_non_string_custom_type.<locals>.<lambda>)r   r‹   )rL   r   rR   r   r#   r  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 d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
        rF   c             S   s
   t |tƒS )N)r  Útuple)rÁ   r¼   r   r   r   r:   ô  r;   zNValidatorTestMixin.test_it_properly_formats_tuples_in_errors.<locals>.<lambda>)r   ZuniqueItemsT)r)   r)   Nz(1, 1) has non-unique elements)r   rR   r   r#   r  rp   r
   r   r™   r=   rc   rq   )r   ZTupleValidatorrr   r   r   r   Ú)test_it_properly_formats_tuples_in_errorsê  s    z<ValidatorTestMixin.test_it_properly_formats_tuples_in_errorsN)r2   rX   rY   r  r  r  r	  r
  r  r  r  r  ÚunittestZskipIfr   r  r  r  r  r  r$  r&  r(  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 d Q R X |  dt|jƒ¡ d S )NTzTrue is not of type)rp   r
   rü   r   rý   r=   rc   rq   )r   rr   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 d Q R X |  dt|jƒ¡ d S )NFzFalse is not of type)rp   r
   rü   r   rý   r=   rc   rq   )r   rr   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 d Q R X |  |jtj	¡ d S )Nr7   T)rö   rI   )
r   r÷   rp   Ú	Exceptionr   r™   ÚassertNotIsInstancerq   r
   r   )r   rö   rr   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 d Q R X |  |jtj	¡ d S )Nr7   F)rö   rI   )
r   r÷   rp   r-  r   r™   r.  rq   r
   r   )r   rö   rr   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)r2   rX   rY   Ú__doc__r+  r,  r)  Úskipr   r/  r0  r   r   r   r   r*  ü  s
   r*  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 )ÚTestDraft3ValidatorrB   rH   r%   c             C   s   |   ddi¡}| tƒ ¡ d S )NrB   Úany)r   r™   rL   )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 dQ R X dS )	z(
        Sigh, because why not.
        r4  c             S   s
   t |tƒS )N)r  rd   )rÁ   r¼   r   r   r   r:   *  r;   zBTestDraft3Validator.test_any_type_is_redefinable.<locals>.<lambda>)r   rB   rI   r%   N)	r   rR   r   r#   r  r™   rp   r
   r   )r   r%  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 )NrB   r4  )rN   r   rb   rL   )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 )NTrG   rB   r4  )rN   r   rC   rb   )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)r2   rX   rY   r   r€   r   r  r  r5  r6  r7  r8  r   r   r   r   r3    s   r3  c               @   s&   e Zd ZejZi i fZddidfZdS )ÚTestDraft4ValidatorrB   rH   r%   N)r2   rX   rY   r   rÇ   r   r  r  r   r   r   r   r9  :  s   r9  c               @   s&   e Zd ZejZi i fZddidfZdS )ÚTestDraft6ValidatorrB   rH   r%   N)r2   rX   rY   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 )ÚTestDraft7ValidatorrB   rH   r%   N)r2   rX   rY   r   ra   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 )Nz$schemaz&http://json-schema.org/draft-03/schemaz'http://json-schema.org/draft-03/schema#)r×   r   Úvalidator_forr€   )r   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 )Nz$schemaz&http://json-schema.org/draft-04/schemaz'http://json-schema.org/draft-04/schema#)r×   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 )Nz$schemaz&http://json-schema.org/draft-06/schemaz'http://json-schema.org/draft-06/schema#)r×   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 )Nz$schemaz&http://json-schema.org/draft-07/schemaz'http://json-schema.org/draft-07/schema#)r×   r   r=  ra   )r   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=  Ú_LATEST_VERSION)r   r   r   r   Ú	test_True  s    zTestValidatorFor.test_Truec             C   s   |   t d¡tj¡ d S )NF)r×   r   r=  rB  )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 )Nr4   zmeta schema idZ12c             S   s   |   dd¡S )Nr4   r7   )r8   )r9   r   r   r   r:   ‘  r;   z8TestValidatorFor.test_custom_validator.<locals>.<lambda>)r   r0   r<   z$schema)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 )Nz$idzmeta schema $idZ13)r   r0   z$schema)r   r   r×   r=  )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 )N)r×   r   r=  rB  )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.z$schemaZunknownSchema)rf   r^   rg   rh   r   rH  )rj   rk   rl   rm   rX   rn   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   rH  )r   r=  r`   r]   )r   r   r   r   Ú0test_does_not_warn_if_meta_schema_is_unspecifiedº  s    zATestValidatorFor.test_does_not_warn_if_meta_schema_is_unspecifiedN)r2   rX   rY   r>  r?  r@  rA  rC  rD  rE  rF  rG  rI  rJ  rK  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 )Nrý   )Ú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 )Nz$schemaz'http://json-schema.org/draft-03/schema#)r   r   z&http://json-schema.org/draft-03/schema)rP  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 )Nz$schemaz'http://json-schema.org/draft-04/schema#)r   r   z&http://json-schema.org/draft-04/schema)rP  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 )Nz$schemaz'http://json-schema.org/draft-06/schema#)r   r   z&http://json-schema.org/draft-06/schema)rP  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 )Nz$schemaz'http://json-schema.org/draft-07/schema#)r   r   z&http://json-schema.org/draft-07/schema)rP  r   ra   )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 )N)r   r   )rP  r   ra   )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 d Q R X |  t|jƒd¡ d S )NrI   rB   rM   z3(?s)Failed validating u?'.*' in schema.*On instance)rp   r
   r   r   r™   ÚassertRegexpMatchesrc   rq   )r   rr   r   r   r   Útest_validation_error_messageõ  s
    z*TestValidate.test_validation_error_messagec          	   C   s>   |   tj¡}t dddi¡ W d Q R X |  t|jƒd¡ d S )NrI   rB   z5(?s)Failed validating u?'.*' in metaschema.*On schema)rp   r
   rü   r   r™   rV  rc   rq   )r   rr   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 d Q R X |  dt|jƒ¡ d S )NÚoneOfrB   rM   rF   rI   z12 is not of type)rp   r
   r   r   r™   r=   rc   rq   )r   r   rr   r   r   r   Útest_it_uses_best_match  s    z$TestValidate.test_it_uses_best_matchN)r2   rX   rY   rP  rQ  rR  rS  rT  rU  rW  rX  rZ  r   r   r   r   rL  ¿  s   rL  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 )$ÚTestRefResolverr7   zfoo://storedZstoredr   c             C   s.   i | _ | j| ji| _t | j| j | j¡| _d S )N)Ú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 d Q R X ˆ  |t jj¡ d S )Nr4   Zresolve_remotec                 s
   ˆ   d¡S )NzShould not have been called!)r  )rš   r›   )r   r   r   r:     r;   zXTestRefResolver.test_it_does_not_retrieve_schema_urls_from_the_network.<locals>.<lambda>)r   r€   r"   rM  rö   r  r   )r   rø   Ú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 d Q R X d S )Nz#/properties/foor%   r   )rL   r\  rö   r  r   )r   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 d Q R X | d
¡}|  ||d	 ¡ W d Q R X d S )Nzhttp://bar/schema#r%   r}   )r4   r‚   c             S   s   |   dd¡S )Nr4   r7   )r8   )r   r   r   r   r:   /  r;   zETestRefResolver.test_it_resolves_local_refs_with_id.<locals>.<lambda>)r<   z#/ar‚   zhttp://bar/schema#/a)r   r÷   Úfrom_schemar  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 d Q R X ddi| j jd< | j  d¡}|  |d¡ W d Q R X d S )Nr%   rI   Z
cached_refzcached_ref#/foo)rö   r  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 d Q R X d S )Nzhttp://bar#bazr   rI   Úrequestsz
http://bar)rl   rm   r   Ú__setitem__ÚReallyFakeRequestsrö   r  r   )r   rø   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 d Q R X ˆ 
|d¡ d S )Nzhttp://bar#bazr   rI   rf  c             3   s&   ˆ  | d¡ tt ˆ ¡ d¡ƒV  d S )Nz
http://barÚ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)rl   rm   r   rg  r   Úsetattrr   rp  rö   r  r   )r   rø   ro  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 d Q R X d t	|jƒ¡}| j
 |¡}|  |d¡ W d Q R X d S )NFÚwt)ÚdeleteÚmoder%   r}   zfile://{}#foo)ÚtempfileÚNamedTemporaryFiler   ÚosÚremover¢   rk  Údumpr¾   r   rö   r  r   )r   Ztempfrø   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 d Q R X | d¡}|  ||¡ W d Q R X | d¡}|  ||¡ W d Q R X | d¡}|  ||¡ W d Q R X d S )	Nr4   r%   c             S   s   |   dd¡S )Nr4   r7   )r8   )r   r   r   r   r:   n  r;   zPTestRefResolver.test_it_can_construct_a_base_uri_from_a_schema.<locals>.<lambda>)r<   r7   ú#zfoo#)r   r÷   rc  r   r_  Úresolution_scoper  )r   r   rö   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 d Q R X | d¡}|  ||¡ W d Q R X d S )Nr7   r|  )r   r÷   rc  r   r_  r}  r  )r   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 d Q R X d S )Nc                s   ˆ  | ˆ ¡ ˆS )N)r   )rn  )rø   r   r   r   r   Úhandler†  s    z@TestRefResolver.test_custom_uri_scheme_handlers.<locals>.handlerr%   r}   z	foo://barr7   )Úhandlers)r   r÷   r  r   )r   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 d Q R X | |¡ W d Q R X d S )Nc                s,   yˆ   ¡ S  tk
r&   ˆ d¡ Y nX d S )Nz#Response must not have been cached!)r1   Ú
IndexErrorr  )rn  )Úresponser   r   r   r€  “  s    z5TestRefResolver.test_cache_remote_on.<locals>.handlerz	foo://barr7   Tr%   )Úcache_remoter  )rL   r   r÷   r  )r   r€  rø   rö   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 d Q R X d S )Nc                s,   yˆ   ¡ S  tk
r&   ˆ d¡ Y nX d S )NzHandler called twice!)r1   rƒ  r  )rn  )r„  r   r   r   r€  ¥  s    z6TestRefResolver.test_cache_remote_off.<locals>.handlerz	foo://barr7   Fr%   )r…  r  )rL   r   r÷   r  )r   r€  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 d Q R X W d Q R X |  |j	t ˆ ¡¡ d S )	NzOh no! What's this?c                s   ˆ ‚d S )Nr   )rn  )rì   r   r   r€  µ  s    zTTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_error.<locals>.handlerz	foo://barr7   r%   )r  zShouldn't get this far!)
r!  r   r÷   rp   r
   ÚRefResolutionErrorr  r  r   rq   )r   r€  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          	   C   sJ   t  di ¡}| ¡  |  tj¡}| ¡  W d Q R X |  dt|jƒ¡ d S )Nr7   zFailed to pop the scope)	r   r÷   Z	pop_scoperp   r
   rˆ  r=   rc   rq   )r   rö   Úexcr   r   r   Ú.test_helpful_error_message_on_failed_pop_scope¿  s
    z>TestRefResolver.test_helpful_error_message_on_failed_pop_scopeN)r2   rX   rY   r_  r]  r^  r    ra  rb  rd  re  ri  rr  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   )rc   )rD   rr   r   r   r   r  Ê  s    z.sorted_errors.<locals>.key.<locals>.<listcomp>c             S   s   g | ]}t |ƒ‘qS r   )rc   )rD   rr   r   r   r   r  Ë  s    )rÐ   r(   )rì   r   r   r   ÚkeyÈ  s    zsorted_errors.<locals>.key)r  )rŠ   )r-   r  r   r   r   rÖ   Ç  s    rÖ   c               @   s   e Zd Ze ¡ Zdd„ ZdS )rh  c             C   s2   | j  |¡}|d kr$tdt|ƒ ƒ‚tt |¡ƒS )NzUnknown URL: )Ú
_responsesr8   r!  r´   Ú_ReallyFakeJSONResponserk  rl  )r   rn  r„  r   r   r   r8   Õ  s    zReallyFakeRequests.getN)r2   rX   rY   ÚattrÚibrŽ  r8   r   r   r   r   rh  Ð  s   rh  c               @   s   e Zd Ze ¡ Zdd„ ZdS )r  c             C   s   t  | j¡S )N)rk  ÚloadsÚ	_response)r   r   r   r   rk  á  s    z_ReallyFakeJSONResponse.jsonN)r2   rX   rY   r  r‘  r“  rk  r   r   r   r   r  Ü  s   r  )0Úcollectionsr   Ú
contextlibr   Zdecimalr   Úior   r)  r   rk  rx  rl   rv  Ztwisted.trial.unittestr   r  Z
jsonschemar   r	   r
   r   Zjsonschema.compatr   r   Zjsonschema.tests._helpersr   r   r   rZ   r   r–   rÊ   rL   rú   r  r*  r3  r9  r:  r;  r<  rL  r[  rÖ   r9   rh  r  r   r   r   r   Ú<module>   sV     ]" /   o  sN ;	