
    MhW                   :   d dl mZ d dlmZ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mZ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mZ d dlmZ d d	lZd dlmZm Z m!Z!m"Z"m#Z# d Z$ G d de          Z% G d de          Z& G d de          Z' G d d          Z( G d de(          Z) G d d          Z* G d de*e)e          Z+ G d de*e)e          Z, G d de)e          Z- G d  d!e)e          Z. G d" d#e)e          Z/ G d$ d%e)e          Z0 G d& d'e          Z1 G d( d)e          Z2 G d* d+e          Z3 G d, d-e          Z4 G d. d/e          Z5 G d0 d1e          Z6d2 Z7e G d3 d4                      Z8e G d5 d6                      Z9d	S )7    )annotations)deque
namedtuple)contextmanager)Decimal)BytesIO)Any)TestCasemock)pathname2urlN)definefield)DRAFT202012)FormatCheckerTypeChecker
exceptions	protocols
validatorsc              #  f   K   |D ]+}|                     dd           t          j        di |V  ,d S )NmessagezYou told me to fail! )
setdefaultr   ValidationError)	validatorerrorsinstanceschemaeachs        `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jsonschema/tests/test_validators.pyfailr       sT       1 1	#9:::(0040000001 1    c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestCreateAndExtendc                   |                      | j        t          j        t	          t          j                             |                      | j        t          j        t	          t          j                             ddi| _        dt          i| _        t                      | _	        t          j
        | j        | j        | j	                  | _        d S )N$idzsome://meta/schemar    )meta_schemar   type_checker)
addCleanupassertEqualr   _META_SCHEMASdict_VALIDATORSr&   r    r   r'   create	Validatorselfs    r   setUpzTestCreateAndExtend.setUp$   s    $)**	
 	
 	

 	"'((	
 	
 	
 "#78!4.'MM#*(*
 
 
r!   c                    |                      | j        j        | j        j        | j        j        f| j        | j        | j        f           d S N)r)   r.   
VALIDATORSMETA_SCHEMATYPE_CHECKERr   r&   r'   r/   s    r   
test_attrszTestCreateAndExtend.test_attrs9   sY    )*+
  !
	
 
	
 
	
 
	
 
	
r!   c                j    dg i}|                      |                     |          j        |           d S )Nr    )r)   r.   r   r0   r   s     r   	test_initzTestCreateAndExtend.test_initF   s6    "//6?????r!   c                    dg i}|                      |          }t          |                    d                    }|                     |g            d S )Nr    hello)r.   listiter_errorsr)   r0   r   r   r   s       r   test_iter_errors_successfulz/TestCreateAndExtend.test_iter_errors_successfulJ   sS    "NN6**	i++G4455$$$$$r!   c           
        dddigi}|                      |          }t          j        dd|dddigt          dg                    }t	          |                    d                    }|                     t          |          d           |                     |d                                         |                                           d S )Nr    r   zWhoops!goodbye)r   r   r   validator_valueschema_path   r   )	r.   r   r   r   r=   r>   r)   len	_contents)r0   r   r   expected_errorr   s        r   test_iter_errors_one_errorz.TestCreateAndExtend.test_iter_errors_one_errorQ   s    Iy123NN6**	#3'34vh
 
 
 i++I6677Va(((,,..0H0H0J0JKKKKKr!   c                    dddidddddigi}|                      |          }t          |                    d                    }|                     t	          |          d	           d S )
Nr    r   FirstzSecond!asdf)r   r   ThirdrB      )r.   r=   r>   r)   rF   r?   s       r    test_iter_errors_multiple_errorsz4TestCreateAndExtend.test_iter_errors_multiple_errorsb   s|    G$%F;;G$
 NN6**	i++I6677Va(((((r!   c                6   t          j        ddid          }|                     t           j        j        d           |                     t           j        j        d           |                     |j        d           |                     |j        d           d S )Nr%   	something
my versionr&   versionMyVersionValidator)	r   r-   r(   r*   popr,   r)   __name____qualname__r0   r.   s     r   .test_if_a_version_is_provided_it_is_registeredzBTestCreateAndExtend.test_if_a_version_is_provided_it_is_registeredo   s    %, 
 
 
	 	
04kBBB
.2LAAA+-ABBB/1EFFFFFr!   c                "   t          j        ddid          }|                     t           j        j        d           |                     t           j        j        d           |                     t           |i                     d           d S )Nr%   rQ   rR   rS   z2MyVersionValidator(schema={}, format_checker=None))r   r-   r(   r*   rV   r,   r)   reprrY   s     r   	test_reprzTestCreateAndExtend.test_repry   s    %, 
 
 
	 	
04kBBB
.2LAAA2@	
 	
 	
 	
 	
r!   c                Z   t          j        ddid          }|                     t           j        j        d           |                     t           j        j        d           |                     t           |dt          t          d                    i                    d           d S )Nr%   rQ   rR   rS   ai  zNMyVersionValidator(schema={'a': [0, 1, 2, 3, 4, 5, ...]}, format_checker=None))
r   r-   r(   r*   rV   r,   r)   r\   r=   rangerY   s     r   test_long_reprz"TestCreateAndExtend.test_long_repr   s    %, 
 
 
	 	
04kBBB
.2LAAACeDkk!2!234455'	
 	
 	
 	
 	
r!   c                    t          j        i           }|                     t           |i                     d           d S )Nr&   z)Validator(schema={}, format_checker=None))r   r-   r)   r\   rY   s     r   test_repr_no_versionz(TestCreateAndExtend.test_repr_no_version   sM    %"555	27	
 	
 	
 	
 	
r!   c                    t          j        ddid          }|                     t           j        j        d           |                     t           j        j        d           |                     |j        d           d S )Nr%   rQ   zfoo-barrS   FooBarValidator)r   r-   r(   r*   rV   r,   r)   rX   rY   s     r   -test_dashes_are_stripped_from_validator_nameszATestCreateAndExtend.test_dashes_are_stripped_from_validator_names   sz    %,
 
 
	 	
04kBBB
.2I>>>/1BCCCCCr!   c                    t          t          j                  }t          j        ddi           |                     t          j        |           d S )Nidrc   )r+   r   r*   r-   r)   )r0   originals     r   6test_if_a_version_is_not_provided_it_is_not_registeredzJTestCreateAndExtend.test_if_a_version_is_not_provided_it_is_not_registered   sI    
011tTl333318<<<<<r!   c                   d}d|i}t          j        |dd            |                     t           j        j        |           |                     t           j        j        d           |                     |t           j                   d S )Nmeta schema idri   rR   c                .    |                      dd          S Nri    getss    r   <lambda>zMTestCreateAndExtend.test_validates_registers_meta_schema_id.<locals>.<lambda>       AEE$OO r!   r&   rT   id_ofr   r-   r(   r*   rV   r,   assertInr0   meta_schema_keymy_meta_schemas      r   'test_validates_registers_meta_schema_idz;TestCreateAndExtend.test_validates_registers_meta_schema_id   s    *0& ++	
 	
 	
 	

 	
04oFFF
.2LAAAoz'?@@@@@r!   c                   d}d|i}t          j        |d           |                     t           j        j        |           |                     t           j        j        d           |                     |t           j                   d S )Nmeta schema $idr%   rR   rS   ry   r{   s      r   .test_validates_registers_meta_schema_draft6_idzBTestCreateAndExtend.test_validates_registers_meta_schema_draft6_id   s    +1& 	
 	
 	
 	
 	
04oFFF
.2LAAAoz'?@@@@@r!   c                    t          j        i d          |                     t          fddg fddddd	i fd
fD                                  d S )Nr   r&   r   c              3  ^   K   | ]'\  }} i                                ||           V  (dS ))r   typeN)is_type).0r   r   r.   s      r   	<genexpr>z@TestCreateAndExtend.test_create_default_types.<locals>.<genexpr>   sV        "D( 	"%%xd%CC     r!   array)booleanT)integer   )nullN)numberg      (@object)stringfoo)r   r-   
assertTrueallrY   s    @r   test_create_default_typesz-TestCreateAndExtend.test_create_default_types   s    %"DDD	     bM%#"$rN%'    	
 	
 	
 	
 	
r!   c                j   t          j        t           j        j        d         di id          }|                    ddi           |                     t          j                  5  |                    i            ddd           n# 1 swxY w Y    |ddi                              d           dS )zq
        One can create a validator class whose metaschema uses a different
        dialect than itself.
        r%   const)$schemanotrc   r   barN)	r   r-   Draft202012Validatorr5   check_schemaassertRaisesr   SchemaErrorvalidater0   NoEmptySchemasValidators     r   +test_check_schema_with_different_metaschemaz?TestCreateAndExtend.test_check_schema_with_different_metaschema   s     #-"3%:FuM} #
 #
 #
 	 ,,eU^<<<z566 	5 	5#00444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	 //88?????s   &BBBc                    t          j        dddigidt          i          }|                     t          j                  5  |                    i            ddd           dS # 1 swxY w Y   dS )z
        A validator whose metaschema doesn't declare $schema defaults to its
        own validation behavior, not the latest "normal" specification.
        r    r   zMeta schema whoops!r   N)r   r-   r    r   r   r   r   r   s     r   <test_check_schema_with_different_metaschema_defaults_to_selfzPTestCreateAndExtend.test_check_schema_with_different_metaschema_defaults_to_self   s     #-"39.C"D!EF~#
 #
 #
 z566 	5 	5#00444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   A%%A),A)c                B   t          | j        j                  }t                      }t	          j        | j        d|i          }|                     |j        |j        |j        | j        j        ft          ||          | j        j        | j        j        |f           d S )Nnew)r   )r   )	r+   r.   r4   r   r   extendr)   r5   r6   )r0   rj   r   Extendeds       r   test_extendzTestCreateAndExtend.test_extend   s    122hh$Ns|
 
 
 	#$%)	 X3'''*+		
 	
 	
 	
 	
r!   c                D     fd}d}d|d}t          j        | j          j        |          }                     |                    |j                  |           t          j        |          }                     |                    |j                  |           dS )zK
        Extending a validator preserves its notion of schema IDs.
        c                `    |                      dj                            |                     S )N__test__)rr   r.   ID_OF)r   r0   s    r   rx   z3TestCreateAndExtend.test_extend_idof.<locals>.id_of  s'    ::j$.*>*>v*F*FGGGr!   zthe://correct/id/zthe://wrong/id/)r%   r   )r&   r   r'   rx   N)r   r-   r'   r)   r   r5   r   )r0   rx   
correct_idr&   OriginalDeriveds   `     r   test_extend_idofz$TestCreateAndExtend.test_extend_idof
  s    	H 	H 	H 	H 	H(
$"
 
 $#*	
 
 
 	(<==zJJJ#H--w':;;ZHHHHHr!   c                0   dddiiddd}t          j        |          }|                     |                    d                     t          j        t           j                  }|                      ||                              d                     dS )	zV
        Extending a validator preserves its notion of applicable validators.
        testr   r   z#/$defs/testrE   )$defs$refmaximum%   N)r   Draft4Validatorr   is_validr   )r0   r   draft4r   s       r   !test_extend_applicable_validatorsz5TestCreateAndExtend.test_extend_applicable_validators   s     vx01"
 
 +F33++,,,#J$>??004455555r!   N)rW   
__module__rX   r1   r7   r:   r@   rI   rO   rZ   r]   ra   rd   rg   rk   r~   r   r   r   r   r   r   r   r   r!   r   r#   r#   #   sX       
 
 
*
 
 
@ @ @% % %L L L") ) )G G G

 

 


 
 

 
 
D D D= = =
A A AA A A
 
 
"@ @ @&5 5 5
 
 
,I I I,6 6 6 6 6r!   r#   c                  j   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d;S )<TestValidationErrorMessagesc                f   |                     dt          j                  }|                    |            ||g|R i |}t	          |                    |                    }|                     |d|           |                     t          |          dd|           |d         j	        S )NclszNo errors were raised for )msgrE   z"Expected exactly one error, found r   )
rV   r   _LATEST_VERSIONr   r=   r>   r   r)   rF   r   )r0   r   r   argskwargsr   r   r   s           r   message_forz'TestValidationErrorMessages.message_for3  s    jj
 :;;   C000000	i++H5566$M$M$MNNNKK?V?? 	 	
 	
 	

 ay  r!   c                d    |                      dddi          }|                     |d           d S NrE   r   r   r   r   1 is not of type 'string'r   r)   r0   r   s     r   test_single_type_failurez4TestValidationErrorMessages.test_single_type_failure@  s<    ""Avx6H"II"=>>>>>r!   c                f    |                      dddgi          }|                     |d           d S r   r   r   s     r   test_single_type_list_failurez9TestValidationErrorMessages.test_single_type_list_failureD  s>    ""Avz6J"KK"=>>>>>r!   c                    d}|                      ddt          |          i          }|                     |d           d S )N)r   r   rE   r   r   z#1 is not of type 'string', 'object')r   r=   r)   )r0   typesr   s      r   test_multiple_type_failurez6TestValidationErrorMessages.test_multiple_type_failureH  sG    """AvtE{{6K"LL"GHHHHHr!   c                    ddddgi}|                      d|t          j                  }|                     |d           d S )Nr   FoorN   )nameminimumrE   r   r   r   z1 is not of type 'Foo'r   r   Draft3Validatorr)   r0   r   r   s      r   #test_object_with_named_type_failurez?TestValidationErrorMessages.test_object_with_named_type_failureM  s\    Ea889:""* # 
 

 	":;;;;;r!   c                d    |                      dddi          }|                     |d           d S )NrE   r      r   z1 is less than the minimum of 2r   r   s     r   test_minimumz(TestValidationErrorMessages.test_minimumV  s;    ""Ay!n"EE"CDDDDDr!   c                d    |                      dddi          }|                     |d           d S )NrE   r   r   r   z"1 is greater than the maximum of 0r   r   s     r   test_maximumz(TestValidationErrorMessages.test_maximumZ  s;    ""Ay!n"EE"FGGGGGr!   c                    d\  }}d||ii}|                      ddi|t          j                  }|                     |d           d S Nr   r   dependenciesr   r   r   z'foo' is a dependency of 'bar'r   r0   dependonr   r   s        r    test_dependencies_single_elementz<TestValidationErrorMessages.test_dependencies_single_element^  sb    !
 62,/""QZ* # 
 

 	"BCCCCCr!   c                    dddigi}|                      dd|git          j                  }|                     |d           d S )Nr   r   rN   rE   r   z+1 is not of type {'type': [{'minimum': 3}]}r   )r0   r   r   s      r   -test_object_without_title_type_failure_draft3zITestValidationErrorMessages.test_object_without_title_type_failure_draft3h  sj    )Q()""TF#* # 
 

 	9	
 	
 	
 	
 	
r!   c                    d\  }}d||gii}|                      ddi|t          j                  }|                     |d           d S r   r   r   s        r   test_dependencies_list_draft3z9TestValidationErrorMessages.test_dependencies_list_draft3t  d    !
 6B4.1""QZ* # 
 

 	"BCCCCCr!   c                    d\  }}d||gii}|                      ddi|t          j                  }|                     |d           d S r   r   r   Draft7Validatorr)   r   s        r   test_dependencies_list_draft7z9TestValidationErrorMessages.test_dependencies_list_draft7~  r   r!   c                ~    |                      dgg ddt          j                  }|                     d|           d S )Nr   FitemsadditionalItemsr   z(2 was unexpected)r   r   r   rz   r   s     r   #test_additionalItems_single_failurez?TestValidationErrorMessages.test_additionalItems_single_failure  sO    ""SE::* # 
 

 	*G44444r!   c                    |                      g dg ddt          j                  }|                     d|           d S )NrE   r   rN   Fr   r   z(1, 2, 3 were unexpected)r   r   s     r   &test_additionalItems_multiple_failureszBTestValidationErrorMessages.test_additionalItems_multiple_failures  sQ    ""YYE::* # 
 

 	17;;;;;r!   c                p    d}ddi}|                      |di|          }|                     d|           d S )Nr   additionalPropertiesFr   r   z('foo' was unexpected)r   rz   )r0   
additionalr   r   s       r   (test_additionalProperties_single_failurezDTestValidationErrorMessages.test_additionalProperties_single_failure  sH    
(%0""ZOF"KK.88888r!   c                (   ddi}|                      t                              ddg          |          }|                     t	          d          |           |                     t	          d          |           |                     d|           d S )Nr   Fr   r   r   zwere unexpected))r   r+   fromkeysrz   r\   r   s      r   +test_additionalProperties_multiple_failureszGTestValidationErrorMessages.test_additionalProperties_multiple_failures  s    (%0""]]E5>22 # 
 

 	d5kk7+++d5kk7+++('22222r!   c                l    ddi}|                      ddi|          }|                     d|           d S )Nr   r   r   r   r   z12 was expectedr   r   s      r   
test_constz&TestValidationErrorMessages.test_const  sL    2""U^ # 
 
 	'11111r!   c                    dddii}|                      di g g|t          j                  }|                     |d           d S )Ncontainsr   r   r   r   z4None of [2, {}, []] are valid under the given schema)r   r   Draft6Validatorr)   r   s      r   test_contains_draft_6z1TestValidationErrorMessages.test_contains_draft_6  sf    wm,""R[* # 
 

 	B	
 	
 	
 	
 	
r!   c                T   t          d          } |                    d          d            ddi}|                     d||          }|                     t	          d          |           |                     t	          d          |           |                     d|           d S )	Nr   )formatsthingc                    dS NFr   )values    r   ru   zQTestValidationErrorMessages.test_invalid_format_default_message.<locals>.<lambda>  s    e r!   formatbla)r   r   format_checkerzis not a)r   checksr   rz   r\   )r0   checkerr   r   s       r   #test_invalid_format_default_messagez?TestValidationErrorMessages.test_invalid_format_default_message  s    +++w 3 3444G$""" # 
 
 	d5kk7+++d7mmW---j'*****r!   c                   ddddiddidd}|                      ddi|t          j        	          }|                     |d
                    t          d          t          d          t          d                               |                      ddd|t          j        	          }|                     |d                    t          d          t          d          t          d          t          d                               d S )Nr   Fr   r   )^abc$^def$)r   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   r   r)   r  r\   r   s      r   1test_additionalProperties_false_patternPropertieszMTestValidationErrorMessages.test_additionalProperties_false_patternProperties  s.   "*/ &1 &1( (  ""s^* # 
 

 	:AAWtG}}d7mm 	
 	
 	
 """C00* # 
 

 	<CCVd7mmT']]DMM 	
 	
 	
 	
 	
r!   c                `    |                      dd          }|                     |d           d S )NrQ   Fr   z'False schema does not allow 'something'r   r   s     r   test_False_schemaz-TestValidationErrorMessages.test_False_schema  sA    ""  # 
 
 	"KLLLLLr!   c                d    |                      dddi          }|                     |d           d S )NrN   
multipleOfr   r   z3 is not a multiple of 2r   r   s     r   test_multipleOfz+TestValidationErrorMessages.test_multipleOf  sF    "" !$ # 
 
 	"<=====r!   c                d    |                      g ddi          }|                     |d           d S )NminItemsr   r   z[] is too shortr   r   s     r   test_minItemsz)TestValidationErrorMessages.test_minItems  s;    ""B
A"GG"344444r!   c                h    |                      g dddi          }|                     |d           d S )Nr   maxItemsr   r   z[1, 2, 3] is too longr   r   s     r   test_maxItemsz)TestValidationErrorMessages.test_maxItems  s?    ""IIIz1o"NN"9:::::r!   c                d    |                      g ddi          }|                     |d           d S )Nr!  rE   r   z[] should be non-emptyr   r   s     r   test_minItems_1z+TestValidationErrorMessages.test_minItems_1   s;    ""B
A"GG":;;;;;r!   c                h    |                      g dddi          }|                     |d           d S )Nr   r$  r   r   z![1, 2, 3] is expected to be emptyr   r   s     r   test_maxItems_0z+TestValidationErrorMessages.test_maxItems_0  s?    ""IIIz1o"NN"EFFFFFr!   c                d    |                      dddi          }|                     |d           d S )Nrp   	minLengthr   r   z'' is too shortr   r   s     r   test_minLengthz*TestValidationErrorMessages.test_minLength  sF    ""# # 
 
 	"344444r!   c                d    |                      dddi          }|                     |d           d S )Nabc	maxLengthr   r   z'abc' is too longr   r   s     r   test_maxLengthz*TestValidationErrorMessages.test_maxLength  sF    ""# # 
 
 	"566666r!   c                d    |                      dddi          }|                     |d           d S )Nrp   r+  rE   r   z'' should be non-emptyr   r   s     r   test_minLength_1z,TestValidationErrorMessages.test_minLength_1  s<    ""BQ7G"HH":;;;;;r!   c                d    |                      dddi          }|                     |d           d S )Nr.  r/  r   r   z'abc' is expected to be emptyr   r   s     r   test_maxLength_0z,TestValidationErrorMessages.test_maxLength_0  s<    ""E;:J"KK"ABBBBBr!   c                d    |                      i ddi          }|                     |d           d S )NminPropertiesr   r   z"{} does not have enough propertiesr   r   s     r   test_minPropertiesz.TestValidationErrorMessages.test_minProperties  s<    ""B7K"LL"FGGGGGr!   c                l    |                      i i i dddi          }|                     |d           d S )N)r_   bcmaxPropertiesr   r   z3{'a': {}, 'b': {}, 'c': {}} has too many propertiesr   r   s     r   test_maxPropertiesz.TestValidationErrorMessages.test_maxProperties"  s[    ""BR00#Q' # 
 
 	A	
 	
 	
 	
 	
r!   c                d    |                      i ddi          }|                     |d           d S )Nr6  rE   r   z{} should be non-emptyr   r   s     r   test_minProperties_1z0TestValidationErrorMessages.test_minProperties_1,  s<    ""B7K"LL":;;;;;r!   c                h    |                      ddiddi          }|                     |d           d S )NrE   r   r;  r   r   z{1: 2} is expected to be emptyr   r   s     r   test_maxProperties_0z0TestValidationErrorMessages.test_maxProperties_00  sJ    ""V#Q' # 
 
 	"BCCCCCr!   c                n    |                      g ddi i gd          }|                     |d           d S )N)rE   r   r   Fr   prefixItemsr   z1Expected at most 2 items but found 1 extra: 'foo'r   r   s     r   test_prefixItems_with_itemsz7TestValidationErrorMessages.test_prefixItems_with_items7  s\    """]]"B8<< # 
 
 	?	
 	
 	
 	
 	
r!   c                n    |                      g ddi i gd          }|                     |d           d S )NrE   r   r      FrB  r   z6Expected at most 2 items but found 2 extra: ['foo', 5]r   r   s     r   *test_prefixItems_with_multiple_extra_itemszFTestValidationErrorMessages.test_prefixItems_with_multiple_extra_itemsA  s^    ""%%%"B8<< # 
 
 	D	
 	
 	
 	
 	
r!   c                d    |                      dddi          }|                     |d           d S )Nbbbpatternz^a*$r   z'bbb' does not match '^a*$'r   r   s     r   test_patternz(TestValidationErrorMessages.test_patternK  sF    ""v& # 
 
 	"?@@@@@r!   c                h    |                      g dddii          }|                     |d           d S )Nr  r   r   r   z3[] does not contain items matching the given schemar   r   s     r   test_does_not_containz1TestValidationErrorMessages.test_does_not_containR  sV    "" 23 # 
 
 	A	
 	
 	
 	
 	
r!   c                n    |                      ddgddidd          }|                     |d           d S )	Nr   rE   r   r   r   r  minContainsr   MToo few items match the given schema (expected at least 2 but only 1 matched)r   r   s     r   test_contains_too_fewz1TestValidationErrorMessages.test_contains_too_few\  s_    ""QZ!' 21EE # 
 
 	7	
 	
 	
 	
 	
r!   c                p    |                      ddgddiddd          }|                     |d	           d S )
Nr   rE   r   r   r      r  rQ  maxContainsr   rR  r   r   s     r   &test_contains_too_few_both_constrainedzBTestValidationErrorMessages.test_contains_too_few_both_constrainedg  sg    ""QZ#X.    # 
 
 		
 	
 	
 	
 	
r!   c                n    |                      g dddidd          }|                     |d           d S )Nr   r   bazr   r   r   r  rW  r   :Too many items match the given schema (expected at most 2)r   r   s     r   test_contains_too_manyz2TestValidationErrorMessages.test_contains_too_manyv  s_    ""***!' 21EE # 
 
 	H	
 	
 	
 	
 	
r!   c                t    |                      dgdz  ddiddd          }|                     |d	           d S )
Nr   rG  r   r   r   rU  rV  r   z:Too many items match the given schema (expected at most 4)r   r   s     r   'test_contains_too_many_both_constrainedzCTestValidationErrorMessages.test_contains_too_many_both_constrained  sg    ""Wq[#X.    # 
 
 	H	
 	
 	
 	
 	
r!   c                d    |                      dddi          }|                     |d           d S )NrN   exclusiveMinimumrG  r   z+3 is less than or equal to the minimum of 5r   r   s     r   test_exclusiveMinimumz1TestValidationErrorMessages.test_exclusiveMinimum  sQ    ""&* # 
 
 	9	
 	
 	
 	
 	
r!   c                d    |                      dddi          }|                     |d           d S )NrN   exclusiveMaximumr   r   z.3 is greater than or equal to the maximum of 2r   r   s     r   test_exclusiveMaximumz1TestValidationErrorMessages.test_exclusiveMaximum  sH    ""A7I16M"NN<	
 	
 	
 	
 	
r!   c                f    |                      i ddgi          }|                     |d           d S )Nrequiredr   r   z'foo' is a required propertyr   r   s     r   test_requiredz)TestValidationErrorMessages.test_required  s>    ""B
UG7L"MM"@AAAAAr!   c                n    |                      di idddgii          }|                     |d           d S )Nr   dependentRequiredr   r   z'bar' is a dependency of 'foo'r   r   s     r   test_dependentRequiredz2TestValidationErrorMessages.test_dependentRequired  sQ    ""R['%%)9: # 
 
 	"BCCCCCr!   c                f    |                      i ddgi          }|                     |d           d S )NoneOfFr   z.{} is not valid under any of the given schemasr   r   s     r   test_oneOf_matches_nonez3TestValidationErrorMessages.test_oneOf_matches_none  sI    ""B%7I"JJ<	
 	
 	
 	
 	
r!   c                h    |                      i dddgi          }|                     |d           d S )Nrn  Tr   z${} is valid under each of True, Truer   r   s     r   test_oneOf_matches_too_manyz7TestValidationErrorMessages.test_oneOf_matches_too_many  s@    ""B$7N"OO"HIIIIIr!   c                n    ddd}|                      ddg|          }|                     |d           d S )Nr   Fr   unevaluatedItemsr   r   r   z@Unevaluated items are not allowed ('foo', 'bar' were unexpected)r   r   s      r   test_unevaluated_itemsz2TestValidationErrorMessages.test_unevaluated_items  sQ    !u==""UEN6"JJN	
 	
 	
 	
 	
r!   c                j    ddd}|                      d|          }|                     |d           d S )Nr   Frs  r   r   z'foo' is not of type 'array'r   r   s      r   &test_unevaluated_items_on_invalid_typezBTestValidationErrorMessages.test_unevaluated_items_on_invalid_type  sD    !u==""E&"AA"@AAAAAr!   c                ~    dddiiddid}|                      dddd|	          }|                     |d
           d S )Nr   r   r   r   r   
propertiesunevaluatedPropertiesr   rZ  r   z_Unevaluated properties are not valid under the given schema ('bar' was unevaluated and invalid)r   r   s      r   5test_unevaluated_properties_invalid_against_subschemazQTestValidationErrorMessages.test_unevaluated_properties_invalid_against_subschema  s     68"45&-r]
 
 "" 
  # 
 
 	2	
 	
 	
 	
 	
r!   c                p    ddd}|                      ddd|          }|                     |d           d S )	Nr   Fr   r{  r   r   r   r   r   zEUnevaluated properties are not allowed ('bar', 'foo' were unexpected)r   r   s      r   &test_unevaluated_properties_disallowedzBTestValidationErrorMessages.test_unevaluated_properties_disallowed  sj    "UCC""   # 
 
 	-	
 	
 	
 	
 	
r!   c                j    ddd}|                      d|          }|                     |d           d S )Nr   Fr~  r   r   z'foo' is not of type 'object'r   r   s      r   +test_unevaluated_properties_on_invalid_typezGTestValidationErrorMessages.test_unevaluated_properties_on_invalid_type  sD    "UCC""E&"AA"ABBBBBr!   c                p    i gdd}|                      g d|          }|                     |d           d S )NFrC  r   rZ  r   z9Expected at most 1 item but found 2 extra: ['bar', 'baz']r   r   s      r   test_single_itemz,TestValidationErrorMessages.test_single_item  sa    "$66""*** # 
 
 	G	
 	
 	
 	
 	
r!   c                    i gdd}|                      g d|t          j                  }|                     |d           d S )NFr   r   r   r   r   z<Additional items are not allowed ('bar', 37 were unexpected)r   r   s      r   -test_heterogeneous_additionalItems_with_ItemszITestValidationErrorMessages.test_heterogeneous_additionalItems_with_Items  sg    4E::""'''* # 
 

 	J	
 	
 	
 	
 	
r!   c                p    i gdd}|                      g d|          }|                     |d           d S )NFr  r  r   z6Expected at most 1 item but found 2 extra: ['bar', 37]r   r   s      r   $test_heterogeneous_items_prefixItemsz@TestValidationErrorMessages.test_heterogeneous_items_prefixItems   sa    "$66""''' # 
 
 	D	
 	
 	
 	
 	
r!   c                p    i gdd}|                      g d|          }|                     |d           d S )NF)rC  rt  r  r   z=Unevaluated items are not allowed ('bar', 37 were unexpected)r   r   s      r   /test_heterogeneous_unevaluatedItems_prefixItemszKTestValidationErrorMessages.test_heterogeneous_unevaluatedItems_prefixItems  sa    "$5AA""''' # 
 
 	K	
 	
 	
 	
 	
r!   c                v    di idd}|                      i ddd|          }|                     |d           d	S )
K
        Not valid deserialized JSON, but this should not blow up.
        r   F)rz  r   r[  r   r   r_   r   r   z?Additional properties are not allowed (37, 'a' were unexpected)Nr   r   s      r   2test_heterogeneous_properties_additionalPropertieszNTestValidationErrorMessages.test_heterogeneous_properties_additionalProperties  si     "'UKK""e44 # 
 
 	M	
 	
 	
 	
 	
r!   c                v    di idd}|                      i ddd|          }|                     |d           d	S )
r  r   Fry  r[  r   r  r   z@Unevaluated properties are not allowed (37, 'a' were unexpected)Nr   r   s      r   3test_heterogeneous_properties_unevaluatedPropertieszOTestValidationErrorMessages.test_heterogeneous_properties_unevaluatedProperties$  si     "'eLL""e44 # 
 
 	N	
 	
 	
 	
 	
r!   N)=rW   r   rX   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,  r0  r2  r4  r7  r<  r>  r@  rD  rH  rL  rN  rS  rX  r^  r`  rc  rf  ri  rl  ro  rq  ru  rw  r|  r  r  r  r  r  r  r  r  r   r!   r   r   r   2  s       ! ! !? ? ?? ? ?I I I
< < <E E EH H HD D D

 

 

D D DD D D5 5 5< < <9 9 9	3 	3 	32 2 2

 

 

+ + +
 
 
<M M M> > >5 5 5; ; ;< < <G G G5 5 57 7 7< < <C C CH H H
 
 
< < <D D D
 
 

 
 
A A A
 
 
	
 	
 	

 
 

 
 

 
 

 
 

 
 
B B BD D D
 
 
J J J
 
 
B B B

 
 
&
 
 
C C C
	
 	
 	


 

 

	
 	
 	
	
 	
 	

 
 

 
 
 
 
r!   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestValidationErrorDetailsc                   d}dddiddigi}t          j        |          }t          |                    |                    }|                     t          |          d           |d         }|                     |j        d           |                     |j        |d                    |                     |j        |           |                     |j	        |           | 
                    |j                   |                     |j        t          g                      |                     |j        t          g                      |                     |j        t          g                      |                     |j        d	           |                     |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        d	           |                     |j        t          ddg                     |                     |j        t          ddg                     |                     |j        t          g d                     |                     |j                   |                     |j        d           |                     |j        |d         d         d                    |                     |j        |           |                     |j	        |d         d                    |                     |j        |           |                     |j        t          g                      |                     |j        t          g                      |                     |j        t          g                      |                     |j        d	           |                     |j        t          ddg                     |                     |j        t          ddg                     |                     |j        t          g d                     |                     t          |j                  d           d S )NrG  anyOfr      r   r   rE   r   $r   )r  r   r   )r  rE   r   )r   r   r=   r>   r)   rF   r   rC   r   r   assertIsNoneparentpathr   relative_pathabsolute_path	json_pathrD   relative_schema_pathabsolute_schema_pathcontextsorted_errorsassertIsassertFalser0   r   r   r   r   ee1e2s           r   
test_anyOfz%TestValidationErrorDetails.test_anyOf6  s&   B"
 .v66	i++H5566Va(((1Ig...*F7O<<<X...6***!(###r+++%))444%))444c***wi(8(8999/y1A1ABBB/y1A1ABBBQY+++qy))By111+VG_Q-?	-JKKKh///F7OA$6777bi###%)),,,)599555)599555s+++9~)>)>???0%I2G2GHHH#U+B+B+B%C%C	
 	
 	
 	$$$v...+VG_Q-?-GHHHh///F7OA$6777bi###%)),,,)599555)599555s+++6{););<<<0%F2D2DEEE0%8L8L8L2M2MNNNRZ!,,,,,r!   c                   ddi}dddiddddgiidgi}t          j        |          }t          |                    |                    }|                     t          |          d           |d	         }|                     |j        d           |                     |j        |d                    |                     |j        |           |                     |j	        |           | 
                    |j                   |                     |j        t          g                      |                     |j        t          g                      |                     |j        t          g                      |                     |j        d
           |                     |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        d
           |                     |j        t          d	dg                     |                     |j        t          d	dg                     |                     |j        t          g d                     |                     |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        d           |                     |j        t          g d                     |                     |j        t          g d                     |                     |j        t          g d                     |                     |j                   d S )Nr   rE   r   r   r   enumr   r   rz  r   r  )r   r   r   $.foo)rE   rz  r   r  )r   rE   rz  r   r  )r   r   r=   r>   r)   rF   r   rC   r   r   r  r  r  r   r  r  r  rD   r  r  r  r  r  r  r  s           r   	test_typez$TestValidationErrorDetails.test_type{  s@   1:#$#(6A3-"8 
 .v66	i++H5566Va(((1If---*F6N;;;X...6***!(###r+++%))444%))444c***vh888/xAAA/xAAAQY+++qy))Bv...+VF^A->v-FGGGh///F6N1$5666bi###%)),,,)599555)599555s+++6{););<<<0%F2D2DEEE0%8K8K8K2L2LMMM$$$v...+aS111a(((VaSM222bi###%..111)5%>>:::)5%>>:::w///NE"B"B"BCC	
 	
 	
 	#U+K+K+K%L%L	
 	
 	
 	#:::;;	
 	
 	

 	$$$$$r!   c                :   ddgddd}dddid	did
g dddi}t          j        |          }|                    |          }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           |                     |j
        d	           |                     |j
        d           |                     |j
        d           |                     |j
        d           d S )Nr   rE      spam)r   r   r[  quuxrz  r   r   r!  
   )r   rU        )r   r  rZ  r   r[  r   $.barz$.bazr  r  r   )r   r   r>   r  r)   r  r   r  r  r  r   )	r0   r   r   r   r   r  r  e3e4s	            r   test_single_nestingz.TestValidationErrorDetails.test_single_nesting  s   aSVDD)"A#%|||<< 
 .v66	&&x00&v..BB%..111%..111%..111%..111)5%>>:::)5%>>:::)5%>>:::)5%>>:::)5%>>:::)5%>>:::)5%>>:::)5%>>:::w///w///w///w///z222v...y111v.....r!   c                @   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          j        |          }|                    |          }t          |          \  }}}}}	}
|                     |j        t          g                      |                     |j        t          dg                     |                     |j        t          ddg                     |                     |j        t          g d                     |                     |	j        t          g d                     |                     |
j        t          ddg                     |                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           |                     |	j        d           |                     |
j        d           |                     |j        t          dg                     |                     |j        t          ddg                     |                     t          |j                  g d           |                     t          |j                  g d           |                     t          |	j                  g d            |                     t          |
j                  g d!           |                     |j
        d           |                     |j
        d           |                     |j
        d           |                     |j
        d           |                     |	j
        d           |                     |
j
        d           d S )"NrE   r   r[  r  r  r   r   r  rN   r   rh  Tr!  )r   r[  r  )r   r   r   r   )rE   r   r   )rE   r   r[  r   r  $[0]z$[1].barz$[1].bar.barz$[1].bar.bazz$[1].foor   r   )r   rz  r   r   )r   rz  r   rz  r   rh  )r   rz  r   rz  r[  r!  )r   rz  r   r  )r   r   r>   r  r)   r  r   r  rD   r=   r   )r0   r   r   r   r   r  r  r  r  e5e6s              r   test_multiple_nestingz0TestValidationErrorDetails.test_multiple_nesting  s   q%!66?!8,"QF+ '$.#5$.?' ' 	 	 
 
" .v66	&&x00!.v!6!6BBB%)),,,%**---%E
"3"3444%(9(9(9":":;;;%(9(9(9":":;;;%E
"3"3444s+++v...z222~666~666z222x999/@)A)ABBB  "H"H"H	
 	
 	
 	  KKK	
 	
 	
 	  KKK	
 	
 	
 	  "H"H"H	
 	
 	
 	v...v...v...z222z222v.....r!   c           	     ~   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        |          }|                    |          \  }|                     |j        t          dg                     |                     |j        t          g d                     |                     |j        d           |j        \  }|                     |j        t          g d                     |                     |j        t          g d                     |                     |j        d           |j        \  }|                     |j        t          g d                     |                     |j        t          g d                     |                     |j        d           d S )Nnoder  r   r   childrenr   r   ^.*$r   z#/definitions/node)r   r  )r   r  )r   rh  rz  root)definitionsr   rh  rz  r_   ab)rz  r  r  z$.root)r  r  r_   )	rz  r  r  r   rz  r  r  r  r  z$.root.children.a)r  r  r_   r  r  )rz  r  r  r   rz  r  r  r  r  r   rz  r  r  r  r  z$.root.children.a.children.ab)	r   r   r>   r)   r  r   r  r  r  )r0   r   r   r   r  r  r  s          r   test_recursivez)TestValidationErrorDetails.test_recursive,  sw     (%+Z$8 !'% )1$*(.0D-&6") )	' '  * !F,@#AB1
 
8  #  &#% 
 
  .v66	""8,,%//:::"E*I*I*I$J$J	
 	
 	
 	h///i)51J1J1J+K+KLLL#U
 
 
& &	
 	
 	
 	':;;;je;;; 	
 	
 	

 	#U  & &	
 	
 	
* 	'FGGGGGr!   c                   ddd}ddddi}t          j        |          }|                    |          }t          |          \  }}|                     |j        t          dg                     |                     |j        t          dg                     |                     |j        d	           |                     |j        d
           |                     |j        d           |                     |j        d           d S )Nr   r   r   r   r   rG  r   r   r   r  r  r   r   	r   r   r>   r  r)   r  r   r  r   r0   r   r   r   r   r  r  s          r   test_additionalPropertiesz4TestValidationErrorDetails.test_additionalProperties  s     ++(9*K*KL.v66	&&x00v&&B%..111%..111w///w///v...y11111r!   c                   ddd}dddiddidi}t          j        |          }|                    |          }t          |          \  }}|                     |j        t          d	g                     |                     |j        t          d
g                     |                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           d S )NrE   r   r   r  r   r   r   rG  r   r   r  r  r  r  s          r   test_patternPropertiesz1TestValidationErrorDetails.test_patternProperties  s   Q'')!1~" "
 .v66	&&x00v&&B%..111%..111w///w///v...y11111r!   c                   ddg}g dddd}t          j        |          }|                    |          }t          |          \  }}|                     |j        t          dg                     |                     |j        t          dg                     |                     |j        d           |                     |j        d	           |                     |j        d
           |                     |j        d           d S )Nr   rE   r   rG  r  r   r   r  $[1]r   r   r  r  s          r   test_additionalItemsz/TestValidationErrorDetails.test_additionalItems  s   1:(1a@@
 

 .v66	&&x00v&&B%**---%**---v...v...v...y11111r!   c                   g d}i gdddd}t          j        |          }|                    |          }t          |          \  }}|                     |j        t          dg                     |                     |j        t          dg                     |                     |j        d           |                     |j        d	           |                     |j        d
           |                     |j        d           d S )N)r   r   rE   r   rG  r  r   rE   r   r  z$[2]r   r   r  r  s          r   test_additionalItems_with_itemsz:TestValidationErrorDetails.test_additionalItems_with_items  s   $$$T(1a@@
 

 .v66	&&x00v&&B%**---%**---v...v...v...y11111r!   c                   ddi}ddddiii}t          j        |          }|                    |          \  }|                     |j        d           |                     |j        d           |                     |j        t          g                      |                     |j        d           |                     |j	        t          ddg                     d S )Nr   r   propertyNamesr   r   z0'foo' should not be valid under {'const': 'foo'}r  
r   r   r>   r)   r   r   r  r   r  rD   )r0   r   r   r   errors        r   test_propertyNamesz-TestValidationErrorDetails.test_propertyNames  s    2;!EGU+;#<=.v66	&&x00%000M>	
 	
 	
 	U2YY///#...*E?E2J,K,KLLLLLr!   c                   ddiddid}t          j        |          }|                    d          \  }|                     |j        d           |                     |j        d           |                     |j        t          g                      |                     |j        d           |                     |j	        t          ddg                     d S )Nr   r      )ifthen13 was expectedr  r  r  r0   r   r   r  s       r   test_if_thenz'TestValidationErrorDetails.test_if_then      B-bM
 

 .v66	&&r**'222(9:::U2YY///#...*E672C,D,DEEEEEr!   c                   ddiddid}t          j        |          }|                    d          \  }|                     |j        d           |                     |j        d           |                     |j        t          g                      |                     |j        d           |                     |j	        t          ddg                     d S )	Nr   r   r  )r  elser  r  r  r  r  r  s       r   test_if_elsez'TestValidationErrorDetails.test_if_else  r  r!   c                   t          j        d          }|                    d          \  }|                     |j        |j        |j        |j        |j        |j	        |j
        fdd d ddt          g           df           d S )NFr   zFalse schema does not allow 12r  )r   r   r>   r)   r   r   rC   r   r   rD   r  r   )r0   r   r  s      r   test_boolean_schema_Falsez4TestValidationErrorDetails.test_boolean_schema_False  s    .u55	&&r**%! 1b			
 	
 	
 	
 	
r!   c                   ddddii}}t          j        d|it          j        di ||i                    }|                    d	d
i          \  }|                     |j        |j        |j        |j        |j	        |j
        |j        |j        fdddd
t          d	g          ddit          ddg          df           d S )NsomeRefr   r   r   r   rp   storeresolverr   notAnIntegerz''notAnInteger' is not of type 'integer'r  )r   r   _RefResolverr>   r)   r   r   rC   r   r  r   rD   r  r   )r0   refr   r   r  s        r   test_refz#TestValidationErrorDetails.test_ref'  s    "869:M!NV.SM,RC=III
 
 
	 &&~'>??%#!	 :ug#-v677		
 	
 	
 	
 	
r!   c                .   dddii i ddigi}t          j        |          }|                    g d          \  }}|                     |j        |j        |j        |j        |j        |j	        |j
        |j        fddddt          d	g          ddit          g d
          df           |                     |j        |j        |j        |j        |j        |j	        |j
        |j        fddddt          dg          ddit          g d          df           d S )NrC  r   r   r   rN   rF  r   rE   r   )rC  r   r   r  z"5 is greater than the maximum of 3rG  )rC  rN   r   $[3]r   r   r>   r)   r   r   rC   r   r  r   rD   r  r   )r0   r   r   
type_error	min_errors        r   test_prefixItemsz+TestValidationErrorDetails.test_prefixItemsF  sh   68"4b"y!n!MN3F;;	 ) 5 56F6F6F G G
I"$*#(!&$	 ,qc

"00011		
 	
 	
, 	!#)"' %#	 5qc

A33344		
 	
 	
 	
 	
r!   c                &   ddii gd}t          j        |          }|                    g d          \  }}|                     |j        |j        |j        |j        |j        |j	        |j
        |j        fddddt          dg          ddit          ddg          d	f           |                     |j        |j        |j        |j        |j        |j	        |j
        |j        fd
dddt          dg          ddit          ddg          df           d S )Nr   r   rB  )r   r   r   rU  r[  z2 is not of type 'string'r   rE   r   r  z4 is not of type 'string'rU  rN   r  r  r0   r   r   r  r  s        r   rD  z6TestValidationErrorDetails.test_prefixItems_with_itemsw  sW   h'4
 
 3F;;	&&'B'B'BCCB
" 		 ,qc

"w'((		
 	
 	
, 	
" 		 ,qc

"w'((		
 	
 	
 	
 	
r!   c                N   ddidd}t          j        |          }|                    g d          \  }|                     |j        |j        |j        |j        |j        |j	        |j
        |j        fdddg dt          g           ddiddt          dg          d	f           d
S )z
        `contains` + `maxContains` produces only one error, even if there are
        many more incorrectly matching elements.
        r   r   r   r\  )r   r   r   rU  r[  r  r]  rW  r  r  Nr  r  s       r   r^  z1TestValidationErrorDetails.test_contains_too_many  s    
  &x0CC3F;;	&&'J'J'JKK%#!	 M333b		$h/BBzl##		
 	
 	
 	
 	
r!   c                N   ddidd}t          j        |          }|                    g d          \  }|                     |j        |j        |j        |j        |j        |j	        |j
        |j        fdddg dt          g           ddiddt          dg          d	f           d S )
Nr   r   r   rP  )r   r   rU  rR  rQ  r  r  r  r  s       r   rS  z0TestValidationErrorDetails.test_contains_too_few  s    %x0CC3F;;	&&}}}55%#!	? b		$h/BBzl##	
 	
 	
 	
 	
r!   c                R   ddidd}t          j        |          }|                    ddg          \  }|                     |j        |j        |j        |j        |j        |j	        |j
        |j        fddddiddgt          g           ddiddt          dg          df           d S )	Nr   r   r   rP  rU  z7[2, 4] does not contain items matching the given schemar  r  r  r  s       r   test_contains_nonez-TestValidationErrorDetails.test_contains_none  s    %x0CC3F;;	&&1v..%#!	 J"Ab		$h/BBzl##		
 	
 	
 	
 	
r!   c                   dddgiidddgdid}t          j        |          }|                    di i          \  }}|                     |j        |j        |j        |j        |j        |j	        |j
        |j        |j        f	d	ddgi t          dg          ddgit          g d
          t          g d
          df	           |                     |j        |j        |j        |j        |j        |j	        |j
        |j        |j        f	dddgi t          dg          ddgdt          g d
          t          g d
          df	           d S )Nr   rh  r   apropz#/$defs/foor[  )r   rh  )r   rz  z'bar' is a required property)rz  r  rh  z$.apropz'baz' is a required property)r   r   r>   r)   r   r   rC   r   r  r   rD   r  r  r   r  s        r   test_ref_siblingz+TestValidationErrorDetails.test_ref_sibling  s   j5'23)!& 
 
 3F;;	&&}55B
" 	'
 /wi  eW%999::999::
	
 	
 	
0 	
" 	'
 /wi  &UG<<999::999::
	
 	
 	
 	
 	
r!   N)rW   r   rX   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rD  r^  rS  r  r  r   r!   r   r  r  3  s\       C- C- C-JK% K% K%Z%/ %/ %/N;/ ;/ ;/zcH cH cHJ2 2 2"2 2 2,2 2 2(2 2 2(M M M F F FF F F
 
 
2
 
 
>/
 /
 /
b2
 2
 2
h
 
 
>
 
 
<
 
 
6<
 <
 <
 <
 <
r!   r  c                  2    e Zd Zd Zd Zd Zd Zd Zd ZdS )MetaSchemaTestsMixinc                    |                      t          j                  5  | j                            ddi           d d d            d S # 1 swxY w Y   d S )Nrz  r   r   r   r   r.   r   r/   s    r   test_invalid_propertiesz,MetaSchemaTestsMixin.test_invalid_propertiesD  s    z566 	< 	<N''r(:;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<   A

AAc                    |                      t          j                  5  | j                            ddi           d d d            d S # 1 swxY w Y   d S )Nr!  1r  r/   s    r   test_minItems_invalid_stringz1MetaSchemaTestsMixin.test_minItems_invalid_stringH  s    z566 	; 	;N''S(9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;r  c                (   | j         t          j        t          j        hv rV|                     t
          j                  5  | j                             dg i           ddd           dS # 1 swxY w Y   dS | j                             dg i           dS )z
        Technically, all the spec says is they SHOULD have elements, not MUST.

        (As of Draft 6. Previous drafts do say MUST).

        See #529.
        r  Nr.   r   r   r   r   r   r   r   r/   s    r   test_enum_allows_empty_arraysz2MetaSchemaTestsMixin.test_enum_allows_empty_arraysM  s     >&&
 
 
 "":#9:: : :++VRL999: : : : : : : : : : : : : : : : : : N''55555s   A))A-0A-c                0   | j         t          j        t          j        hv rX|                     t
          j                  5  | j                             dddgi           ddd           dS # 1 swxY w Y   dS | j                             dddgi           dS )z
        Technically, all the spec says is they SHOULD be unique, not MUST.

        (As of Draft 6. Previous drafts do say MUST).

        See #529.
        r  r   Nr  r/   s    r   !test_enum_allows_non_unique_itemsz6MetaSchemaTestsMixin.test_enum_allows_non_unique_items^  s     >&&
 
 
 "":#9:: @ @++Vb"X,>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ N''"b(:;;;;;s   A++A/2A/c                    |                      t          j                  5  | j                            ddi           d d d            d S # 1 swxY w Y   d S )NrK  
*notaregexr  r/   s    r   test_schema_with_invalid_regexz3MetaSchemaTestsMixin.test_schema_with_invalid_regexo  s    z566 	C 	CN''L(ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cr  c                B    | j                             ddid            d S )NrK  r  r  )r.   r   r/   s    r   >test_schema_with_invalid_regex_with_disabled_format_validationzSMetaSchemaTestsMixin.test_schema_with_invalid_regex_with_disabled_format_validations  s6    ##% 	$ 	
 	
 	
 	
 	
r!   N)	rW   r   rX   r  r  r	  r  r  r  r   r!   r   r  r  B  sq        < < <; ; ;
6 6 6"< < <"C C C
 
 
 
 
r!   r  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )ValidatorTestMixinc                l    |                      |                     i           t          j                   d S r3   )assertIsInstancer.   r   r/   s    r   )test_it_implements_the_validator_protocolz<ValidatorTestMixin.test_it_implements_the_validator_protocol{  s-    dnnR00)2EFFFFFr!   c                    | j         \  }}|                     |                     |                              |                     d S r3   )validr   r.   r   r0   r   r   s      r   test_valid_instances_are_validz1ValidatorTestMixin.test_valid_instances_are_valid~  s@    :v..77AABBBBBr!   c                    | j         \  }}|                     |                     |                              |                     d S r3   )invalidr  r.   r   r  s      r   $test_invalid_instances_are_not_validz7ValidatorTestMixin.test_invalid_instances_are_not_valid  sB    <//88BBCCCCCr!   c                    |                      t                      t                      i                              t                                 d S )Nr   )r.   r   r   r/   s    r   (test_non_existent_properties_are_ignoredz;ValidatorTestMixin.test_non_existent_properties_are_ignored  s<    &((+,,55vxx5HHHHHr!   c                H   ddit                      }}|                     ||          }|                    ddi| j        j                  }|                     ddi| j        j        |j                  }|                     ||           |                     ||           d S )Nr   r   r  r   )r   r  )r  	_resolver)r   r.   evolveFORMAT_CHECKERr"  r)   assertNotEqual)r0   r   r  rj   r   expecteds         r   test_evolvezValidatorTestMixin.test_evolve  s    "()!4moo>>) " 
 
 ooH%>8  
 

 >>X>8m " 
 
 	h'''C*****r!   c                   |                      t                    5  t           G d d| j                              }ddd           n# 1 swxY w Y    |i d          }|                     |j        g d           |                    ddi	          }|                     |j        g d           |                     |j        d           dS )
ar  
        Subclassing validators isn't supported public API, but some users have
        done it, because we don't actually error entirely when it's done :/

        We need to deprecate doing so first to help as many of these users
        ensure they can move to supported APIs, but this test ensures that in
        the interim, we haven't broken those users.
        c                  @    e Zd Z ed           Z ed          ZdS ):ValidatorTestMixin.test_evolve_with_subclass.<locals>.OhNoc                 
    g dS )Nr   r   r   r!   r   ru   zCValidatorTestMixin.test_evolve_with_subclass.<locals>.OhNo.<lambda>  s
    III r!   )factoryr   defaultN)rW   r   rX   r   r   _barr   r!   r   OhNor*    s6        e$5$5666uR(((r!   r0  Nr   )r   r   r   r   r   )assertWarnsDeprecationWarningr   r.   r)   r   r#  r/  )r0   r0  r   r   s       r   test_evolve_with_subclassz,ValidatorTestMixin.test_evolve_with_subclass  s+    011 	) 	)) ) ) ) )t~ ) ) V)	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) D$$$				222vy&9::))),,,2&&&&&s   !AAAc                ~    |                      |                     i                               dd                     d S )Nr   r   )r   r.   r   r/   s    r   #test_is_type_is_true_for_valid_typez6ValidatorTestMixin.test_is_type_is_true_for_valid_type  s6    r**225(CCDDDDDr!   c                ~    |                      |                     i                               dd                     d S )Nr   r   r  r.   r   r/   s    r   &test_is_type_is_false_for_invalid_typez9ValidatorTestMixin.test_is_type_is_false_for_invalid_type  s8    ++33E7CCDDDDDr!   c                    |                      |                     i                               dd                     |                      |                     i                               dd                     d S )NTr   r   r8  r/   s    r   ,test_is_type_evades_bool_inheriting_from_intz?ValidatorTestMixin.test_is_type_evades_bool_inheriting_from_int  sh    ++33D)DDEEE++33D(CCDDDDDr!   c                z   dddii}t          j        | j        | j        j                            dd                     } ||          }|                    ddt          d          t          d          z  g           d	i g d
d g}|                     d |                    |          D             |           d S )Nr   r   r   c                r    t          |t          t          t          f          ot          |t                     S r3   )
isinstanceintfloatr   boolr  r	  s     r   ru   zGValidatorTestMixin.test_it_can_validate_with_decimals.<locals>.<lambda>  s4    zC0( ( (2$UD111 r!   r'   rE   g?r  r   Tc                    g | ]	}|j         
S r   r  )r   r  s     r   
<listcomp>zIValidatorTestMixin.test_it_can_validate_with_decimals.<locals>.<listcomp>  s    HHHU^HHHr!   )	r   r   r.   r6   redefiner   r   r)   r>   )r0   r   r.   r   r  s        r   "test_it_can_validate_with_decimalsz5ValidatorTestMixin.test_it_can_validate_with_decimals  s    FH-.%N4==2 2 
 
 
	 If%%	AsGAJJ$;<==="b$-HH)>)>w)G)GHHH	
 	
 	
 	
 	
r!   c                z    |                      ddit                                }|                    d           d S )Nr  carrotr  bugs)r.   r   r   r0   r   s     r   7test_it_returns_true_for_formats_it_does_not_know_aboutzJValidatorTestMixin.test_it_returns_true_for_formats_it_does_not_know_about  sD    NNx  # 
 
	 	6"""""r!   c                d    |                      i           }|                     |j                   d S r3   )r.   r  r  rK  s     r   ,test_it_does_not_validate_formats_by_defaultz?ValidatorTestMixin.test_it_does_not_validate_formats_by_default  s0    NN2&&	)233333r!   c                    t                      }t          d          |                    dt                     fd            }                     ddi|          }|                    d                                t          j                  5 }|                    d           d d d            n# 1 swxY w Y                        |j	        j
                   d S )	NzBad!r   )raisesc                Z    | dk    rdS | dk    r                     d|  d           d S )NgoodTbadzWhat is z? [Baby Don't Hurt Me])r    )r  rS  r0   s    r   checkzTValidatorTestMixin.test_it_validates_formats_if_a_checker_is_provided.<locals>.check  sC    t%			BUBBBCCCCCr!   r  r  rR  rS  )r   
ValueErrorr  r.   r   r   r   r   r  	exceptioncause)r0   r  rT  r   cmrS  s   `    @r   2test_it_validates_formats_if_a_checker_is_providedzEValidatorTestMixin.test_it_validates_formats_if_a_checker_is_provided  s1   //  	j	1	1	D 	D 	D 	D 	D 
2	1	D NNug # 
 
	 	6"""z9:: 	&bu%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	bl(#.....s   B77B;>B;c                    t                      }d|gi}t          j        | j        | j        j                            |d                     } ||                              d           d S )Nr   c                ,    t          |t                    S r3   r>  r?  rB  s     r   ru   z@ValidatorTestMixin.test_non_string_custom_type.<locals>.<lambda>  s    z%'='= r!   rC  r  )r   r   r   r.   r6   rF  r   )r0   non_string_typer   Crazys       r   test_non_string_custom_typez.ValidatorTestMixin.test_non_string_custom_type  sy     ((?+,!N4==== 
 
 
 	fr"""""r!   c                x   t          j        | j        | j        j                            dd                     }|                     t          j                  5 } |ddi                              d           ddd           n# 1 swxY w Y   | 	                    dt          |j                             dS )	zh
        A tuple instance properly formats validation errors for uniqueItems.

        See #224
        r   c                ,    t          |t                    S r3   )r>  tuplerB  s     r   ru   zNValidatorTestMixin.test_it_properly_formats_tuples_in_errors.<locals>.<lambda>  s    z%'?'? r!   rC  uniqueItemsT)rE   rE   Nz(1, 1) has non-unique elements)r   r   r.   r6   rF  r   r   r   r   rz   strrV  )r0   TupleValidatorr  s      r   )test_it_properly_formats_tuples_in_errorsz<ValidatorTestMixin.test_it_properly_formats_tuples_in_errors  s    $*N4==?? 
 
 
 z9:: 	CaNM4011::6BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C6AK8H8HIIIIIs   !BBBc                T   ddd}t          dd          t          j        | j        | j        j                            d fdd          	          } ||          }t          g d
          t          dgdgg          t          dg          t          dg          gt          dg          gt          dg          ggt          dg          ggggt          dg          gggggt          t          dg          g          t          t          dg          g          g dd           dd          g dt          dg          g           dt          dg          g          g d dt          dg                    g           d dt          dg                    g          gt          t          t          dg                              t          t          t          dg                              gg
}|D ]}|                    |           t          g d          t          dgdgg          t          dg          t          dg          gt          dg          gt          dg          ggt          dg          ggggt          dg          gggggt          t          dg          g          t          t          dg          g          g dd           dd          g dt          dg          g           dt          dg          g          g d dt          dg                    g           d dt          dg                    g          gt          t          t          dg                              t          t          t          dg                              gg
}|D ]N}|                     t          j
                  5  |                    |           ddd           n# 1 swxY w Y   OdS )zO
        Allow array to validate against another defined sequence type
        r   T)r   rc  	MyMappingza, bc                :    t          |t          t          f          S r3   )r>  r=   r   rB  s     r   ru   zBValidatorTestMixin.test_check_redefined_sequence.<locals>.<lambda>  s    Je}5 5 r!   c                2    t          |t          f          S r3   )r>  r+   )r  r	  rh  s     r   ru   zBValidatorTestMixin.test_check_redefined_sequence.<locals>.<lambda>  s    Zi06 6 r!   )r   r   rC  )r_   Nr  rp   TFr   r_   )r_   r9  r_   N)r   r   r   r.   r6   redefine_manyr   r   r   r   r   )r0   r   r.   r   valid_instancesr   invalid_instancesrh  s          @r   test_check_redefined_sequencez0ValidatorTestMixin.test_check_redefined_sequence  s    "$77{F33	%N4BB    	 	 	
 
 
	 If%%	 ,,,--E7QC.!!E7^^UA3ZZ(UGnnqc

|,w !"#s~&6%78E5'NN#$$eUA3ZZL&9&9:YsA		#u 5 56	#qc

|,,	#ug/00
 	#		#uaSzz : :;<<	#		#ueW~~ > >?@@ 5w(())5uaSzz1B1B+C+CD!
& ( 	) 	)Hx(((( ///""E7UG$%%E7^^UE7^^,UGnnug/0w !"#w(8'9&:%;<E5'NN#$$eUE7^^,<&=&=>YsE""IIc5$9$9:	#ug/00	#ug/00
 	#		#ueW~~ > >?@@	#		#ueW~~ > >?@@ 5w(())5ueW~~1F1F+G+GH!
& * 	- 	-H"":#=>> - -""8,,,- - - - - - - - - - - - - - -	- 	-s   :PP 	#P 	c                    |                      t                    5  |                     i           j        }d d d            n# 1 swxY w Y   |                     |t
          j                   d S r3   )r2  r3  r.   r  r  r   r  )r0   r  s     r   .test_it_creates_a_ref_resolver_if_not_providedzAValidatorTestMixin.test_it_creates_a_ref_resolver_if_not_providedT  s    011 	3 	3~~b))2H	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3h
(?@@@@@s   AA	Ac                   dddi}}t          j        di ||i          }|                     d|i|          }|                     t          j                  5  |                    d            d d d            d S # 1 swxY w Y   d S )NsomeCoolRefr   r   rp   r  r   r  )r   r  r.   r   r   r   r   r0   r  r   r  r   s        r   /test_it_upconverts_from_deprecated_RefResolverszBValidatorTestMixin.test_it_upconverts_from_deprecated_RefResolversY  s    #fi%8V*2r#vGGGNNFC=8NDD	z9:: 	% 	%t$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   A;;A?A?c                     G  fdd          } |            }ddi}                      t          j                  5                       ||                              d           ddd           dS # 1 swxY w Y   dS )zb
        Legacy RefResolvers support only the context manager form of
        resolution.
        c                  *    e Zd Ze fd            ZdS )nValidatorTestMixin.test_it_upconverts_from_yet_older_deprecated_legacy_RefResolvers.<locals>.LegacyRefResolverc              3  D   K                        |d           ddiV  d S )Nthe refr   r   r)   )thisr  r0   s     r   	resolvingzxValidatorTestMixin.test_it_upconverts_from_yet_older_deprecated_legacy_RefResolvers.<locals>.LegacyRefResolver.resolvingh  s4        i000y))))))r!   N)rW   r   rX   r   r|  r/   s   r   LegacyRefResolverrw  g  s8        * * * * ^* * *r!   r}  r   ry  r  N)r   r   r   r.   r   )r0   r}  r  r   s   `   r   @test_it_upconverts_from_yet_older_deprecated_legacy_RefResolverszSValidatorTestMixin.test_it_upconverts_from_yet_older_deprecated_legacy_RefResolversa  s   	* 	* 	* 	* 	* 	* 	* 	* 	* 	* %$&&)$z9:: 	E 	ENN6HN55>>tDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   +A66A:=A:N)rW   r   rX   r  r  r  r   r'  r4  r6  r9  r;  rG  rL  rN  rY  r_  rf  rn  rp  rt  r~  r   r!   r   r  r  z  sU       G G GC C CD D DI I I+ + +(' ' '.E E EE E EE E E
 
 
*# # #4 4 4/ / /0
# 
# 
#J J J"@- @- @-DA A A
% % %E E E E Er!   r  c                  *    e Zd ZdZd Zd Zd Zd ZdS )AntiDraft6LeakMixinzN
    Make sure functionality from draft 6 doesn't leak backwards in time.
    c                    |                      t          j                  5 }| j                            d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )NTzTrue is not of typer   r   r   r.   r   rz   rd  rV  r0   r  s     r   test_True_is_not_a_schemaz-AntiDraft6LeakMixin.test_True_is_not_a_schemay  s    z566 	.!N''---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.+S-=-=>>>>>   AAAc                    |                      t          j                  5 }| j                            d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )NFzFalse is not of typer  r  s     r   test_False_is_not_a_schemaz.AntiDraft6LeakMixin.test_False_is_not_a_schema~  s    z566 	/!N''...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/,c!+.>.>?????r  c                   |                      t                    5 }|                     d                              d           d d d            n# 1 swxY w Y   |                     |j        t          j                   d S )NTr   r   	Exceptionr.   r   assertNotIsInstancerV  r   r   r  s     r   5test_True_is_not_a_schema_even_if_you_forget_to_checkzIAntiDraft6LeakMixin.test_True_is_not_a_schema_even_if_you_forget_to_check  s    y)) 	.QNN4  ))"---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.  j.HIIIII   )AAAc                   |                      t                    5 }|                     d                              d           d d d            n# 1 swxY w Y   |                     |j        t          j                   d S )NFr   r  r  s     r   6test_False_is_not_a_schema_even_if_you_forget_to_checkzJAntiDraft6LeakMixin.test_False_is_not_a_schema_even_if_you_forget_to_check  s    y)) 	/QNN5!!**2...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/  j.HIIIIIr  N)rW   r   rX   __doc__r  r  r  r  r   r!   r   r  r  t  se         ? ? ?
@ @ @
J J J
J J J J Jr!   r  c                  T    e Zd ZU ej        Zi i fZded<   ddidfZd Z	d Z
d Zd	 Zd
S )TestDraft3Validatortuple[dict, dict]r  r   r   r   c                v    |                      ddi          }|                    t                                 d S Nr   any)r.   r   r   rK  s     r   #test_any_type_is_valid_for_type_anyz7TestDraft3Validator.test_any_type_is_valid_for_type_any  s5    NNFE?33	688$$$$$r!   c                X   t          j        | j        | j        j                            dd                     } |ddi          }|                    d           |                     t          j                  5  |                    d           ddd           dS # 1 swxY w Y   dS )z(
        Sigh, because why not.
        r  c                ,    t          |t                    S r3   r\  rB  s     r   ru   zBTestDraft3Validator.test_any_type_is_redefinable.<locals>.<lambda>  s    j.D.D r!   rC  r   r   r   N)	r   r   r.   r6   rF  r   r   r   r   )r0   r^  r   s      r   test_any_type_is_redefinablez0TestDraft3Validator.test_any_type_is_redefinable  s     !N4==DD 
 
 
 E65/**	2z9:: 	& 	&u%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   <BB#&B#c                    |                      |                     ddi                              t                                           d S r  )r   r.   r   r   r/   s    r   !test_is_type_is_true_for_any_typez5TestDraft3Validator.test_is_type_is_true_for_any_type  s<    77@@JJKKKKKr!   c                    |                      |                     i                               dd                     |                      |                     ddi                              d                     d S )NTr   r   r  )r   r.   r   r   r/   s    r   6test_is_type_does_not_evade_bool_if_it_is_being_testedzJTestDraft3Validator.test_is_type_does_not_evade_bool_if_it_is_being_tested  sf    r**224CCDDD77@@FFGGGGGr!   N)rW   r   rX   r   r   r.   r  __annotations__r  r  r  r  r  r   r!   r   r  r    s         *I "BxE''''y!5(G% % %& & &L L LH H H H Hr!   r  c                  <    e Zd ZU ej        Zi i fZded<   ddidfZdS )TestDraft4Validatorr  r  r   r   r   N)	rW   r   rX   r   r   r.   r  r  r  r   r!   r   r  r    <         *I "BxE''''y!5(GGGr!   r  c                  <    e Zd ZU ej        Zi i fZded<   ddidfZdS )TestDraft6Validatorr  r  r   r   r   N)	rW   r   rX   r   r  r.   r  r  r  r   r!   r   r  r    r  r!   r  c                  <    e Zd ZU ej        Zi i fZded<   ddidfZdS )TestDraft7Validatorr  r  r   r   r   N)	rW   r   rX   r   r   r.   r  r  r  r   r!   r   r  r    r  r!   r  c                  <    e Zd ZU ej        Zi i fZded<   ddidfZdS )TestDraft201909Validatorr  r  r   r   r   N)	rW   r   rX   r   Draft201909Validatorr.   r  r  r  r   r!   r   r  r    <         /I "BxE''''y!5(GGGr!   r  c                  <    e Zd ZU ej        Zi i fZded<   ddidfZdS )TestDraft202012Validatorr  r  r   r   r   N)	rW   r   rX   r   r   r.   r  r  r  r   r!   r   r  r    r  r!   r  c                      e Zd ZdZd ZdS )TestLatestValidatorzQ
    These really apply to multiple versions but are easiest to test on one.
    c                
   d}d|i}t          j        di |di          }t          j        ||          }|                     t          j                  5  |                    d            d d d            d S # 1 swxY w Y   d S )Nrr  r   rp   Fr  r  )r   r  r   r   r   r   r   rs  s        r   2test_ref_resolvers_may_have_boolean_schemas_storedzFTestLatestValidator.test_ref_resolvers_may_have_boolean_schemas_stored  s    #*2r#uFFF.vIII	z9:: 	% 	%t$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   A88A<?A<N)rW   r   rX   r  r  r   r!   r   r  r    s-         % % % % %r!   r  c                  h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )TestValidatorForc                    ddi}|                      t          j        |          t          j                   ddi}|                      t          j        |          t          j                   d S )Nr   &http://json-schema.org/draft-03/schema'http://json-schema.org/draft-03/schema#)r  r   validator_forr   r9   s     r   test_draft_3zTestValidatorFor.test_draft_3  x    EF$V,,&	
 	
 	

 FG$V,,&	
 	
 	
 	
 	
r!   c                    ddi}|                      t          j        |          t          j                   ddi}|                      t          j        |          t          j                   d S )Nr   &http://json-schema.org/draft-04/schema'http://json-schema.org/draft-04/schema#)r  r   r  r   r9   s     r   test_draft_4zTestValidatorFor.test_draft_4  r  r!   c                    ddi}|                      t          j        |          t          j                   ddi}|                      t          j        |          t          j                   d S )Nr   &http://json-schema.org/draft-06/schema'http://json-schema.org/draft-06/schema#)r  r   r  r  r9   s     r   test_draft_6zTestValidatorFor.test_draft_6  r  r!   c                    ddi}|                      t          j        |          t          j                   ddi}|                      t          j        |          t          j                   d S )Nr   &http://json-schema.org/draft-07/schema'http://json-schema.org/draft-07/schema#)r  r   r  r   r9   s     r   test_draft_7zTestValidatorFor.test_draft_7  r  r!   c                    ddi}|                      t          j        |          t          j                   ddi}|                      t          j        |          t          j                   d S )Nr   z,https://json-schema.org/draft/2019-09/schemaz-https://json-schema.org/draft/2019-09/schema#)r  r   r  r  r9   s     r   test_draft_201909z"TestValidatorFor.test_draft_201909  x    KL$V,,+	
 	
 	

 LM$V,,+	
 	
 	
 	
 	
r!   c                    ddi}|                      t          j        |          t          j                   ddi}|                      t          j        |          t          j                   d S )Nr   ,https://json-schema.org/draft/2020-12/schema-https://json-schema.org/draft/2020-12/schema#)r  r   r  r   r9   s     r   test_draft_202012z"TestValidatorFor.test_draft_202012  r  r!   c                j    |                      t          j        d          t          j                   d S )NTr  r   r  r   r/   s    r   	test_TruezTestValidatorFor.test_True*  s6    $T**&	
 	
 	
 	
 	
r!   c                j    |                      t          j        d          t          j                   d S r  r  r/   s    r   
test_FalsezTestValidatorFor.test_False0  s6    $U++&	
 	
 	
 	
 	
r!   c                    t          j        ddidd           }ddi}|                     t          j        |          |           d S )Nri   rm   12c                .    |                      dd          S ro   rq   rs   s    r   ru   z8TestValidatorFor.test_custom_validator.<locals>.<lambda>:  rv   r!   rw   r   r   r-   r  r  r0   r.   r   s      r   test_custom_validatorz&TestValidatorFor.test_custom_validator6  si    %/0++
 
 
	
 -.$V,,	
 	
 	
 	
 	
r!   c                    t          j        ddid          }ddi}|                     t          j        |          |           d S )Nr%   r   13rS   r   r  r  s      r   test_custom_validator_draft6z-TestValidatorFor.test_custom_validator_draft6B  sc    % 12
 
 
	 ./$V,,	
 	
 	
 	
 	
r!   c                j    |                      t          j        i           t          j                   d S r3   r  r/   s    r   %test_validator_for_jsonschema_defaultz6TestValidatorFor.test_validator_for_jsonschema_defaultM  s*    j.r22J4NOOOOOr!   c                Z    |                      t          j        i d           d            d S )Nr-  )r  r   r  r/   s    r   !test_validator_for_custom_defaultz2TestValidatorFor.test_validator_for_custom_defaultP  s,    j.r4@@@$GGGGGr!   c                (   |                      t                    5 }t          j        ddi           d d d            n# 1 swxY w Y   |                     |j        t                     |                     t          |j                  d           d S )Nr   unknownSchemar1  zThe metaschema specified by $schema was not found. Using the latest draft to validate, but this will raise an error in the future.)	r2  r3  r   r  r)   filename__file__rd  warning)r0   rX  s     r   1test_warns_if_meta_schema_specified_was_not_foundzBTestValidatorFor.test_warns_if_meta_schema_specified_was_not_foundS  s    011 	JR$Y,HIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	h///
OO&	
 	
 	
 	
 	
s   ?AAc                    t          j        d          5 }t          j        d           t          j        i i            d d d            n# 1 swxY w Y   |                     |           d S )NTrecordalways)r   r.  )warningscatch_warningssimplefilterr   r  r  )r0   ws     r   0test_does_not_warn_if_meta_schema_is_unspecifiedzATestValidatorFor.test_does_not_warn_if_meta_schema_is_unspecified_  s    $D111 	<Q!(+++$B;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	s   +AAAc                |    ddit                      }}|                     t          j        ||          |           d S )Nr   zmailto:foo@example.com)r   r  r   r  )r0   r   r.  s      r   -test_validator_for_custom_default_with_schemaz>TestValidatorFor.test_validator_for_custom_default_with_schemae  s<    $&>?j.vw??IIIIIr!   N)rW   r   rX   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!   r   r  r    s        
 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 


 

 

	
 	
 	
P P PH H H

 

 

  J J J J Jr!   r  c                  J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestValidatec                    g }t           j                            |d|j                  5  t	          j        i |           d d d            n# 1 swxY w Y   |                     ||g           d S )Nr   )r   patchr   appendr   r   r)   )r0   r   r.   results       r   
assertUseszTestValidate.assertUsesk  s    Zy.&-HH 	, 	,F+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,&*****s   AAAc                    |                      ddit          j                   |                      ddit          j                   d S )Nr   r  r   r.   r  )r  r   r   r/   s    r   test_draft3_validator_is_chosenz,TestValidate.test_draft3_validator_is_chosenq  b    HI 0 	 	
 	
 	

 	GH 0 	 	
 	
 	
 	
 	
r!   c                    |                      ddit          j                   |                      ddit          j                   d S )Nr   r  r  r  )r  r   r   r/   s    r   test_draft4_validator_is_chosenz,TestValidate.test_draft4_validator_is_chosen|  r  r!   c                    |                      ddit          j                   |                      ddit          j                   d S )Nr   r  r  r  )r  r   r  r/   s    r   test_draft6_validator_is_chosenz,TestValidate.test_draft6_validator_is_chosen  r  r!   c                    |                      ddit          j                   |                      ddit          j                   d S )Nr   r  r  r  )r  r   r   r/   s    r   test_draft7_validator_is_chosenz,TestValidate.test_draft7_validator_is_chosen  r  r!   c                    |                      ddit          j                   |                      ddit          j                   d S )Nr   r  r  r  r  r   r   r/   s    r   $test_draft202012_validator_is_chosenz1TestValidate.test_draft202012_validator_is_chosen  sj    J !5	 	 	
 	
 	
 	I !5	 	 	
 	
 	
 	
 	
r!   c                H    |                      i t          j                   d S )Nr  r  r/   s    r   )test_draft202012_validator_is_the_defaultz6TestValidate.test_draft202012_validator_is_the_default  s!    rZ-LMMMMMr!   c                    |                      t          j                  5 }t          j        dddi           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nr   r   r   z1(?s)Failed validating '.*' in schema.*On instance)r   r   r   r   r   assertRegexrd  rV  r  s     r   test_validation_error_messagez*TestValidate.test_validation_error_message  s    z9:: 	8aVX$6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8?	
 	
 	
 	
 	
   AAAc                    |                      t          j                  5 }t          j        dddi           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nr   r   z3(?s)Failed validating '.*' in metaschema.*On schema)r   r   r   r   r   r  rd  rV  r  s     r   test_schema_error_messagez&TestValidate.test_schema_error_message  s    z566 	2!VRL111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2A	
 	
 	
 	
 	
r  c                   ddddddigi}|                      t          j                  5 }t          j        d|           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )	Nrn  r   r  r  r   r   r   z!12 is less than the minimum of 20)r   r   r   r   r   rz   rd  rV  )r0   r   r  s      r   test_it_uses_best_matchz$TestValidate.test_it_uses_best_match  s    !b11!
 z9:: 	,aF+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,93q{;K;KLLLLLs   AAAN)rW   r   rX   r  r  r  r  r  r  r  r  r
  r  r   r!   r   r  r  j  s        + + +	
 	
 	
	
 	
 	
	
 	
 	
	
 	
 	

 
 
N N N
 
 

 
 
	M 	M 	M 	M 	Mr!   r  c                      e Zd ZdZd ZdS )TestThreadinga  
    Threading-related functionality tests.

    jsonschema doesn't promise thread safety, and its validation behavior
    across multiple threads may change at any time, but that means it isn't
    safe to share *validators* across threads, not that anytime one has
    multiple threads that jsonschema won't work (it certainly is intended to).

    These tests ensure that this minimal level of functionality continues to
    work.
    c                    g fd} |             ddl m}  ||          }|                                 |                                 |                     |                                fdg f           d S )Nc                     	 t          j        dd           d S #                       t          j                               Y d S xY w)Nr   Tr   )r   r   r  sysexc_info)faileds   r   r   zFTestThreading.test_validation_across_a_second_thread.<locals>.validate  sN    .#R======.clnn------s	    (Ar   )Thread)targetF)	threadingr  startjoinr)   is_alive)r0   r   r  threadr  s       @r   &test_validation_across_a_second_threadz4TestThreading.test_validation_across_a_second_thread  s    	. 	. 	. 	. 	. 	


$$$$$$x(((&//++V4ubkBBBBBr!   N)rW   r   rX   r  r  r   r!   r   r  r    s2        
 
C C C C Cr!   r  c                      e Zd Zd Zd ZdS )TestReferencingc                    d }t          j        |          }ddi}t          j        ||          }|                     |                    d          |                    d          fd           d S )	Nc                .    t          j        ddi          S )Nr   r   )r   create_resource)uris    r   retrievez=TestReferencing.test_registry_with_retrieve.<locals>.retrieve  s    .	/BCCCr!   )r"  r   https://example.com/registryr   r   )TF)referencingRegistryr   r   r)   r   )r0   r"  r%  r   r   s        r   test_registry_with_retrievez+TestReferencing.test_registry_with_retrieve  s    	D 	D 	D ':::013FXNNN	##Y%7%7%>%>?	
 	
 	
 	
 	
r!   c                   t          j                    }ddi}t          j        ||          }t	          j        d          5 }t	          j        d           |                     t           j        j	                  5  |
                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |           d S )Nr   r#  r$  Tr  r  r   )r&  r'  r   r   r  r  r  r   r   Unresolvabler   r  )r0   r%  r   r   r  s        r   ;test_custom_registries_do_not_autoretrieve_remote_resourceszKTestReferencing.test_custom_registries_do_not_autoretrieve_remote_resources  sF   '))013FXNNN	$D111 	'Q!(+++"";#9#FGG ' '""2&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	s6   9B5<BB5B"	"B5%B"	&B55B9<B9N)rW   r   rX   r(  r+  r   r!   r   r  r    s2        
 
 
	 	 	 	 	r!   r  c                      e Zd ZdZdZddiZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestRefResolverrp   zfoo://storedstoredr   c                    i | _         | j        | j        i| _        t	          j        | j        | j         | j                  | _        d S r3   )referrer
stored_uristored_schemar  r   r  base_urir  r/   s    r   r1   zTestRefResolver.setUp
	  s?    ot'9:
"/M4=$*
 
r!   c                   t           j        j        d         }t          j                            | j        d          5 }| j                            |          5 }	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |t           j        j                   | 	                    |j
                   d S )Nri   resolve_remote)r   r   r5   r   r  r   r  r|  r)   r  called)r0   r  patchedresolveds       r   6test_it_does_not_retrieve_schema_urls_from_the_networkzFTestRefResolver.test_it_does_not_retrieve_schema_urls_from_the_network	  s$   (4T:Zt}.>?? 	7((--               	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:#=#IJJJ(((((s5   A=A&A=&A*	*A=-A*	.A==BBc                    d}dt                      i| j        d<   | j                            |          5 }|                     || j        d         d                    d d d            d S # 1 swxY w Y   d S )Nz#/properties/foor   rz  )r   r0  r  r|  r)   )r0   r  r8  s      r   test_it_resolves_local_refsz+TestRefResolver.test_it_resolves_local_refs	  s     ',fhh&7l#]$$S)) 	KXXt}\'B5'IJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   (A**A.1A.c                ~   dddid}t           j                            |d           }|                    d          5 }|                     ||d                    d d d            n# 1 swxY w Y   |                    d	          5 }|                     ||d                    d d d            d S # 1 swxY w Y   d S )
Nzhttp://bar/schema#r   r   )ri   r_   c                .    |                      dd          S ro   rq   r1  s    r   ru   zETestRefResolver.test_it_resolves_local_refs_with_id.<locals>.<lambda>#	      D"!5!5 r!   rx   z#/ar_   zhttp://bar/schema#/a)r   r  from_schemar|  r)   r0   r   r  r8  s       r   #test_it_resolves_local_refs_with_idz3TestRefResolver.test_it_resolves_local_refs_with_id	  sK   ,E5>BB*6655 7 
 
 && 	4(Xvc{333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 677 	48Xvc{333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s#   A((A,/A,B22B69B6c                ^   | j                             | j                  5 }|                     || j                   d d d            n# 1 swxY w Y   ddi| j         j        d<   | j                             d          5 }|                     |d           d d d            d S # 1 swxY w Y   d S )Nr   r   
cached_refzcached_ref#/foo)r  r|  r1  r  r2  r  r)   )r0   r8  s     r   test_it_retrieves_stored_refsz-TestRefResolver.test_it_retrieves_stored_refs*	  s&   ]$$T_55 	8MM(D$6777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 .3BKL)]$$%677 	+8Xr***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s#   AAA>B""B&)B&c                h   d}ddi}dt           j        v r6|                     t           j        j        dt           j        d                    t	          d|i          t           j        d<   | j                            |          5 }|                     |d           d d d            d S # 1 swxY w Y   d S )Nhttp://bar#bazr[  r   requests
http://bar)r  modulesr(   __setitem__ReallyFakeRequestsr  r|  r)   )r0   r  r   r8  s       r   ,test_it_retrieves_unstored_refs_via_requestsz<TestRefResolver.test_it_retrieves_unstored_refs_via_requests2	  s    $$OO'S[5L   #5lF5K"L"LJ]$$S)) 	+XXr***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   B''B+.B+c                    d}ddidt           j        v r6                     t           j        j        dt           j        d                    d t           j        d<   t           fd            }                     t
          t          dt          j                   |t          _         j        	                    |          5 }	 d d d            n# 1 swxY w Y    
                    |d           d S )NrG  r[  r   rH  c              3     K                        | d           t          t          j                                      d                    V  d S )NrI  utf8)r)   r   jsondumpsencode)urlr   r0   s    r   fake_urlopenzQTestRefResolver.test_it_retrieves_unstored_refs_via_urlopen.<locals>.fake_urlopenI	  sO      S,///$*V,,33F;;<<<<<<<r!   urlopen)r  rJ  r(   rK  r   setattrr   rV  r  r|  r)   )r0   r  rU  r8  r   s   `   @r   +test_it_retrieves_unstored_refs_via_urlopenz;TestRefResolver.test_it_retrieves_unstored_refs_via_urlopen?	  s*   $$OO'S[5L   #'J		= 	= 	= 	= 	= 
	= 	Y
8JKKK)
]$$S)) 	X	 	 	 	 	 	 	 	 	 	 	 	 	 	 	2&&&&&s   CCCc                   t          j        dd          5 }|                     t          j        |j                   t          j        ddi|           d d d            n# 1 swxY w Y   dt          |j                   d}| j	        
                    |          5 }|                     |d           d d d            d S # 1 swxY w Y   d S )NFwt)deletemoder   r   zfile://z#foo)tempfileNamedTemporaryFiler(   osremover   rQ  dumpr   r  r|  r)   )r0   tempfr  r8  s       r   (test_it_retrieves_local_refs_via_urlopenz8TestRefResolver.test_it_retrieves_local_refs_via_urlopenU	  sA   (DAAA 	-UOOBIuz222Iuene,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 7UZ00666]$$S)) 	.XXu---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s#   =A  A$'A$CCCc                   ddi}t           j                            |d           }|                     |j        d           |                     |j        d           |                    d          5 }|                     ||           d d d            n# 1 swxY w Y   |                    d          5 }|                     ||           d d d            n# 1 swxY w Y   |                    d          5 }|                     ||           d d d            n# 1 swxY w Y   |                    d          5 }|                     ||           d d d            d S # 1 swxY w Y   d S )Nri   r   c                .    |                      dd          S ro   rq   r1  s    r   ru   zPTestRefResolver.test_it_can_construct_a_base_uri_from_a_schema.<locals>.<lambda>b	  r>  r!   r?  rp   #zfoo#r   r  r@  r)   r3  resolution_scoper|  rA  s       r   .test_it_can_construct_a_base_uri_from_a_schemaz>TestRefResolver.test_it_can_construct_a_base_uri_from_a_schema^	  sd   *6655 7 
 
 	*E2222E:::## 	/xXv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/$$ 	/Xv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/&& 	/(Xv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/'' 	/8Xv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/sH   2BBB5CCC8DD"D;EE#&E#c                   i }t           j                            |          }|                     |j        d           |                     |j        d           |                    d          5 }|                     ||           d d d            n# 1 swxY w Y   |                    d          5 }|                     ||           d d d            d S # 1 swxY w Y   d S )Nrp   rf  rg  rA  s       r   9test_it_can_construct_a_base_uri_from_a_schema_without_idzITestRefResolver.test_it_can_construct_a_base_uri_from_a_schema_without_ido	  sV   *66v>>*B///2B777## 	/xXv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/$$ 	/Xv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s$   -BBB0CCCc                      fd}ddidt          j        di d|i          }|                              5 }                     |           d d d            d S # 1 swxY w Y   d S )Nc                4                         |            S r3   rz  )rT  r  r   r0   s    r   handlerz@TestRefResolver.test_custom_uri_scheme_handlers.<locals>.handlerz	  s    S#&&&Mr!   r   r   	foo://barrp   handlers)r   r  r|  r)   )r0   rn  r  r8  r  r   s   `   @@r   test_custom_uri_scheme_handlersz/TestRefResolver.test_custom_uri_scheme_handlersy	  s    	 	 	 	 	 	 	 *2rUG<LMMM$$ 	/Xv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   A##A'*A'c                &    t                      g fd}d}t          j        di dd|i          }|                    |          5  	 d d d            n# 1 swxY w Y   |                    |          5  	 d d d            d S # 1 swxY w Y   d S )Nc                z    	                                  S # t          $ r                     d           Y d S w xY w)Nz#Response must not have been cached!rV   
IndexErrorr    rT  responser0   s    r   rn  z5TestRefResolver.test_cache_remote_on.<locals>.handler	  sR    A||~~% A A A		?@@@@@@A    ::ro  rp   Tr   cache_remoterq  r   r   r  r|  r0   rn  r  r  rx  s   `   @r   test_cache_remote_onz$TestRefResolver.test_cache_remote_on	  sH   HH:	A 	A 	A 	A 	A 	A *0@
 
 
 $$ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	$$ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   	AAA7BB
B
c                     t                      g fd}d}t          j        di dd|i          }|                    |          5  	 d d d            d S # 1 swxY w Y   d S )Nc                z    	                                  S # t          $ r                     d           Y d S w xY w)NzHandler called twice!ru  rw  s    r   rn  z6TestRefResolver.test_cache_remote_off.<locals>.handler	  sM    3||~~% 3 3 3		12222223ry  ro  rp   Fr   rz  r|  r}  s   `   @r   test_cache_remote_offz%TestRefResolver.test_cache_remote_off	  s    HH:	3 	3 	3 	3 	3 	3 *%1A
 
 
 $$ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   	AAAc                   t          d          fd}d}t          j        di d|i          }|                     t          j                  5 }|                    |          5  |                     d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j	        t	          j                             d S )NzOh no! What's this?c                    r3   r   )rT  r  s    r   rn  zTTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_error.<locals>.handler	  s    Kr!   ro  rp   r   rp  zShouldn't get this far!)
rU  r   r  r   r   _RefResolutionErrorr|  r    r)   rV  )r0   rn  r  r  errr  s        @r   3test_if_you_give_it_junk_you_get_a_resolution_errorzCTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_error	  s]   011	 	 	 	 	 *2rUG<LMMMz=>> 	5###C(( 5 5		34445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	
(Fu(M(MNNNNNs6   B&B<BB	BB	BB#&B#c                >   t          j        di           }|                                 |                     t          j                  5 }|                                 d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nrp   zFailed to pop the scope)	r   r  	pop_scoper   r   r  rz   rd  rV  )r0   r  excs      r   .test_helpful_error_message_on_failed_pop_scopez>TestRefResolver.test_helpful_error_message_on_failed_pop_scope	  s    *2r22z=>> 	!#   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!/S]1C1CDDDDDs   	A**A.1A.c                   t           j        j        }t          j        d|          }t          j        ||          }|                     |                    ddi                     ddt           j        j        d         igi}t          j        d|          }t          j        ||          }|                     |                    ddi                     dS )	z
        See #1085.
        rp   r  r/  r   allOfr   r%   N)r   r   r5   r  r  r   )r0   r   oner   anothertwos         r   ,test_pointer_within_schema_with_different_idz<TestRefResolver.test_pointer_within_schema_with_different_id	  s     +7%b&11.vDDD	++[%,@AABBB vz9EeLMN
 %b'22.wEEE	++[%,@AABBBBBr!   c                .     fd}t          j        di d|i          }t          j        i t           j        j                  }ddd} |||	          }                     |                    i           |                    d
          fd           dS )zj
        See https://github.com/python-jsonschema/jsonschema/issues/1061#issuecomment-1624266555.
        c                8                         | d           ddiS )Nzhttp://example.com/foor   r   rz  )r!  r0   s    r   handlezNTestRefResolver.test_newly_created_validator_with_ref_resolver.<locals>.handle	  s%    S":;;;I&&r!   rp   httprp  r   zhttp://example.com/barr   )r%   r   r  r   FTN)r   r  r-   r   r4   r)   r   )r0   r  r  r.   r   r   s   `     r   .test_newly_created_validator_with_ref_resolverz>TestRefResolver.test_newly_created_validator_with_ref_resolver	  s    
	' 	' 	' 	' 	' *2rVV<LMMM%!1<
 
 
	 25AAIfx888	##Y%7%7%;%;<	
 	
 	
 	
 	
r!   c                    dddiidddiid}t          j        |t          j        d|                    }|                     |                    dd	i          |                    dd
i          fd           dS )zj
        See https://github.com/python-jsonschema/jsonschema/issues/1124#issuecomment-1632574249.
        xr   z#/definitions/xr   r   )rz  r  rp   r  yr   r  N)r   r   r  r)   r   )r0   r   r   s      r   2test_refresolver_with_pointer_in_schema_with_no_idzBTestRefResolver.test_refresolver_with_pointer_in_schema_with_no_id	  s     ): ;<&)!45
 

 3,R88
 
 
	 	c
++Y-?-?b	-J-JK	
 	
 	
 	
 	
r!   N)rW   r   rX   r3  r1  r2  r1   r9  r;  rB  rE  rM  rX  rc  ri  rk  rr  r~  r  r  r  r  r  r  r   r!   r   r-  r-  	  sB       HJx(M
 
 
) ) )K K K	4 	4 	4+ + ++ + +' ' ',. . ./ / /"/ / /	/ 	/ 	/  $   O O OE E EC C C 
 
 
*
 
 
 
 
r!   r-  c                *    d }t          | |          S )Nc                F    d | j         D             d | j        D             fS )Nc                ,    g | ]}t          |          S r   rd  r   r  s     r   rE  z.sorted_errors.<locals>.key.<locals>.<listcomp>	  s    (((SVV(((r!   c                ,    g | ]}t          |          S r   r  r  s     r   rE  z.sorted_errors.<locals>.key.<locals>.<listcomp>	  s    ///SVV///r!   )r  rD   )r  s    r   keyzsorted_errors.<locals>.key	  s3    ((UZ(((//U.///
 	
r!   )r  )sorted)r   r  s     r   r  r  	  s&    
 
 

 &c""""r!   c                       e Zd ZU ded<   d ZdS )rL  zdict[str, Any]
_responsesc                    | j                             |          }|t          dt          |          z             t	          t          j        |                    S )NzUnknown URL: )r  rr   rU  r\   _ReallyFakeJSONResponserQ  rR  )r0   rT  rx  s      r   rr   zReallyFakeRequests.get
  sM    ?&&s++;_tCyy8999&tz(';';<<<r!   N)rW   r   rX   r  rr   r   r!   r   rL  rL  	  s3          = = = = =r!   rL  c                       e Zd ZU ded<   d ZdS )r  rd  	_responsec                4    t          j        | j                  S r3   )rQ  loadsr  r/   s    r   rQ  z_ReallyFakeJSONResponse.json
  s    z$.)))r!   N)rW   r   rX   r  rQ  r   r!   r   r  r  	
  s0          NNN* * * * *r!   r  ):
__future__r   collectionsr   r   
contextlibr   decimalr   ior   typingr	   unittestr
   r   urllib.requestr   rQ  r_  r  r]  r  attrsr   r   referencing.jsonschemar   referencing.exceptionsr&  
jsonschemar   r   r   r   r   r    r#   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r-  r  rL  r  r   r!   r   <module>r     sT   " " " " " " ) ) ) ) ) ) ) ) % % % % % %                   # # # # # # # # ' ' ' ' ' '  				 



           . . . . . .                 1 1 1L6 L6 L6 L6 L6( L6 L6 L6^~
 ~
 ~
 ~
 ~
( ~
 ~
 ~
BL
 L
 L
 L
 L
 L
 L
 L
^5
 5
 5
 5
 5
 5
 5
 5
pwE wE wE wE wE- wE wE wEtJ J J J J J J J4H H H H H-/A8 H H H@) ) ) ) )-/A8 ) ) )) ) ) ) ),h ) ) )) ) ) ) ),h ) ) )) ) ) ) )18 ) ) )) ) ) ) )18 ) ) )% % % % %( % % %LJ LJ LJ LJ LJx LJ LJ LJ^^M ^M ^M ^M ^M8 ^M ^M ^MBC C C C CH C C C>    h   4l
 l
 l
 l
 l
h l
 l
 l
`# # # = = = = = = = = * * * * * * * * * *r!   