
    `d&                      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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Zd dlZd d	lmZmZmZmZmZ d d
lmZ d Z G d de      Z G d de      Z  G d de      Z! G d de"      Z# G d de#e"      Z$ G d de"      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      Z+ G d$ d%e      Z, G d& d'e      Z- G d( d)e      Z.d* Z/ej`                   G d+ d,e"             Z1ej`                   G d- d.e"             Z2y)/    )annotations)deque
namedtuple)contextmanager)Decimal)BytesIO)TestCasemock)pathname2urlN)FormatCheckerTypeChecker
exceptions	protocols
validators)bugc              #  l   K   |D ]+  }|j                  dd       t        j                  di | - y w)NmessagezYou told me to fail! )
setdefaultr   ValidationError)	validatorerrorsinstanceschemaeachs        B/usr/lib/python3/dist-packages/jsonschema/tests/test_validators.pyfailr      s8      1	#9:((04001s   24c                  r    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y)TestCreateAndExtendc                H   | j                  | j                  t        j                  t	        t        j                               ddi| _        dt        i| _        t               | _        t        j                  | j
                  | j                  | j                        | _
        y )N$idzsome://meta/schemar   )meta_schemar   type_checker)
addCleanupassertEqualr   _META_SCHEMASdictr"   r   r   r#   create	Validatorselfs    r   setUpzTestCreateAndExtend.setUp#   s~    $$))*	
 "#78!4.'M#**((**
    c                    | j                  | j                  j                  | j                  j                  | j                  j                  f| j
                  | j                  | j                  f       y N)r%   r)   
VALIDATORSMETA_SCHEMATYPE_CHECKERr   r"   r#   r*   s    r   
test_attrszTestCreateAndExtend.test_attrs3   s\    ))**++
   !!
	
r-   c                b    dg i}| j                  | j                  |      j                  |       y )Nr   )r%   r)   r   r+   r   s     r   	test_initzTestCreateAndExtend.test_init@   s*    "/66?r-   c                    dg i}| j                  |      }t        |j                  d            }| j                  |g        y )Nr   hello)r)   listiter_errorsr%   r+   r   r   r   s       r   test_iter_errors_successfulz/TestCreateAndExtend.test_iter_errors_successfulD   s>    "NN6*	i++G45$r-   c           
     P   dddigi}| j                  |      }t        j                  dd|dddigt        dg            }t	        |j                  d            }| j                  t        |      d       | j                  |d   j                         |j                                y )Nr   r   zWhoops!goodbye)r   r   r   validator_valueschema_path   r   )	r)   r   r   r   r9   r:   r%   len	_contents)r+   r   r   expected_errorr   s        r   test_iter_errors_one_errorz.TestCreateAndExtend.test_iter_errors_one_errorK   s    Iy123NN6*	#33'34vh
 i++I67Va(,,.0H0H0JKr-   c                    dddidddddigi}| j                  |      }t        |j                  d            }| j                  t	        |      d	       y )
Nr   r   FirstzSecond!asdf)r   r   Thirdr>      )r)   r9   r:   r%   rB   r;   s       r    test_iter_errors_multiple_errorsz4TestCreateAndExtend.test_iter_errors_multiple_errors\   sb    G$%F;G$
 NN6*	i++I67Va(r-   c                    t        j                  ddid      }| j                  t         j                  j                  d       | j                  |j                  d       | j                  |j                  d       y )Nr!   	something
my versionr"   versionMyVersionValidator)r   r(   r$   r&   popr%   __name____qualname__r+   r)   s     r   .test_if_a_version_is_provided_it_is_registeredzBTestCreateAndExtend.test_if_a_version_is_provided_it_is_registeredi   sg    %%, 
	 	
0044kB++-AB//1EFr-   c                    t        j                  ddid      }| j                  t         j                  j                  d       | j                  t         |i             d       y )Nr!   rM   rN   rO   z2MyVersionValidator(schema={}, format_checker=None))r   r(   r$   r&   rR   r%   reprrU   s     r   	test_reprzTestCreateAndExtend.test_reprr   sV    %%, 
	 	
0044kB2@	
r-   c                    t        j                  ddid      }| j                  t         j                  j                  d       | j                  t         |dt        t        d            i            d       y )Nr!   rM   rN   rO   ai  zNMyVersionValidator(schema={'a': [0, 1, 2, 3, 4, 5, ...]}, format_checker=None))	r   r(   r$   r&   rR   r%   rX   r9   rangerU   s     r   test_long_reprz"TestCreateAndExtend.test_long_repr}   sg    %%, 
	 	
0044kBCeDk!2345'	
r-   c                r    t        j                  i       }| j                  t         |i             d       y )Nr"   z)Validator(schema={}, format_checker=None))r   r(   r%   rX   rU   s     r   test_repr_no_versionz(TestCreateAndExtend.test_repr_no_version   s/    %%"5	27	
r-   c                    t        j                  ddid      }| j                  t         j                  j                  d       | j                  |j                  d       y )Nr!   rM   zfoo-barrO   FooBarValidator)r   r(   r$   r&   rR   r%   rT   rU   s     r   -test_dashes_are_stripped_from_validator_nameszATestCreateAndExtend.test_dashes_are_stripped_from_validator_names   sP    %%,
	 	
0044kB//1BCr-   c                    t        t        j                        }t        j                  ddi       | j	                  t        j                  |       y )Nidr_   )r'   r   r&   r(   r%   )r+   originals     r   6test_if_a_version_is_not_provided_it_is_not_registeredzJTestCreateAndExtend.test_if_a_version_is_not_provided_it_is_not_registered   s:    
001tTl3118<r-   c                    d}d|i}t        j                  |dd        | j                  t         j                  j                  |       | j                  |t         j                         y )Nmeta schema idre   rN   c                &    | j                  dd      S Nre    getss    r   <lambda>zMTestCreateAndExtend.test_validates_registers_meta_schema_id.<locals>.<lambda>       AEE$O r-   r"   rP   id_ofr   r(   r$   r&   rR   assertInr+   meta_schema_keymy_meta_schemas      r   'test_validates_registers_meta_schema_idz;TestCreateAndExtend.test_validates_registers_meta_schema_id   sX    *0& +	

 	
0044oFoz'?'?@r-   c                    d}d|i}t        j                  |d       | j                  t         j                  j                  |       | j                  |t         j                         y )Nmeta schema $idr!   rN   rO   ru   rw   s      r   .test_validates_registers_meta_schema_draft6_idzBTestCreateAndExtend.test_validates_registers_meta_schema_draft6_id   sU    +1& 	
 	
0044oFoz'?'?@r-   c                    t        j                  i d      | j                  t        fddg fddddd	i fd
fD                     y )Nr   )r"   r   c              3  V   K   | ]   \  }} i       j                  ||        " yw))r   typeN)is_type).0r   r   r)   s      r   	<genexpr>z@TestCreateAndExtend.test_create_default_types.<locals>.<genexpr>   s1      "D( "%%xd%Cs   &)array)booleanT)integer   )nullN)numberg      (@object)stringfoo)r   r(   
assertTrueallrU   s    @r   test_create_default_typesz-TestCreateAndExtend.test_create_default_types   sW    %%"D	  bM%#"$rN%' 	
r-   c                   t        | j                  j                        }t               }t	        j
                  | j                  d|i      }| j                  |j                  |j                  |j                  | j                  j                  ft        ||      | j                  j                  | j                  j                  |f       y )Nnew)r   )r   )	r'   r)   r0   r   r   extendr%   r1   r2   )r+   rf   r   Extendeds       r   test_extendzTestCreateAndExtend.test_extend   s    112h$$NNs|
 	##$$%%))	 X3'**++		
r-   c                N     fd}d}d|d}t        j                  | j                    j                  |      } j                  |j	                  |j
                        |       t        j                  |      } j                  |j	                  |j
                        |       y)zK
        Extending a validator preserves its notion of schema IDs.
        c                Z    | j                  dj                  j                  |             S )N__test__)rn   r)   ID_OF)r   r+   s    r   rt   z3TestCreateAndExtend.test_extend_idof.<locals>.id_of   s#    ::j$..*>*>v*FGGr-   zthe://correct/id/zthe://wrong/id/)r!   r   )r"   r   r#   rt   N)r   r(   r#   r%   r   r1   r   )r+   rt   
correct_idr"   OriginalDeriveds   `     r   test_extend_idofz$TestCreateAndExtend.test_extend_idof   s    	H(
$"
 $$#**	
 	(<(<=zJ##H-w':':;ZHr-   N)rS   
__module__rT   r,   r3   r6   r<   rE   rK   rV   rY   r]   r`   rc   rg   rz   r}   r   r   r   r   r-   r   r   r   "   s^    
 
@%L")G	


D=
A
A
"
,I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 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.y-).TestValidationErrorMessagesc                :   |j                  dt        j                        }|j                  |        ||g|i |}t	        |j                  |            }| j                  |d|       | j                  t        |      dd|       |d   j                  S )NclszNo errors were raised for )msgrA   z"Expected exactly one error, found r   )
rR   r   _LATEST_VERSIONcheck_schemar9   r:   r   r%   rB   r   )r+   r   r   argskwargsr   r   r   s           r   message_forz'TestValidationErrorMessages.message_for   s    jj
 : :; 000	i++H56&@$MNK4VJ? 	 	

 ay   r-   c                R    | j                  dddi      }| j                  |d       y NrA   r   r   r   r   1 is not of type 'string'r   r%   r+   r   s     r   test_single_type_failurez4TestValidationErrorMessages.test_single_type_failure  s-    ""Avx6H"I"=>r-   c                T    | j                  dddgi      }| j                  |d       y r   r   r   s     r   test_single_type_list_failurez9TestValidationErrorMessages.test_single_type_list_failure  s/    ""Avz6J"K"=>r-   c                h    d}| j                  ddt        |      i      }| j                  |d       y )N)r   r   rA   r   r   z#1 is not of type 'string', 'object')r   r9   r%   )r+   typesr   s      r   test_multiple_type_failurez6TestValidationErrorMessages.test_multiple_type_failure  s6    """AvtE{6K"L"GHr-   c                |    ddddgi}| j                  d|t        j                        }| j                  |d       y )Nr   FoorJ   )nameminimumrA   r   r   r   z1 is not of type 'Foo'r   r   Draft3Validatorr%   r+   r   r   s      r   #test_object_with_named_type_failurez?TestValidationErrorMessages.test_object_with_named_type_failure  sK    Ea89:""** # 

 	":;r-   c                R    | j                  dddi      }| j                  |d       y )NrA   r      r   z1 is less than the minimum of 2r   r   s     r   test_minimumz(TestValidationErrorMessages.test_minimum  s,    ""Ay!n"E"CDr-   c                R    | j                  dddi      }| j                  |d       y )NrA   maximumr   r   z"1 is greater than the maximum of 0r   r   s     r   test_maximumz(TestValidationErrorMessages.test_maximum  s,    ""Ay!n"E"FGr-   c                    d\  }}d||ii}| j                  ddi|t        j                        }| j                  |d       y Nbarr   dependenciesr   r   r   z'foo' is a dependency of 'bar'r   r+   dependonr   r   s        r    test_dependencies_single_elementz<TestValidationErrorMessages.test_dependencies_single_element!  sT    !
 62,/""QZ** # 

 	"BCr-   c                    dddigi}| j                  dd|git        j                        }| j                  |d       y )Nr   r   rJ   rA   r   z+1 is not of type {'type': [{'minimum': 3}]}r   )r+   r   r   s      r   -test_object_without_title_type_failure_draft3zITestValidationErrorMessages.test_object_without_title_type_failure_draft3+  sT    )Q()""TF#** # 

 	9	
r-   c                    d\  }}d||gii}| j                  ddi|t        j                        }| j                  |d       y r   r   r   s        r   test_dependencies_list_draft3z9TestValidationErrorMessages.test_dependencies_list_draft37  V    !
 6B4.1""QZ** # 

 	"BCr-   c                    d\  }}d||gii}| j                  ddi|t        j                        }| j                  |d       y r   )r   r   Draft7Validatorr%   r   s        r   test_dependencies_list_draft7z9TestValidationErrorMessages.test_dependencies_list_draft7A  r   r-   c                t    | j                  dgg ddt        j                        }| j                  d|       y )Nr   FitemsadditionalItemsr   z(2 was unexpected)r   r   r   rv   r   s     r   #test_additionalItems_single_failurez?TestValidationErrorMessages.test_additionalItems_single_failureK  s>    ""SE:** # 

 	*G4r-   c                v    | j                  g dg ddt        j                        }| j                  d|       y )NrA   r   rJ   Fr   r   z(1, 2, 3 were unexpected)r   r   s     r   &test_additionalItems_multiple_failureszBTestValidationErrorMessages.test_additionalItems_multiple_failuresS  s<    ""E:** # 

 	17;r-   c                ^    d}ddi}| j                  |di|      }| j                  d|       y )Nr   additionalPropertiesFr   r   z('foo' was unexpected)r   rv   )r+   
additionalr   r   s       r   (test_additionalProperties_single_failurezDTestValidationErrorMessages.test_additionalProperties_single_failure[  s9    
(%0""ZOF"K.8r-   c                    ddi}| j                  t        j                  ddg      |      }| j                  t	        d      |       | j                  t	        d      |       | j                  d|       y )Nr   Fr   r   r   zwere unexpected))r   r'   fromkeysrv   rX   r   s      r   +test_additionalProperties_multiple_failureszGTestValidationErrorMessages.test_additionalProperties_multiple_failuresa  si    (%0""]]E5>2 # 

 	d5k7+d5k7+('2r-   c                Z    ddi}| j                  ddi|      }| j                  d|       y )Nconstr   r   r   r   z12 was expectedr   r   s      r   
test_constz&TestValidationErrorMessages.test_constl  s;    2""U^ # 
 	'1r-   c                ~    dddii}| j                  di g g|t        j                        }| j                  |d       y )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_6t  sP    wm,""R[** # 

 	B	
r-   c                   t        d      } |j                  d      d        ddi}| j                  d||      }| j                  t	        d      |       | j                  t	        d      |       | j                  d|       y )	Nr   )formatsthingc                     yNFr   )values    r   rq   zQTestValidationErrorMessages.test_invalid_format_default_message.<locals>.<lambda>  s    r-   formatbla)r   r   format_checkerzis not a)r   checksr   rv   rX   )r+   checkerr   r   s       r   #test_invalid_format_default_messagez?TestValidationErrorMessages.test_invalid_format_default_message  s|    +w 34G$""" # 
 	d5k7+d7mW-j'*r-   c                   ddddiddidd}| j                  ddi|t        j                  	      }| j                  |d
j	                  t        d      t        d      t        d                   | j                  ddd|t        j                  	      }| j                  |dj	                  t        d      t        d      t        d      t        d                   y )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   Draft4Validatorr%   r   rX   r   s      r   1test_additionalProperties_false_patternPropertieszMTestValidationErrorMessages.test_additionalProperties_false_patternProperties  s    "*/ &1 &1( ""s^** # 

 	:AAWtG}d7m	
 """C0** # 

 	<CCVd7mT']DM	
r-   c                N    | j                  dd      }| j                  |d       y )NrM   Fr   z'False schema does not allow 'something'r   r   s     r   test_False_schemaz-TestValidationErrorMessages.test_False_schema  s0    ""  # 
 	"KLr-   c                R    | j                  dddi      }| j                  |d       y )NrJ   
multipleOfr   r   z3 is not a multiple of 2r   r   s     r   test_multipleOfz+TestValidationErrorMessages.test_multipleOf  s5    "" !$ # 
 	"<=r-   c                R    | j                  g ddi      }| j                  |d       y )NminItemsr   r   z[] is too shortr   r   s     r   test_minItemsz)TestValidationErrorMessages.test_minItems  s,    ""B
A"G"34r-   c                V    | j                  g dddi      }| j                  |d       y )Nr   maxItemsr   r   z[1, 2, 3] is too longr   r   s     r   test_maxItemsz)TestValidationErrorMessages.test_maxItems  s,    ""Iz1o"N"9:r-   c                \    | j                  g ddi i gd      }| j                  |d       y )NrA   r   r      Fr   prefixItemsr   z%Expected at most 2 items, but found 4r   r   s     r   test_prefixItems_with_itemsz7TestValidationErrorMessages.test_prefixItems_with_items  s9    ""%"B8< # 
 	"IJr-   c                R    | j                  dddi      }| j                  |d       y )Nrl   	minLengthr   r   z'' is too shortr   r   s     r   test_minLengthz*TestValidationErrorMessages.test_minLength  s5    ""# # 
 	"34r-   c                R    | j                  dddi      }| j                  |d       y )Nabc	maxLengthr   r   z'abc' is too longr   r   s     r   test_maxLengthz*TestValidationErrorMessages.test_maxLength  s5    ""# # 
 	"56r-   c                R    | j                  dddi      }| j                  |d       y )Nbbbpatternz^a*$r   z'bbb' does not match '^a*$'r   r   s     r   test_patternz(TestValidationErrorMessages.test_pattern  s5    ""v& # 
 	"?@r-   c                V    | j                  g dddii      }| j                  |d       y )Nr   r   r   r   z3[] does not contain items matching the given schemar   r   s     r   test_does_not_containz1TestValidationErrorMessages.test_does_not_contain  s=    "" 23 # 
 	A	
r-   c                \    | j                  ddgddidd      }| j                  |d       y )	Nr   rA   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  sC    ""QZ!' 21E # 
 	7	
r-   c                ^    | j                  ddgddiddd      }| j                  |d	       y )
Nr   rA   r   r   r      r   r!  maxContainsr   r"  r   r   s     r   &test_contains_too_few_both_constrainedzBTestValidationErrorMessages.test_contains_too_few_both_constrained  sI    ""QZ#X.   # 
 		
r-   c                \    | j                  g dddidd      }| j                  |d       y )Nr   r   bazr   r   r   r   r'  r   :Too many items match the given schema (expected at most 2)r   r   s     r   test_contains_too_manyz2TestValidationErrorMessages.test_contains_too_many  s=    ""*!' 21E # 
 	H	
r-   c                b    | j                  dgdz  ddiddd      }| j                  |d	       y )
Nr   r  r   r   r   r%  r&  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  sI    ""Wq[#X.   # 
 	H	
r-   c                R    | j                  dddi      }| j                  |d       y )NrJ   exclusiveMinimumr  r   z+3 is less than or equal to the minimum of 5r   r   s     r   test_exclusiveMinimumz1TestValidationErrorMessages.test_exclusiveMinimum  s8    ""&* # 
 	9	
r-   c                R    | j                  dddi      }| j                  |d       y )NrJ   exclusiveMaximumr   r   z.3 is greater than or equal to the maximum of 2r   r   s     r   test_exclusiveMaximumz1TestValidationErrorMessages.test_exclusiveMaximum%  s1    ""A7I16M"N<	
r-   c                T    | j                  i ddgi      }| j                  |d       y )Nrequiredr   r   z'foo' is a required propertyr   r   s     r   test_requiredz)TestValidationErrorMessages.test_required,  s/    ""B
UG7L"M"@Ar-   c                \    | j                  di idddgii      }| j                  |d       y )Nr   dependentRequiredr   r   z'bar' is a dependency of 'foo'r   r   s     r   test_dependentRequiredz2TestValidationErrorMessages.test_dependentRequired0  s@    ""R['%%)9: # 
 	"BCr-   c                R    | j                  i ddi      }| j                  |d       y )NminPropertiesr   r   z"{} does not have enough propertiesr   r   s     r   test_minPropertiesz.TestValidationErrorMessages.test_minProperties7  s-    ""B7K"L"FGr-   c                Z    | j                  i i i dddi      }| j                  |d       y )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#Q' # 
 	A	
r-   c                T    | j                  i ddgi      }| j                  |d       y )NoneOfFr   z.{} is not valid under any of the given schemasr   r   s     r   test_oneOf_matches_nonez3TestValidationErrorMessages.test_oneOf_matches_noneE  s2    ""B%7I"J<	
r-   c                V    | j                  i dddgi      }| j                  |d       y )NrF  Tr   z${} is valid under each of True, Truer   r   s     r   test_oneOf_matches_too_manyz7TestValidationErrorMessages.test_oneOf_matches_too_manyL  s1    ""B$7N"O"HIr-   c                \    ddd}| j                  ddg|      }| j                  |d       y )Nr   Fr   unevaluatedItemsr   r   r   z@Unevaluated items are not allowed ('bar', 'foo' were unexpected)r   r   s      r   test_unevaluated_itemsz2TestValidationErrorMessages.test_unevaluated_itemsP  s7    !u=""UEN6"JN	
r-   c                X    ddd}| j                  d|      }| j                  |d       y )Nr   FrK  r   r   z'foo' is not of type 'array'r   r   s      r   &test_unevaluated_items_on_invalid_typezBTestValidationErrorMessages.test_unevaluated_items_on_invalid_typeX  s2    !u=""E&"A"@Ar-   c                ^    ddd}| j                  ddd|      }| j                  |d       y )	Nr   Fr   unevaluatedPropertiesr   r   r   r   r   zEUnevaluated properties are not allowed ('bar', 'foo' were unexpected)r   r   s      r   test_unevaluated_propertiesz7TestValidationErrorMessages.test_unevaluated_properties]  sI    "UC""  # 
 	-	
r-   c                X    ddd}| j                  d|      }| j                  |d       y )Nr   FrQ  r   r   z'foo' is not of type 'object'r   r   s      r   +test_unevaluated_properties_on_invalid_typezGTestValidationErrorMessages.test_unevaluated_properties_on_invalid_typel  s2    "UC""E&"A"ABr-   N)/rS   r   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r#  r(  r.  r0  r3  r6  r9  r<  r?  rD  rG  rI  rM  rO  rT  rV  r   r-   r   r   r      s    !??I
<EHD

DD5<9	32

+
<M>5;K57A
	





BDH

J
B

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y)TestValidationErrorDetailsc                6   d}dddiddigi}t        j                  |      }t        |j                  |            }| j	                  t        |      d       |d   }| j	                  |j                  d       | j	                  |j                  |d          | j	                  |j                  |       | j	                  |j                  |       | j                  |j                         | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                   d	       | j	                  |j"                  t        dg             | j	                  |j$                  t        dg             | j	                  |j&                  t        dg             | j	                  t        |j(                        d
       t+        |j(                        \  }}| j	                  |j                  d       | j	                  |j                  |d   d   d          | j	                  |j                  |       | j	                  |j                  |d   d          | j-                  |j                  |       | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                   d	       | j	                  |j"                  t        ddg             | j	                  |j$                  t        ddg             | j	                  |j&                  t        g d             | j/                  |j(                         | j	                  |j                  d       | j	                  |j                  |d   d   d          | j	                  |j                  |       | j	                  |j                  |d   d          | j-                  |j                  |       | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                   d	       | j	                  |j"                  t        ddg             | j	                  |j$                  t        ddg             | j	                  |j&                  t        g d             | j	                  t        |j(                        d       y )Nr  anyOfr      r   r   rA   r   $r   )rZ  r   r   )rZ  rA   r   )r   r   r9   r:   r%   rB   r   r?   r   r   assertIsNoneparentpathr   relative_pathabsolute_path	json_pathr@   relative_schema_pathabsolute_schema_pathcontextsorted_errorsassertIsassertFalser+   r   r   r   r   ee1e2s           r   
test_anyOfz%TestValidationErrorDetails.test_anyOfu  sA   B"
 ..v6	i++H56Va(1Ig.**F7O<X.6*!((#r+%)4%)4c*wi(89//y1AB//y1ABQYY+qyy)By1++VG_Q-?	-JKh/F7OA$67bii#%),))595))595s+9~)>?00%I2GH##U+B%C	
 	$v.++VG_Q-?-GHh/F7OA$67bii#%),))595))595s+6{);<00%F2DE00%8L2MNRZZ!,r-   c                "   ddi}dddiddddgiidgi}t        j                  |      }t        |j                  |            }| j	                  t        |      d       |d	   }| j	                  |j                  d       | j	                  |j                  |d          | j	                  |j                  |       | j	                  |j                  |       | j                  |j                         | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                   d
       | j	                  |j"                  t        dg             | j	                  |j$                  t        dg             | j	                  |j&                  t        dg             | j	                  t        |j(                        d       t+        |j(                        \  }}| j	                  |j                  d       | j	                  |j                  |d   d	   d          | j	                  |j                  |       | j	                  |j                  |d   d	          | j-                  |j                  |       | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                  t        g              | j	                  |j                   d
       | j	                  |j"                  t        d	dg             | j	                  |j$                  t        d	dg             | j	                  |j&                  t        g d             | j/                  |j(                         | j	                  |j                  d       | j	                  |j                  dg       | j	                  |j                  d       | j	                  |j                  ddgi       | j-                  |j                  |       | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                   d       | j	                  |j"                  t        g d             | j	                  |j$                  t        g d             | j	                  |j&                  t        g d             | j/                  |j(                         y )Nr   rA   r   r   r   enumr   r   
propertiesr   r\  )r   r   r   $.foo)rA   rq  r   ro  )r   rA   rq  r   ro  )r   r   r9   r:   r%   rB   r   r?   r   r   r]  r^  r_  r   r`  ra  rb  r@   rc  rd  re  rf  rg  rh  ri  s           r   	test_typez$TestValidationErrorDetails.test_type  sG   1:#$#(6A3-"8
 ..v6	i++H56Va(1If-**F6N;X.6*!((#r+%)4%)4c*vh8//xA//xAQYY+qyy)Bv.++VF^A->v-FGh/F6N1$56bii#%),))595))595s+6{);<00%F2DE00%8K2LM$v.++aS1a(VaSM2bii#%.1))5%>:))5%>:w/NNE"BC	
 	##U+K%L	
 	##:;	

 	$r-   c                   ddgddd}dddid	did
g dddi}t        j                  |      }|j                  |      }t        |      \  }}}}| j	                  |j
                  t        dg             | j	                  |j
                  t        dg             | j	                  |j
                  t        dg             | j	                  |j
                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  t        dg             | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d	       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       y )Nr   rA      spam)r   r   r+  quuxrq  r   r   r  
   )r   r%        )r   ro  r*  r   r+  r   $.barz$.bazrr  ro  r   )r   r   r:   rf  r%   r_  r   r`  ra  rb  r   )	r+   r   r   r   r   rk  rl  e3e4s	            r   test_single_nestingz.TestValidationErrorDetails.test_single_nesting  sT   aSVD)"A#%|<
 ..v6	&&x0&v.BB%.1%.1%.1%.1))5%>:))5%>:))5%>:))5%>:))5%>:))5%>:))5%>:))5%>:w/w/w/w/z2v.y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                  |      }|j                  |      }t        |      \  }}}}}	}
| j	                  |j
                  t        g              | j	                  |j
                  t        dg             | j	                  |j
                  t        ddg             | j	                  |j
                  t        g d             | j	                  |	j
                  t        g d             | j	                  |
j
                  t        ddg             | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |	j                  d       | j	                  |
j                  d       | j	                  |j                  t        dg             | j	                  |j                  t        ddg             | j	                  t        |j                        g d       | j	                  t        |j                        g d       | j	                  t        |	j                        g d        | j	                  t        |
j                        g d!       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |	j                  d       | j	                  |
j                  d       y )"NrA   r   r+  rS  rw  r   r   ro  rJ   r   r8  Tr  )r   r+  rp  )r   r   r   r   )rA   r   r   )rA   r   r+  r   r\  $[0]z$[1].barz$[1].bar.barz$[1].bar.bazz$[1].foor   r   )r   rq  r   r   )r   rq  r   rq  r   r8  )r   rq  r   rq  r+  r  )r   rq  r   ro  )r   r   r:   rf  r%   r_  r   rb  r@   r9   r   )r+   r   r   r   r   rk  rl  r|  r}  e5e6s              r   test_multiple_nestingz0TestValidationErrorDetails.test_multiple_nesting.  s   q%!6?!8,"QF+ '$.#5$.?'	
" ..v6	&&x0!.v!6BBB%),%*-%E
"34%(9":;%(9":;%E
"34s+v.z2~6~6z2x9/@)AB "H	
 	 K	
 	 K	
 	 "H	
 	v.v.v.z2z2v.r-   c           	     l   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                  |      \  }| j                  |j                  t        dg             | j                  |j                  t        g d             | j                  |j                  d       |j                  \  }| j                  |j                  t        g d             | j                  |j                  t        g d             | j                  |j                  d       |j                  \  }| j                  |j                  t        g d             | j                  |j                  t        g d             | j                  |j                  d       y )NnoderZ  r   r   childrenr   r   ^.*$$refz#/definitions/node)r   r   )r   r  )r   r8  rq  root)definitionsr   r8  rq  r[   ab)rq  r  rZ  z$.root)r  r  r[   )	rq  r  rZ  r   rq  r  r   r  rZ  z$.root.children.a)r  r  r[   r  r  )rq  r  rZ  r   rq  r  r   r  rZ  r   rq  r  r   r  rZ  z$.root.children.a.children.ab)	r   r   r:   r%   ra  r   rd  rb  re  )r+   r   r   r   rj  rk  rl  s          r   test_recursivez)TestValidationErrorDetails.test_recursivek  s     (%+Z$8 !'% )1$*(.0D-&6")	' * !F,@#AB1
8  #  &#%

  ..v6	""8,%/:""E*I$J	
 	h/ii))51J+KL##U
&	
 	':;jje;	

 	##U&	
* 	'FGr-   c                   ddd}ddddi}t        j                  |      }|j                  |      }t        |      \  }}| j	                  |j
                  t        dg             | j	                  |j
                  t        dg             | j	                  |j                  d	       | j	                  |j                  d
       | j	                  |j                  d       | j	                  |j                  d       y )Nr   r   r   r   r   r  r   r   r   r{  rr  r   r   	r   r   r:   rf  r%   r_  r   rb  r   r+   r   r   r   r   rk  rl  s          r   test_additionalPropertiesz4TestValidationErrorDetails.test_additionalProperties  s     +(9*KL..v6	&&x0v&B%.1%.1w/w/v.y1r-   c                   ddd}dddiddidi}t        j                  |      }|j                  |      }t        |      \  }}| j	                  |j
                  t        d	g             | j	                  |j
                  t        d
g             | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d       y )NrA   r   r   r   r   r   r   r  r   r   r{  rr  r  r  s          r   test_patternPropertiesz1TestValidationErrorDetails.test_patternProperties  s    Q')!1~"
 ..v6	&&x0v&B%.1%.1w/w/v.y1r-   c                   ddg}g dddd}t        j                  |      }|j                  |      }t        |      \  }}| j	                  |j
                  t        dg             | j	                  |j
                  t        dg             | j	                  |j                  d       | j	                  |j                  d	       | j	                  |j                  d
       | j	                  |j                  d       y )Nr   rA   r   r  r  r   r   r  $[1]r   r   r  r  s          r   test_additionalItemsz/TestValidationErrorDetails.test_additionalItems  s    1:(1a@

 ..v6	&&x0v&B%*-%*-v.v.v.y1r-   c                   g d}i gdddd}t        j                  |      }|j                  |      }t        |      \  }}| j	                  |j
                  t        dg             | j	                  |j
                  t        dg             | j	                  |j                  d       | j	                  |j                  d	       | j	                  |j                  d
       | j	                  |j                  d       y )N)r   r   rA   r   r  r  r   rA   r   r  z$[2]r   r   r  r  s          r   test_additionalItems_with_itemsz:TestValidationErrorDetails.test_additionalItems_with_items  s    $T(1a@

 ..v6	&&x0v&B%*-%*-v.v.v.y1r-   c                   ddi}ddddiii}t        j                  |      }|j                  |      \  }| j                  |j                  d       | j                  |j
                  d       | j                  |j                  t        g              | j                  |j                  d       | j                  |j                  t        ddg             y )Nr   r   propertyNamesnotr   z0'foo' should not be valid under {'const': 'foo'}r\  
r   r   r:   r%   r   r   r_  r   rb  r@   )r+   r   r   r   errors        r   test_propertyNamesz-TestValidationErrorDetails.test_propertyNames  s    2;!EGU+;#<=..v6	&&x0%0MM>	
 	U2Y/#.**E?E2J,KLr-   c                   ddiddid}t        j                  |      }|j                  d      \  }| j                  |j                  d       | j                  |j
                  d       | j                  |j                  t        g              | j                  |j                  d       | j                  |j                  t        ddg             y )Nr   r      )ifthen13 was expectedr\  r  r  r+   r   r   r  s       r   test_if_thenz'TestValidationErrorDetails.test_if_then/      B-bM

 ..v6	&&r*'2(9:U2Y/#.**E672C,DEr-   c                   ddiddid}t        j                  |      }|j                  d      \  }| j                  |j                  d       | j                  |j
                  d       | j                  |j                  t        g              | j                  |j                  d       | j                  |j                  t        ddg             y )	Nr   r   r  )r  elseru  r  r\  r  r  r  s       r   test_if_elsez'TestValidationErrorDetails.test_if_else>  r  r-   c                2   t        j                  d      }|j                  d      \  }| j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  fdd d ddt        g       df       y )NFr   zFalse schema does not allow 12r\  )r   r   r:   r%   r   r   r?   r   r   r@   rb  r   )r+   r   r  s      r   test_boolean_schema_Falsez4TestValidationErrorDetails.test_boolean_schema_FalseM  s    ..u5	&&r*%%!! 1b		
r-   c                   ddddii}}t        j                  d|it        j                  di ||i            }|j                  d	d
i      \  }| j	                  |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       y )NsomeRefr   r   r   r  rl   storeresolverr   notAnIntegerz''notAnInteger' is not of type 'integer'rr  )r   r   RefResolverr:   r%   r   r   r?   r   ra  r   r@   rb  r   )r+   refr   r   r  s        r   test_refz#TestValidationErrorDetails.test_reff  s    "869:M!NV..SM++B3-H
	 &&~'>?%%##!!	 :ug#-v67		
r-   c                   dddii i ddigi}t        j                  |      }|j                  g d      \  }}| j                  |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                  |j                  fddddt        dg      ddit        g d      df       y )Nr  r   r   r   rJ   r  r   rA   r   )r  r   r   r  z"5 is greater than the maximum of 3r  )r  rJ   r   $[3]r   Draft202012Validatorr:   r%   r   r   r?   r   ra  r   r@   rb  r   )r+   r   r   
type_error	min_errors        r   test_prefixItemsz+TestValidationErrorDetails.test_prefixItems  s[   68"4b"y!n!MN33F;	 ) 5 56F G
I""$$**##((!!&&$$	 ,qc
"01		
, 	!!##))""''  %%##	 5qc
A34		
r-   c                   ddii gd}t        j                  |      }|j                  g d      \  }}| j                  |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                  |j                  fd
dddt        dg      ddit        ddg      df       y )Nr   r   r  )r   r   r   r%  r+  z2 is not of type 'string'r   rA   r   r  z4 is not of type 'string'r%  rJ   r  r  r+   r   r   rk  rl  s        r   r  z6TestValidationErrorDetails.test_prefixItems_with_items  sE   h'4
 33F;	&&'BCB

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

""  			 ,qc
"w'(		
r-   c                ~   ddidd}t        j                  |      }|j                  g d      \  }| j                  |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       y
)z
        `contains` + `maxContains` produces only one error, even if there are
        many more incorrectly matching elements.
        r   r   r   r,  )r   r   r   r%  r+  rw  r-  r'  r   r\  Nr  r  s       r   r.  z1TestValidationErrorDetails.test_contains_too_many  s    
  &x0C33F;	&&'JK%%##!!	 M3b	$h/Bzl#		
r-   c                ~   ddidd}t        j                  |      }|j                  g d      \  }| j                  |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       y )
Nr   r   r   r   )r   r   r%  r"  r!  r   r\  r  r  s       r   r#  z0TestValidationErrorDetails.test_contains_too_few	  s    %x0C33F;	&&}5%%##!!	? b	$h/Bzl#	
r-   c                   ddidd}t        j                  |      }|j                  ddg      \  }| j                  |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       y )	Nr   r   r   r   r%  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33F;	&&1v.%%##!!	 J"Ab	$h/Bzl#		
r-   c                   dddgiidddgdid}t        j                  |      }|j                  di i      \  }}| j                  |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                  |j                  f	dddgi t        dg      ddgdt        g d
      t        g d
      df	       y )Nr   r8  r   apropz#/$defs/foor+  )r  r8  )z$defsrq  z'bar' is a required property)rq  r  r8  z$.apropz'baz' is a required property)r   r  r:   r%   r   r   r?   r   ra  r   r@   rc  rb  r   r  s        r   test_ref_siblingz+TestValidationErrorDetails.test_ref_siblingB  s   j5'23)!&
 33F;	&&}5B

""  		''
 /wi eW%9:9:
	
0 	

""  		''
 /wi &UG<9:9:
	
r-   N)rS   r   rT   rm  rs  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r.  r#  r  r  r   r-   r   rX  rX  r  st    C-JK%Z%/N;/zcHJ2"2,2(2(M FF
2
>/
b2
h
>
<
6<
r-   rX  c                  $    e Zd Zd Zd Zd Zd Zy)MetaSchemaTestsMixinc                    | j                  t        j                        5  | j                  j	                  ddi       d d d        y # 1 sw Y   y xY w)Nrq  r   assertRaisesr   SchemaErrorr)   r   r*   s    r   test_invalid_propertiesz,MetaSchemaTestsMixin.test_invalid_properties  sB    z556 	<NN''r(:;	< 	< 	<   AAc                    | j                  t        j                        5  | j                  j	                  ddi       d d d        y # 1 sw Y   y xY w)Nr  1r  r*   s    r   test_minItems_invalid_stringz1MetaSchemaTestsMixin.test_minItems_invalid_string  sB    z556 	;NN''S(9:	; 	; 	;r  c                >    | j                   j                  dg i       y)zk
        Technically, all the spec says is they SHOULD have elements, not MUST.

        See #529.
        ro  Nr)   r   r*   s    r   test_enum_allows_empty_arraysz2MetaSchemaTestsMixin.test_enum_allows_empty_arrays  s     	##VRL1r-   c                B    | j                   j                  dddgi       y)zg
        Technically, all the spec says is they SHOULD be unique, not MUST.

        See #529.
        ro  r   Nr  r*   s    r   !test_enum_allows_non_unique_itemsz6MetaSchemaTestsMixin.test_enum_allows_non_unique_items  s     	##Vb"X$67r-   N)rS   r   rT   r  r  r  r  r   r-   r   r  r    s    <;
28r-   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y)ValidatorTestMixinc                b    | j                  | j                  i       t        j                         y r/   )assertIsInstancer)   r   r*   s    r   )test_it_implements_the_validator_protocolz<ValidatorTestMixin.test_it_implements_the_validator_protocol  s!    dnnR0)2E2EFr-   c                    | j                   \  }}| j                  | j                  |      j                  |             y r/   )validr   r)   is_validr+   r   r   s      r   test_valid_instances_are_validz1ValidatorTestMixin.test_valid_instances_are_valid  s0    ::v.77ABr-   c                    | j                   \  }}| j                  | j                  |      j                  |             y r/   )invalidrh  r)   r  r  s      r   $test_invalid_instances_are_not_validz7ValidatorTestMixin.test_invalid_instances_are_not_valid  s2    <</88BCr-   c                z    | j                  t               t               i      j                  t                      y )N)r   )r)   r   validater*   s    r   (test_non_existent_properties_are_ignoredz;ValidatorTestMixin.test_non_existent_properties_are_ignored  s'    &(+,55vx5Hr-   c                v    | j                  | j                  i       j                  t        j                         y r/   )r  r)   r  r   r  r*   s    r   .test_it_creates_a_ref_resolver_if_not_providedzAValidatorTestMixin.test_it_creates_a_ref_resolver_if_not_provided  s+    NN2''""	
r-   c                    dddi}}t        j                  di ||i      }| j                  d|i|      }| j                  t        j
                        5  |j                  d        d d d        y # 1 sw Y   y xY w)NsomeCoolRefr   r   rl   r  r  r  )r   r  r)   r  r   r   r  )r+   r  r   r  r   s        r   #test_it_delegates_to_a_ref_resolverz6ValidatorTestMixin.test_it_delegates_to_a_ref_resolver  su    #fi%8V))"bfFNNFC=8ND	z99: 	%t$	% 	% 	%s   A00A9c                   dddi}}t        j                  di ||i      }| j                  ||      }|j                  ddi      }| j                  ddi|      }| j	                  ||       | j                  ||       y )	Nr  r   r   rl   r  r  r   r   )r   r  r)   evolver%   assertNotEqual)r+   r  r   r  r   r   expecteds          r   test_evolvezValidatorTestMixin.test_evolve  s    #fi%8V))"bfFNN6HN=	vx&89>>68"4x>Hh'C+r-   c                @   t         j                   G d d| j                               } |i d      }| j                  |j                  g d       |j                  ddi      }| j                  |j                  g d       | j                  |j                  d       y	)
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                  Z    e Zd Z ej                  d       Z ej                  d      Zy):ValidatorTestMixin.test_evolve_with_subclass.<locals>.OhNoc                 
    g dS )Nr   r   r   r-   r   rq   zCValidatorTestMixin.test_evolve_with_subclass.<locals>.OhNo.<lambda>  s    ) r-   )factory%   defaultN)rS   r   rT   attribr   _barr   r-   r   OhNor    s#    $''"34C4772&Dr-   r  r   )r   r   r   r   r  N)r  rp   r)   r%   r   r  r  )r+   r  r   r   s       r   test_evolve_with_subclassz,ValidatorTestMixin.test_evolve_with_subclass  s     
	'4>> 	' 
	' $		2vy&9:),2&r-   c                      G  fddt               } |       }ddi} j                  t        j                        5   j	                  ||      j                  d       ddd       y# 1 sw Y   yxY w)zb
        Legacy RefResolvers support only the context manager form of
        resolution.
        c                  "    e Zd Ze fd       Zy)XValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver.<locals>.LegacyRefResolverc              3  >   K   j                  |d       ddi y w)Nthe refr   r   r%   )thisr  r+   s     r   	resolvingzbValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver.<locals>.LegacyRefResolver.resolving  s"       i0y))s   N)rS   r   rT   r   r  r*   s   r   LegacyRefResolverr     s    * *r-   r  r  r  r  N)r   r  r   r   r)   r  )r+   r  r  r   s   `   r   *test_it_delegates_to_a_legacy_ref_resolverz=ValidatorTestMixin.test_it_delegates_to_a_legacy_ref_resolver  sk    	* 	* %&)$z99: 	ENN6HN5>>tD	E 	E 	Es   #A))A2c                d    | j                  | j                  i       j                  dd             y )Nr   r   )r   r)   r   r*   s    r   #test_is_type_is_true_for_valid_typez6ValidatorTestMixin.test_is_type_is_true_for_valid_type  s$    r*225(CDr-   c                d    | j                  | j                  i       j                  dd             y )Nr   r   rh  r)   r   r*   s    r   &test_is_type_is_false_for_invalid_typez9ValidatorTestMixin.test_is_type_is_false_for_invalid_type  s&    +33E7CDr-   c                    | j                  | j                  i       j                  dd             | j                  | j                  i       j                  dd             y )NTr   r   r  r*   s    r   ,test_is_type_evades_bool_inheriting_from_intz?ValidatorTestMixin.test_is_type_evades_bool_inheriting_from_int  sJ    +33D)DE+33D(CDr-   c                   dddii}t        j                  | j                  | j                  j                  j	                  dd             } ||      }|j                  ddt        d      t        d      z  g       d	i g d
d g}| j                  |j                  |      D cg c]  }|j                   c}|       y c c}w )Nr   r   r   c                ^    t        |t        t        t        f      xr t        |t               S r/   )
isinstanceintfloatr   boolr   r   s     r   rq   zGValidatorTestMixin.test_it_can_validate_with_decimals.<locals>.<lambda>  s,    zC0( (2$UD11 r-   r#   rA   g?rz  r   T)
r   r   r)   r2   redefiner  r   r%   r:   r   )r+   r   r)   r   r  r  s         r   "test_it_can_validate_with_decimalsz5ValidatorTestMixin.test_it_can_validate_with_decimals  s    FH-.%%NN44==2
	 f%	AsGAJ$;<="b$-)2)>)>w)GHU^^H	
Hs   #B?c                `    | j                  ddit                     }|j                  d       y )Nr   carrotr   bugs)r)   r   r  r+   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  s1    NNx  # 
	 	6"r-   c                \    | j                  i       }| j                  |j                         y r/   )r)   r]  r   r  s     r   ,test_it_does_not_validate_formats_by_defaultz?ValidatorTestMixin.test_it_does_not_validate_formats_by_default  s$    NN2&	)223r-   c                    t               }t        d      |j                  dt               fd       } j                  ddi|      }|j	                  d        j                  t        j                        5 }|j	                  d       d d d         j                  j                  j                         y # 1 sw Y   0xY w)	NzBad!r   )raisesc                `    | dk(  ry| dk(  rj                  dj                  |              y )NgoodTbadz What is {}? [Baby Don't Hurt Me])r   r   )r   r%  r+   s    r   checkzTValidatorTestMixin.test_it_validates_formats_if_a_checker_is_provided.<locals>.check  s1    %			<CCEJKr-   r   r  r$  r%  )r   
ValueErrorr   r)   r  r  r   r   rg  	exceptioncause)r+   r   r&  r   cmr%  s   `    @r   2test_it_validates_formats_if_a_checker_is_providedzEValidatorTestMixin.test_it_validates_formats_if_a_checker_is_provided  s    / 	j	1	L 
2	L NNug # 
	 	6"z99: 	&bu%	& 	bll((#.		& 	&s   =B>>Cc                    t               }d|gi}t        j                  | j                  | j                  j                  j                  |d             } ||      j                  d       y )Nr   c                "    t        |t              S r/   r  r  r  s     r   rq   z@ValidatorTestMixin.test_non_string_custom_type.<locals>.<lambda>6  s    z%'= r-   r  ru  )r   r   r   r)   r2   r  r  )r+   non_string_typer   Crazys       r   test_non_string_custom_typez.ValidatorTestMixin.test_non_string_custom_type/  s_     (?+,!!NN44===
 	fr"r-   c                t   t        j                  | j                  | j                  j                  j	                  dd             }| j                  t        j                        5 } |ddi      j                  d       ddd       | j                  dt        j                               y# 1 sw Y   /xY w)	zh
        A tuple instance properly formats validation errors for uniqueItems.

        See #224
        r   c                "    t        |t              S r/   )r  tupler  s     r   rq   zNValidatorTestMixin.test_it_properly_formats_tuples_in_errors.<locals>.<lambda>E  s    z%'? r-   r  uniqueItemsT)rA   rA   Nz(1, 1) has non-unique elements)r   r   r)   r2   r  r  r   r   r  rv   strr(  )r+   TupleValidatorrj  s      r   )test_it_properly_formats_tuples_in_errorsz<ValidatorTestMixin.test_it_properly_formats_tuples_in_errors;  s     $**NN44==?
 z99: 	CaM401::6B	C6AKK8HI	C 	Cs   &B..B7c                   ddd}t        dd      t        j                  | 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 ]  }|j                  |        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 ];  }| j                  t        j                        5  |j                  |       ddd       = y# 1 sw Y   HxY w)zO
        Allow array to validate against another defined sequence type
        r   T)r   r5  	MyMappingza, bc                .    t        |t        t        f      S r/   )r  r9   r   r  s     r   rq   zBValidatorTestMixin.test_check_redefined_sequence.<locals>.<lambda>V  s    Je}5 r-   c                (    t        |t        f      S r/   )r  r'   )r   r   r:  s     r   rq   zBValidatorTestMixin.test_check_redefined_sequence.<locals>.<lambda>Y  s    Zi06 r-   )r   r   r  )r[   Nr  rl   TFr   r[   )r[   rA  r[   N)r   r   r   r)   r2   redefine_manyr   r  r  r   r   )r+   r   r)   r   valid_instancesr   invalid_instancesr:  s          @r   test_check_redefined_sequencez0ValidatorTestMixin.test_check_redefined_sequenceL  sY    "$7{F3	%%NN44BB		
	 f%	 ,-E7QC.!E7^UA3Z(UGnqc
|,w !"#s~&6%78E5'N#$eUA3ZL&9:sA	#u 56#qc
|,#ug/0
 #	#uaSz :;<#	#ueW~ >?@ 5w()5uaSz1B+CD!
& ( 	)Hx(	) /"E7UG$%E7^UE7^,UGnug/0w !"#w(8'9&:%;<E5'N#$eUE7^,<&=>sE"Ic5$9:#ug/0#ug/0
 #	#ueW~ >?@#	#ueW~ >?@ 5w()5ueW~1F+GH!
& * 	-H"":#=#=> -""8,- -	-- -s   L;;M	N)rS   r   rT   r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r   r+  r1  r8  r@  r   r-   r   r  r    sk    GCDI
%
,',E$EEE
*#4/0
#J"@-r-   r  c                      e Zd ZdZd Zd Z ej                   ed            d        Z	 ej                   ed            d        Z
y)AntiDraft6LeakMixinzN
    Make sure functionality from draft 6 doesn't leak backwards in time.
    c                    | j                  t        j                        5 }| j                  j	                  d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)NTzTrue is not of typer  r   r  r)   r   rv   r6  r(  r+   rj  s     r   test_True_is_not_a_schemaz-AntiDraft6LeakMixin.test_True_is_not_a_schema  sW    z556 	.!NN''-	.+S-=>	. 	.   A**A3c                    | j                  t        j                        5 }| j                  j	                  d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)NFzFalse is not of typerD  rE  s     r   test_False_is_not_a_schemaz.AntiDraft6LeakMixin.test_False_is_not_a_schema  sW    z556 	/!NN''.	/,c!++.>?	/ 	/rG  i  c                   t        j                  di       }| j                  t              5 }| j	                  d|      j                  d       d d d        | j                  j                  t        j                         y # 1 sw Y   4xY w)Nrl   Tr  r   
r   r  r  	Exceptionr)   r  assertNotIsInstancer(  r   r   r+   r  rj  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  sr    ))"b1y) 	AQNN4(N3<<R@	A  j.H.HI	A 	A   #BBc                   t        j                  di       }| j                  t              5 }| j	                  d|      j                  d       d d d        | j                  j                  t        j                         y # 1 sw Y   4xY w)Nrl   Fr  r   rK  rN  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  sr    ))"b1y) 	BQNN58N4==bA	B  j.H.HI	B 	BrP  N)rS   r   rT   __doc__rF  rI  unittestskipr   rO  rR  r   r-   r   rB  rB    s\    ?
@
 X]]3s8J J X]]3s8J Jr-   rB  c                  \    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y
)TestDraft3Validatortuple[dict, dict]r  r   r   r   c                \    | j                  ddi      }|j                  t                      y Nr   any)r)   r  r   r  s     r   #test_any_type_is_valid_for_type_anyz7TestDraft3Validator.test_any_type_is_valid_for_type_any  s$    NNFE?3	68$r-   c                P   t        j                  | j                  | j                  j                  j	                  dd             } |ddi      }|j                  d       | j                  t        j                        5  |j                  d       ddd       y# 1 sw Y   yxY w)z(
        Sigh, because why not.
        r[  c                "    t        |t              S r/   r.  r  s     r   rq   zBTestDraft3Validator.test_any_type_is_redefinable.<locals>.<lambda>  s    j.D r-   r  r   r   r   N)	r   r   r)   r2   r  r  r  r   r   )r+   r0  r   s      r   test_any_type_is_redefinablez0TestDraft3Validator.test_any_type_is_redefinable  s     !!NN44==D
 65/*	2z99: 	&u%	& 	& 	&s   BB%c                v    | j                  | j                  ddi      j                  t                            y rZ  )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@@JKr-   c                    | j                  | j                  i       j                  dd             | j                  | j                  ddi      j                  d             y )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  sH    r*224CD7@@FGr-   N)rS   r   rT   r   r   r)   r  __annotations__r  r\  r_  ra  rc  r   r-   r   rW  rW    sA    **I "BxE'y!5(G%&LHr-   rW  c                  D    e Zd ZU ej                  Zi i fZded<   ddidfZy)TestDraft4ValidatorrX  r  r   r   r   N)	rS   r   rT   r   r   r)   r  rd  r  r   r-   r   rf  rf    +    **I "BxE'y!5(Gr-   rf  c                  D    e Zd ZU ej                  Zi i fZded<   ddidfZy)TestDraft6ValidatorrX  r  r   r   r   N)	rS   r   rT   r   r   r)   r  rd  r  r   r-   r   ri  ri    rg  r-   ri  c                  D    e Zd ZU ej                  Zi i fZded<   ddidfZy)TestDraft7ValidatorrX  r  r   r   r   N)	rS   r   rT   r   r   r)   r  rd  r  r   r-   r   rk  rk    rg  r-   rk  c                  D    e Zd ZU ej                  Zi i fZded<   ddidfZy)TestDraft201909ValidatorrX  r  r   r   r   N)	rS   r   rT   r   Draft201909Validatorr)   r  rd  r  r   r-   r   rm  rm    +    //I "BxE'y!5(Gr-   rm  c                  D    e Zd ZU ej                  Zi i fZded<   ddidfZy)TestDraft202012ValidatorrX  r  r   r   r   N)	rS   r   rT   r   r  r)   r  rd  r  r   r-   r   rq  rq    ro  r-   rq  c                  f    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y)TestValidatorForc                    ddi}| j                  t        j                  |      t        j                         ddi}| j                  t        j                  |      t        j                         y )N$schema&http://json-schema.org/draft-03/schema'http://json-schema.org/draft-03/schema#)rg  r   validator_forr   r5   s     r   test_draft_3zTestValidatorFor.test_draft_3  `    EF$$V,&&	

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

 LM$$V,++	
r-   c                    ddi}| j                  t        j                  |      t        j                         ddi}| j                  t        j                  |      t        j                         y )Nru  ,https://json-schema.org/draft/2020-12/schema-https://json-schema.org/draft/2020-12/schema#)rg  r   rx  r  r5   s     r   test_draft_202012z"TestValidatorFor.test_draft_202012-  r  r-   c                j    | j                  t        j                  d      t        j                         y )NTrg  r   rx  r   r*   s    r   	test_TruezTestValidatorFor.test_True:  s%    $$T*&&	
r-   c                j    | j                  t        j                  d      t        j                         y r   r  r*   s    r   
test_FalsezTestValidatorFor.test_False@  s%    $$U+&&	
r-   c                    t        j                  ddidd       }ddi}| j                  t        j                  |      |       y )Nre   ri   12c                &    | j                  dd      S rk   rm   ro   s    r   rq   z8TestValidatorFor.test_custom_validator.<locals>.<lambda>J  rr   r-   rs   ru  r   r(   rg  rx  r+   r)   r   s      r   test_custom_validatorz&TestValidatorFor.test_custom_validatorF  sK    %%/0+
	
 -.$$V,	
r-   c                    t        j                  ddid      }ddi}| j                  t        j                  |      |       y )Nr!   r|   13rO   ru  r  r  s      r   test_custom_validator_draft6z-TestValidatorFor.test_custom_validator_draft6R  sH    %% 12
	 ./$$V,	
r-   c                j    | j                  t        j                  i       t        j                         y r/   r  r*   s    r   %test_validator_for_jsonschema_defaultz6TestValidatorFor.test_validator_for_jsonschema_default]  s!    j..r2J4N4NOr-   c                R    | j                  t        j                  i d       d        y )Nr  )rg  r   rx  r*   s    r   !test_validator_for_custom_defaultz2TestValidatorFor.test_validator_for_custom_default`  s    j..r4@$Gr-   c                   | j                  t              5 }t        j                  ddi       d d d        | j	                  j
                  t               | j	                  t        |j                        d       y # 1 sw Y   OxY w)Nru  unknownSchemar  zThe metaschema specified by $schema was not found. Using the latest draft to validate, but this will raise an error in the future.)	assertWarnsDeprecationWarningr   rx  r%   filename__file__r6  warning)r+   r*  s     r   1test_warns_if_meta_schema_specified_was_not_foundzBTestValidatorFor.test_warns_if_meta_schema_specified_was_not_foundc  ss    01 	JR$$Y,HI	J 	h/

O&	
		J 	Js   A==Bc                    t        j                  d      5 }t        j                  d       t        j                  i i        d d d        | j                         y # 1 sw Y   xY w)NT)recordalways)r   r  )warningscatch_warningssimplefilterr   rx  rh  )r+   ws     r   0test_does_not_warn_if_meta_schema_is_unspecifiedzATestValidatorFor.test_does_not_warn_if_meta_schema_is_unspecifiedo  sU    $$D1 	<Q!!(+$$B;	< 		< 	<s   -AA'c                l    ddit               }}| j                  t        j                  ||      |       y )Nru  zmailto:foo@example.com)r   rg  r   rx  )r+   r   r  s      r   -test_validator_for_custom_default_with_schemaz>TestValidatorFor.test_validator_for_custom_default_with_schemau  s.    $&>?j..vw?Ir-   N)rS   r   rT   ry  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r-   r   rs  rs    sP    









	
PH

Jr-   rs  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y)TestValidatec                    g }t         j                  j                  |d|j                        5  t	        j
                  i |       d d d        | j                  ||g       y # 1 sw Y   xY w)Nr   )r
   patchr   appendr   r  r%   )r+   r   r)   results       r   
assertUseszTestValidate.assertUses{  sX    ZZy.&--H 	,F+	,&*	, 	,s   A!!A*c                    | j                  ddit        j                         | j                  ddit        j                         y )Nru  rw  r   r)   rv  )r  r   r   r*   s    r   test_draft3_validator_is_chosenz,TestValidate.test_draft3_validator_is_chosen  J    HI 00 	 	

 	GH 00 	 	
r-   c                    | j                  ddit        j                         | j                  ddit        j                         y )Nru  r}  r  r|  )r  r   r   r*   s    r   test_draft4_validator_is_chosenz,TestValidate.test_draft4_validator_is_chosen  r  r-   c                    | j                  ddit        j                         | j                  ddit        j                         y )Nru  r  r  r  )r  r   r   r*   s    r   test_draft6_validator_is_chosenz,TestValidate.test_draft6_validator_is_chosen  r  r-   c                    | j                  ddit        j                         | j                  ddit        j                         y )Nru  r  r  r  )r  r   r   r*   s    r   test_draft7_validator_is_chosenz,TestValidate.test_draft7_validator_is_chosen  r  r-   c                    | j                  ddit        j                         | j                  ddit        j                         y )Nru  r  r  r  r  r   r  r*   s    r   $test_draft202012_validator_is_chosenz1TestValidate.test_draft202012_validator_is_chosen  sR    J !55	 	 	
 	I !55	 	 	
r-   c                F    | j                  i t        j                         y )Nr  r  r*   s    r   )test_draft202012_validator_is_the_defaultz6TestValidate.test_draft202012_validator_is_the_default  s    rZ-L-LMr-   c                    | j                  t        j                        5 }t        j                  dddi       d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)Nr   r   r   z1(?s)Failed validating '.*' in schema.*On instance)r  r   r   r   r  assertRegexr6  r(  rE  s     r   test_validation_error_messagez*TestValidate.test_validation_error_message  s_    z99: 	8aVX$67	8?	
	8 	8   A''A0c                    | j                  t        j                        5 }t        j                  dddi       d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)Nr   r   z3(?s)Failed validating '.*' in metaschema.*On schema)r  r   r  r   r  r  r6  r(  rE  s     r   test_schema_error_messagez&TestValidate.test_schema_error_message  s^    z556 	2!VRL1	2A	
	2 	2r  c                    ddddddigi}| j                  t        j                        5 }t        j                  d|       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)	NrF  r   r[  r  r   r   r   z!12 is less than the minimum of 20)r  r   r   r   r  rv   r6  r(  )r+   r   rj  s      r   test_it_uses_best_matchz$TestValidate.test_it_uses_best_match  sv    !b1!
 z99: 	,aF+	,93q{{;KL	, 	,s   A00A9N)rS   r   rT   r  r  r  r  r  r  r  r  r  r  r   r-   r   r  r  z  s6    +	
	
	
	

N

	Mr-   r  c                  v    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y)TestRefResolverrl   zfoo://storedstoredr   c                    i | _         | j                  | j                  i| _        t	        j
                  | j                  | j                   | j                        | _        y r/   )referrer
stored_uristored_schemar  r   r  base_urir  r*   s    r   r,   zTestRefResolver.setUp  sD    oot'9'9:
"..MM4==$**
r-   c                   t         j                  j                  d   }t        j                  j                  | j                  d      5 }| j                  j                  |      5 }	 d d d        d d d        | j                  t         j                  j                         | j                  j                         y # 1 sw Y   WxY w# 1 sw Y   [xY w)Nre   resolve_remote)r   r   r1   r
   r  r   r  r  r%   rh  called)r+   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    ((44T:ZZt}}.>? 	7((- 	 	:#=#=#I#IJ( 	 	s$   C$B<&C<C	CCc                    d}dt               i| j                  d<   | j                  j                  |      5 }| j	                  || j                  d   d          d d d        y # 1 sw Y   y xY w)Nz#/properties/foor   rq  )r   r  r  r  r%   )r+   r  r  s      r   test_it_resolves_local_refsz+TestRefResolver.test_it_resolves_local_refs  sg     ',fh&7l#]]$$S) 	KXXt}}\'B5'IJ	K 	K 	Ks   #A##A,c                B   dddid}t         j                  j                  |d       }|j                  d      5 }| j	                  ||d          d d d        |j                  d	      5 }| j	                  ||d          d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)
Nzhttp://bar/schema#r   r   )re   r[   c                &    | j                  dd      S rk   rm   r  s    r   rq   zETestRefResolver.test_it_resolves_local_refs_with_id.<locals>.<lambda>      D"!5 r-   rt   z#/ar[   zhttp://bar/schema#/a)r   r  from_schemar  r%   r+   r   r  r  s       r   #test_it_resolves_local_refs_with_idz3TestRefResolver.test_it_resolves_local_refs_with_id  s    ,E5>B))555 6 
 & 	4(Xvc{3	4 67 	48Xvc{3	4 	4	4 	4	4 	4s   B	*B	BBc                j   | j                   j                  | j                        5 }| j                  || j                         d d d        ddi| j                   j
                  d<   | j                   j                  d      5 }| j                  |d       d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)Nr   r   
cached_refzcached_ref#/foo)r  r  r  rg  r  r  r%   )r+   r  s     r   test_it_retrieves_stored_refsz-TestRefResolver.test_it_retrieves_stored_refs  s    ]]$$T__5 	8MM(D$6$67	8 .3BKL)]]$$%67 	+8Xr*	+ 	+		8 	8	+ 	+s   BB)B&)B2c                l   d}ddi}dt         j                  v r<| j                  t         j                  j                  dt         j                  d          t	        d|i      t         j                  d<   | j
                  j                  |      5 }| j                  |d       d d d        y # 1 sw Y   y xY w)Nhttp://bar#bazr+  r   requests
http://bar)sysmodulesr$   __setitem__ReallyFakeRequestsr  r  r%   )r+   r  r   r  s       r   ,test_it_retrieves_unstored_refs_via_requestsz<TestRefResolver.test_it_retrieves_unstored_refs_via_requests	  s    $OO''S[[5L #5lF5K"LJ]]$$S) 	+XXr*	+ 	+ 	+s   B**B3c                    d}ddidt         j                  v r< j                  t         j                  j                  dt         j                  d          d t         j                  d<   t         fd       } j                  t
        t        dt        j                         |t        _         j                  j                  |      5 }	 d d d         j                  d       y # 1 sw Y   xY w)Nr  r+  r   r  c              3     K   j                  | d       t        t        j                        j	                  d             y w)Nr  utf8)r%   r   jsondumpsencode)urlr   r+   s    r   fake_urlopenzQTestRefResolver.test_it_retrieves_unstored_refs_via_urlopen.<locals>.fake_urlopen   s6     S,/$**V,33F;<<s   AAurlopen)r  r  r$   r  r   setattrr   r  r  r  r%   )r+   r  r  r  r   s   `   @r   +test_it_retrieves_unstored_refs_via_urlopenz;TestRefResolver.test_it_retrieves_unstored_refs_via_urlopen  s    $OO''S[[5L #'J		= 
	= 	Y
8J8JK)
]]$$S) 	X	2&	 	s   	C&&C/c                   t        j                  dd      5 }| j                  t        j                  |j
                         t        j                  ddi|       d d d        dj                  t        j
                              }| j                  j                  |      5 }| j                  |d       d d d        y # 1 sw Y   dxY w# 1 sw Y   y xY w)NFwt)deletemoder   r   zfile://{}#foo)tempfileNamedTemporaryFiler$   osremover   r  dumpr   r   r  r  r%   )r+   tempfr  r  s       r   (test_it_retrieves_local_refs_via_urlopenz8TestRefResolver.test_it_retrieves_local_refs_via_urlopen,  s    ((DA 	-UOOBIIuzz2IIuene,	- $$\%**%=>]]$$S) 	.XXu-	. 	.	- 	-
	. 	.s   AB>"C
>C
Cc                   ddi}t         j                  j                  |d       }| j                  |j                  d       | j                  |j
                  d       |j                  d      5 }| j                  ||       d d d        |j                  d      5 }| j                  ||       d d d        |j                  d      5 }| j                  ||       d d d        |j                  d      5 }| j                  ||       d d d        y # 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   NxY w# 1 sw Y   y xY w)Nre   r   c                &    | j                  dd      S rk   rm   r  s    r   rq   zPTestRefResolver.test_it_can_construct_a_base_uri_from_a_schema.<locals>.<lambda>9  r  r-   r  rl   #zfoo#r   r  r  r%   r  resolution_scoper  r  s       r   .test_it_can_construct_a_base_uri_from_a_schemaz>TestRefResolver.test_it_can_construct_a_base_uri_from_a_schema5  s3   ))555 6 
 	**E222E:# 	/xXv.	/$ 	/Xv.	/& 	/(Xv.	/' 	/8Xv.	/ 	/	/ 	/	/ 	/	/ 	/	/ 	/s0   0DDD(4D4DD%(D14D=c                   i }t         j                  j                  |      }| j                  |j                  d       | j                  |j
                  d       |j                  d      5 }| j                  ||       d d d        |j                  d      5 }| j                  ||       d d d        y # 1 sw Y   6xY w# 1 sw Y   y xY w)Nrl   r  r  r  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_idF  s    ))55f=**B/22B7# 	/xXv.	/$ 	/Xv.	/ 	/	/ 	/	/ 	/s   +B3B?3B<?Cc                      fd}ddidt        j                  di d|i      }|j                        5 } j                  |       d d d        y # 1 sw Y   y xY w)Nc                ,    j                  |        S r/   r  )r  r  r   r+   s    r   handlerz@TestRefResolver.test_custom_uri_scheme_handlers.<locals>.handlerQ  s    S#&Mr-   r   r   	foo://barrl   handlers)r   r  r  r%   )r+   r  r  r  r  r   s   `   @@r   test_custom_uri_scheme_handlersz/TestRefResolver.test_custom_uri_scheme_handlersP  sf    	 ))"bE7;KL$ 	/Xv.	/ 	/ 	/s   AA!c                     t               g fd}d}t        j                  di dd|i      }|j                  |      5  	 d d d        |j                  |      5  	 d d d        y # 1 sw Y   %xY w# 1 sw Y   y xY w)Nc                f    	 j                         S # t        $ r j                  d       Y y w xY w)Nz#Response must not have been cached!rR   
IndexErrorr   r  responser+   s    r   r  z5TestRefResolver.test_cache_remote_on.<locals>.handler^  s3    A||~% A		?@A    00r  rl   Tr   cache_remoter  r   r   r  r  r+   r  r  r  r  s   `   @r   test_cache_remote_onz$TestRefResolver.test_cache_remote_on[  s    H:	A ))0@
 $ 		$ 		 		 		 	s   A(A4(A14A=c                     t               g fd}d}t        j                  di dd|i      }|j                  |      5  	 d d d        y # 1 sw Y   y xY w)Nc                f    	 j                         S # t        $ r j                  d       Y y w xY w)NzHandler called twice!r  r  s    r   r  z6TestRefResolver.test_cache_remote_off.<locals>.handlerp  s0    3||~% 3		123r  r  rl   Fr   r  r!  r"  s   `   @r   test_cache_remote_offz%TestRefResolver.test_cache_remote_offm  s^    H:	3 ))%1A
 $ 		 	 	s   AAc                   t        d      fd}d}t        j                  di d|i      }| j                  t        j
                        5 }|j                  |      5  | j                  d       d d d        d d d        | j                  j                  t	        j
                               y # 1 sw Y   AxY w# 1 sw Y   ExY w)NzOh no! What's this?c                    r/   r   )r  r  s    r   r  zTTestRefResolver.test_if_you_give_it_junk_you_get_a_resolution_error.<locals>.handler  s    Kr-   r  rl   r   r  zShouldn't get this far!)
r'  r   r  r  r   RefResolutionErrorr  r   r%   r(  )r+   r  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	 ))"bE7;KLz<<= 	5##C( 5		345	5 	
(E(Ee(LM5 5	5 	5s$   B=B11B=1B:	6B==Cc                "   t        j                  di       }|j                          | j                  t        j
                        5 }|j                          d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nrl   zFailed to pop the scope)	r   r  	pop_scoper  r   r)  rv   r6  r(  )r+   r  excs      r   .test_helpful_error_message_on_failed_pop_scopez>TestRefResolver.test_helpful_error_message_on_failed_pop_scope  so    ))"b1z<<= 	! 	!/S]]1CD	! 	!s   BBN)rS   r   rT   r  r  r  r,   r  r  r  r  r  r  r  r  r  r  r#  r&  r+  r/  r   r-   r   r  r    sd    HJx(M
)K	4++',./"/	/$ NEr-   r  c                "    d }t        | |      S )Nc                    | j                   D cg c]  }t        |       c}| j                  D cg c]  }t        |       c}fS c c}w c c}w r/   )r_  r6  r@   )r  rj  s     r   keyzsorted_errors.<locals>.key  s@    "ZZ(SV("../SV/
 	
(/s
   AA)r2  )sorted)r   r2  s     r   rf  rf    s    

 &c""r-   c                  4    e Zd Z ej                         Zd Zy)r  c                    | j                   j                  |      }|t        dt        |      z         t	        t        j                  |            S )NzUnknown URL: )
_responsesrn   r'  rX   _ReallyFakeJSONResponser  r  )r+   r  r  s      r   rn   zReallyFakeRequests.get  sC    ??&&s+;_tCy899&tzz(';<<r-   N)rS   r   rT   r  r  r6  rn   r   r-   r   r  r    s     J=r-   r  c                  4    e Zd Z ej                         Zd Zy)r7  c                @    t        j                  | j                        S r/   )r  loads	_responser*   s    r   r  z_ReallyFakeJSONResponse.json  s    zz$..))r-   N)rS   r   rT   r  r  r;  r  r   r-   r   r7  r7    s     	I*r-   r7  )3
__future__r   collectionsr   r   
contextlibr   decimalr   ior   rT  r	   r
   urllib.requestr   r  r  r  r  r  r  
jsonschemar   r   r   r   r   jsonschema.tests._helpersr   r   r   r   rX  r   r  r  rB  rW  rf  ri  rk  rm  rq  rs  r  r  rf  rp   r  r7  r   r-   r   <module>rD     sy   " ) %   # '  	 
      *1PI( PIfzC( zCzL
 L
^86 88o--v o-dJ& J<H-/A8 H@)-/A8 )),h )),h ))18 ))18 )LJx LJ^^M8 ^MBtEh tEn# = = = *f * *r-   