
    {g~                       S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJrJr  SSKrSSKrSSKrSSKrSSKrSSKrSS	KJrJr  SS
KJr  SSKr\(       a  SSKrSSKJr  SSKr\R>                  " S5      r S r!\ " S S5      5       r"\ " S S5      5       r#\ " S S5      5       r$\" SS9 " S S5      5       r%S r&g)z=
Python representations of the JSON Schema Test Suite tests.
    )annotations)IterableMapping)suppress)partial)Path)TYPE_CHECKINGAnyN)fieldfrozen)Registry)_VALIDATORSz[\W\- ]+c                     [         R                  R                  S5      n U b  [        U 5      $ [        [        R
                  5      R                  R                  S-  n U R                  5       (       d  [        S5      eU $ )NJSON_SCHEMA_TEST_SUITEjsonzCan't find the JSON-Schema-Test-Suite directory. Set the 'JSON_SCHEMA_TEST_SUITE' environment variable or run the tests from alongside a checkout of the suite.)	osenvirongetr   
jsonschema__file__parentis_dir
ValueError)roots    9/usr/lib/python3/dist-packages/jsonschema/tests/_suite.py_find_suiter      sj    ::>>23DDz
##$++22V;D;;== 
 	
 K    c                  \    \ rS rSr% \" \S9rS\S'   \" SS9rS\S'   S	 r	SS
 jr
SS jrSrg)Suite1   )factoryr   _rootF)init%referencing.jsonschema.SchemaRegistry_remotesc           	        U R                   R                  SS5      n[        R                  [	        U5      S/n[
        R                  " U5      R                  S5      n[        R                  " U5      nSnSn[        5       R                  U[        R                  R                  R                  UR!                  U5      S94U[        R                  R"                  R                  UR!                  U5      S94/5      R%                  UR'                  5       [        R                  R(                  S9n[*        R-                  U S	U5        g )
Nbinjsonschema_suiteremotesutf-8z?http://localhost:1234/locationIndependentIdentifierPre2019.jsonz>http://localhost:1234/locationIndependentIdentifierDraft4.json)contents)default_specificationr%   )r"   joinpathsys
executablestr
subprocesscheck_outputdecoder   loadsr   with_resourcesreferencingr   DRAFT7create_resourcepopDRAFT4with_contentsitemsDRAFT202012object__setattr__)selfr(   argvr)   	resourceslili4registrys           r   __attrs_post_init__Suite.__attrs_post_init__7   s'   ::..u6HI$4 5yA))$/66w?JJw'	NN:,, **11AA!*r!2 B  **11AA!*s!3 B 
 -OO"-"8"8"D"D  
 	& 	4X6r   c                z    [         R                  " 5        H"  u  p#U R                  US9R                  UUS9  M$     g )N)name)runner	Validator)r   r<   version	benchmark)r@   rJ   rI   rK   s       r   rM   Suite.benchmarkV   s;    *002ODLLdL#--# .   3r   c                L    [        UU R                  S-  U-  U R                  S9$ )Ntests)rI   pathr)   )Versionr"   r%   r@   rI   s     r   rL   Suite.version]   s*    g%,MM
 	
r    NrJ   zpyperf.Runner)returnrR   )__name__
__module____qualname____firstlineno__r   r   r"   __annotations__r%   rF   rM   rL   __static_attributes__rU   r   r   r   r   1   s2     ,E4,6;6GH3G7>
r   r   c                  h    \ rS rSr% S\S'   S\S'   S\S'   S rSS	 jrSS
 jrSS jrS r	SS jr
Srg)rR   e   r   _pathr$   r%   r0   rI   c                V    U R                  5        H  nUR                  " S0 UD6  M     g NrU   )casesrM   )r@   kwargscases      r   rM   Version.benchmarkm   s!    JJLDNN$V$ !r   c                R    U R                  U R                  R                  S5      S9$ )Nz*.jsonpaths	_cases_inr`   globr@   s    r   rc   Version.casesq   s     ~~DJJOOH$=~>>r   c                R    U R                  U R                  R                  S5      S9$ )Nzoptional/format/*.jsonrh   rj   rm   s    r   format_casesVersion.format_casest   s!    ~~DJJOO4L$M~NNr   c                H    U R                  U R                  S-  U S3-  /S9$ )Noptionalz.jsonrh   )rk   r`   rS   s     r   optional_cases_ofVersion.optional_cases_ofw   s*    ~~TZZ*%<$u~%M$N~OOr   c                  ^ TR                  SSU R                  R                  5       R                  SS5      -   5      nU4S jU 5        Vs0 s H  nUR                  U_M     nn[        U[        R                  4U5      n[        [        5         [        5       Ul        S S S 5        U$ s  snf ! , (       d  f       U$ = f)NrI   Test- c              3     >#    U  H5  nU  H+  nUR                     H  nUR                  " S0 TD6v   M     M-     M7     g 7frb   )rP   to_unittest_method).0groupre   testrd   s       r   	<genexpr>/Version.to_unittest_testcase.<locals>.<genexpr>~   sF      #E!D JJD ''1&1 ' 2! 2#s   =A )r9   rI   titlereplacerX   typeunittestTestCaser   	Exception)_someone_save_us_the_module_of_the_callerrY   )r@   groupsrd   rI   methodmethodsclss     `    r   to_unittest_testcaseVersion.to_unittest_testcasez   s    zz&&499??+<+D+DS"+M"MN#
 OOV# 	 
 4(++-w7
 i FHCN ! 
#
 !  
s   B+B00
B?c           	   #     #    U HY  n[         R                  " UR                  SS95       H/  n[        R	                  UU UR
                  U R                  S9v   M1     M[     g 7f)Nr*   )encoding)rL   subjectr)   )r   r4   	read_text_Case	from_dictstemr%   )r@   ri   rQ   re   s       r   rk   Version._cases_in   sX     D

4>>7>#CDoo  II MM	 &   E s   A!A#rU   N)rW   Iterable[_Case])rI   r0   rW   r   )ri   zIterable[Path]rW   r   )rX   rY   rZ   r[   r\   rM   rc   rp   rt   r   rk   r]   rU   r   r   rR   rR   e   s4     K33
I%?OP*r   rR   c                  p    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   SrS\S'   \S 5       rSS jrSr	g)r      rR   rL   r0   r   descriptionMapping[str, Any] | boolschemazlist[_Test]rP   N
str | Nonecommentc                    UR                  U5        UR                  S5       Vs/ s H   n[        SUS   US   US   US   US.UD6PM"     nnU " SSU0UD6$ s  snf )NrP   rL   r   r   r   )rL   r   case_descriptionr   r)   rU   )updater9   _Test)r   datar)   rd   r~   rP   s         r   r   _Case.from_dict   s    F ((7+	
 ,$  YY!%m!4H~  , 	 	
 ''$''	
s   'Ac           	         U R                    H3  nUR                  UR                  [        UR                  40 UD65        M5     g N)rP   
bench_funcfully_qualified_namer   validate_ignoring_errors)r@   rJ   rd   r~   s       r   rM   _Case.benchmark   s:    JJD))55@@ r   rU   rV   )
rX   rY   rZ   r[   r\   r   classmethodr   rM   r]   rU   r   r   r   r      sB     L$$GZ( (r   r   F)reprc                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   SrS\S'   S r\S 5       rS 4S jr	S r
S rSrg)r      rR   rL   r0   r   r   r   r
   r   r   r   boolvalidr$   r%   Nr   r   c                "    SU R                    S3$ )Nz<Test >)r   rm   s    r   __repr___Test.__repr__   s    112!44r   c                    SR                  U R                  R                  U R                  U R                  U R
                  /5      $ )Nz > )joinrL   rI   r   r   r   rm   s    r   r   _Test.fully_qualified_name   s>    zz!!%%  	
 	
r   c                    g r   rU   )r~   s    r   <lambda>_Test.<lambda>   s    4r   c           	     <  ^ ^ T R                   (       a  UU 4S jnOUU 4S jnSR                  S[        R                  ST R                  5      [        R                  ST R
                  5      [        R                  ST R                  5      /5      Ul        U" T 5      nUb$  [        R                  R                  SS5      S:w  a  U$ [        R                  R                  SS5      S:w  a  [        R                  " U5      $ [        R                  " U5      " U5      $ )Nc                *   > TR                   " S0 TD6  g rb   )validatethisrd   r@   s    r   fn$_Test.to_unittest_method.<locals>.fn   s    ''r   c                   > U R                  [        R                  5         TR                  " S0 TD6  S S S 5        g ! , (       d  f       g = frb   )assertRaisesr   ValidationErrorr   r   s    r   r   r      s3    &&z'A'ABMM+F+ CBBs	   =
A_r~   JSON_SCHEMA_DEBUG0JSON_SCHEMA_EXPECTED_FAILURES)r   r   _DELIMITERSsubr   r   r   rX   r   r   r   r   expectedFailureskip)r@   r   rd   r   reasons   ` `  r   r{   _Test.to_unittest_method   s    ::(, hhT\\2T%:%:;T%5%56	
 d>RZZ^^,?ELIZZ^^;SASH++B//==(,,r   c                   UR                  U R                  5        U" SU R                  U R                  S.UD6n[        R                  R                  SS5      S:w  a
  [        5         UR                  U R                  S9  g )N)r   rE   r   r   )instancerU   )	check_schemar   r%   r   r   r   
breakpointr   r   )r@   rK   rd   	validators       r   r   _Test.validate   so    t{{+ 
;;]]
 
	
 ::>>-s3s:LDII.r   c                    [        [        R                  5         U R                  US9  S S S 5        g ! , (       d  f       g = f)N)rK   )r   r   r   r   )r@   rK   s     r   r   _Test.validate_ignoring_errors   s*    j001MMIM. 211s	   3
ArU   )rX   rY   rZ   r[   r\   r   r   propertyr   r{   r   r   r]   rU   r   r   r   r      sh     L
I$$K33GZ5 
 
 '8 -2	//r   r   c                 H    [         R                  " S5      R                  S   $ )ak  
The FQON of the module 2nd stack frames up from here.

This is intended to allow us to dynamically return test case classes that
are indistinguishable from being defined in the module that wants them.

Otherwise, trial will mis-print the FQON, and copy pasting it won't re-run
the class that really is running.

Save us all, this is all so so so so so terrible.
   rX   )r.   	_getframe	f_globalsrU   r   r   r   r     s     ==%%j11r   )'__doc__
__future__r   collections.abcr   r   
contextlibr   	functoolsr   pathlibr   typingr	   r
   r   r   rer1   r.   r   attrsr   r   r6   r   referencing.jsonschemapyperfjsonschema.validatorsr   r   compiler   r   r   rR   r   r   r   rU   r   r   <module>r      s    # -    %  	 	  
      - jj%$ 0
 0
 0
f 1 1 1h   B UE/ E/ E/P2r   