Ë
    ` Údq  ã                   ó@  — d Z ddlmZ ddlmZ ddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlZd„ Z ej                   d¬«       G d	„ d
e«      «       Z ej                   d¬«       G d„ de«      «       Z ej                   dd¬«       G d„ de«      «       Zd„ Zy)z=
Python representations of the JSON Schema Test Suite tests.
é    )Úpartial)ÚPathN)Ú_VALIDATORSc                  óô   — t         j                  j                  d«      } | �t        | «      S t        t        j
                  «      j                  j                  dz  } | j                  «       st        d«      ‚| S )NÚJSON_SCHEMA_TEST_SUITEÚjsonzŸCan'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      sh   € Ü�:‰:�>‰>Ð2Ó3€DØÐÜ�D‹zÐä”
×#Ñ#Ó$×+Ñ+×2Ñ2°VÑ;€DØ�;‰;Œ=Üð ó
ð 	
ð €Kó    T)Úhashc                   ód   — e Zd Z ej                   ej
                  e«      ¬«      Zd„ Zd„ Z	d„ Z
y)ÚSuite©Údefaultc                 óà   — | j                   j                  dd«      }t        j                  t        j
                  t        |«      dg«      }t        j                  |j                  d«      «      S )NÚbinÚjsonschema_suiteÚremotesúutf-8)
Ú_rootÚjoinpathÚ
subprocessÚcheck_outputÚsysÚ
executableÚstrr   ÚloadsÚdecode)Úselfr   r   s      r   Ú_remoteszSuite._remotes+   sX   € ØŸ:™:×.Ñ.¨uÐ6HÓIÐÜ×)Ñ)Ü�^‰^œSÐ!1Ó2°IÐ>ó
ˆô �z‰z˜'Ÿ.™.¨Ó1Ó2Ð2r   c                 ó‚   — t        j                  «       D ](  \  }}| j                  |¬«      j                  ||¬«       Œ* y )N)Úname)ÚrunnerÚ	Validator)r   ÚitemsÚversionÚ	benchmark)r(   r,   r+   r-   s       r   r0   zSuite.benchmark2   sB   € Ü*×0Ñ0Ó2ò 	‰OˆD�)Ø�L‰L˜dˆLÓ#×-Ñ-ØØ#ð .õ ñ	r   c                 ón   — t        || j                  j                  d|«      | j                  «       ¬«      S )NÚtests)r+   Úpathr   )ÚVersionr   r    r)   ©r(   r+   s     r   r/   zSuite.version9   s/   € ÜØØ—‘×$Ñ$ W¨dÓ3Ø—M‘M“Oô
ð 	
r   N)Ú__name__Ú
__module__Ú__qualname__ÚattrÚibÚFactoryr   r   r)   r0   r/   © r   r   r   r   &   s.   „ ð ˆD�G‰G˜L˜DŸL™L¨Ó5Ô6€Eò3òó
r   r   c                   ó–   — e Zd Z ej                  «       Z ej                  «       Z ej                  «       Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zy)r4   c           
      óœ   — | j                  «       D ]9  }|D ]2  }|j                  |j                  t        |j                  fi |¤Ž«       Œ4 Œ; y ©N)r2   Ú
bench_funcÚfully_qualified_namer   Úvalidate_ignoring_errors)r(   r,   ÚkwargsÚsuiteÚtests        r   r0   zVersion.benchmarkI   sP   € Ø—Z‘Z“\ò 	ˆEØò �Ø×!Ñ!Ø×-Ñ-Ü˜D×9Ñ9ÑD¸VÑDõññ	r   c                 óL   ‡ — ˆ fd„‰ j                   j                  d«      D «       S )Nc              3   ól   •K  — | ]+  }‰j                  |j                  d d |¬«      D ]  }|–— Œ Œ- y ­w©Néûÿÿÿ©Úsubjectr3   ©Ú	_tests_inr+   ©Ú.0ÚchildrE   r(   s      €r   ú	<genexpr>z Version.tests.<locals>.<genexpr>R   óL   øè ø€ ò 
àØŸ™ØŸ
™
 3 B˜Øð 'ó ò
ð ô ð
Øñ
ùó   ƒ14ú*.json)Ú_pathÚglob©r(   s   `r   r2   zVersion.testsQ   s"   ø€ ó
àŸ™Ÿ™¨Ó2ô
ð 	
r   c                 óp   ‡ — ‰ j                   j                  dd«      }ˆ fd„|j                  d«      D «       S )NÚoptionalÚformatc              3   ól   •K  — | ]+  }‰j                  |j                  d d |¬«      D ]  }|–— Œ Œ- y ­wrH   rL   rN   s      €r   rQ   z'Version.format_tests.<locals>.<genexpr>]   rR   rS   rT   )rU   r    rV   )r(   r3   s   ` r   Úformat_testszVersion.format_tests[   s4   ø€ Ø�z‰z×"Ñ" :¨xÓ8ˆó
àŸ™ 8Ó,ô
ð 	
r   c                 ób   — | j                  || j                  j                  d|dz   «      ¬«      S )NrY   z.jsonrJ   )rM   rU   r    r5   s     r   Úoptional_tests_ofzVersion.optional_tests_off   s3   € Ø�~‰~ØØ—‘×$Ñ$ Z°¸±Ó@ð ó 
ð 	
r   c                 ó~  — |j                  dd| j                  j                  «       j                  dd«      z   «      }|D ���ci c]-  }|D ]&  }|D ]  }|j                   |j
                  di |¤Ž“Œ! Œ( Œ/ }}}}t        |t        j                  f|«      }	 t        «       |_
        |S c c}}}w # t        $ r Y |S w xY w)Nr+   ÚTestú-Ú r<   )Úpopr+   ÚtitleÚreplaceÚmethod_nameÚto_unittest_methodÚtypeÚunittestÚTestCaseÚ)_someone_save_us_the_module_of_the_callerr7   Ú	Exception)	r(   ÚsuitesrC   r+   rD   r2   rE   ÚmethodsÚclss	            r   Úto_unittest_testcasezVersion.to_unittest_testcasel   sè   € Ø�z‰z˜& &¨4¯9©9¯?©?Ó+<×+DÑ+DÀSÈ"Ó+MÑ"MÓNˆð  ÷
ð 
àØò
ð Øò	
ð ð ×ÑÐ5˜d×5Ñ5Ñ?¸Ñ?Ñ?ð
Øð
Øð
ˆò 
ô �4œ(×+Ñ+Ð-¨wÓ7ˆð	ÜFÓHˆCŒNð ˆ
ùô!
øô ò 	ð àˆ
ð	ús   Á2B(ÂB/ Â/	B<Â;B<c              #   óŠ   ‡ ‡‡K  — t        j                  |j                  d¬«      «      D ]  Šˆˆ ˆfd„‰d   D «       –— Œ y ­w)Nr   )Úencodingc           
   3   ó`   •K  — | ]%  }t        d‰‰‰d    ‰d   ‰j                  dœ|¤Ž–— Œ' y­w)ÚdescriptionÚschema)r/   rK   Úcase_descriptionru   r   Nr<   )Ú_Testr)   )rO   rE   Úeachr(   rK   s     €€€r   rQ   z$Version._tests_in.<locals>.<genexpr>‚   sK   øè ø€ ò 	ð ô ð Ø Ø#Ø%)¨-Ñ%8Ø ™>Ø ŸM™Mñð õñ	ùs   ƒ+.r2   )r   r&   Ú	read_text)r(   rK   r3   rx   s   `` @r   rM   zVersion._tests_in€   sB   úè ø€ Ü—J‘J˜tŸ~™~°w˜~Ó?Ó@ò 
	ˆDõ	ð # 7™mô	ó 	ñ
	ùs   …>AN)r6   r7   r8   r9   r:   rU   r)   r+   r0   r2   r\   r^   rp   rM   r<   r   r   r4   r4   A   sI   „ ð ˆD�G‰G‹I€EØˆt�w‰w‹y€Hàˆ4�7‰7‹9€Dòò
ò	
ò
òó(r   r4   F)r   Úreprc                   ó„  — e Zd Z ej                  «       Z ej                  «       Z ej                  «       Z ej                  «       Z ej                  «       Z	 ej                  d¬«      Z
 ej                  «       Z ej                  «       Z ej                  d¬«      Zd„ Zed„ «       Zed„ «       Zd„ fd	„Zd
„ Zd„ Zy)rw   F)rz   Nr   c                 ó8   — dj                  | j                  «      S )Nz	<Test {}>)rZ   rA   rW   s    r   Ú__repr__z_Test.__repr__    s   € Ø×!Ñ! $×";Ñ";Ó<Ð<r   c                 ó�   — dj                  | j                  j                  | j                  | j                  | j
                  g«      S )Nz > )Újoinr/   r+   rK   rv   rt   rW   s    r   rA   z_Test.fully_qualified_name£   s>   € à�z‰zà—‘×!Ñ!Ø—‘Ø×%Ñ%Ø× Ñ ð	ó
ð 	
r   c           	      óæ   — d}dj                  t        j                  |d| j                  «      t        j                  |d| j                  «      t        j                  |d| j
                  «      «      S )Nz[\W\- ]+ztest_{}_{}_{}Ú_)rZ   ÚreÚsubrK   rv   rt   )r(   Ú
delimiterss     r   rf   z_Test.method_name®   sZ   € à ˆ
Ø×%Ñ%Ü�F‰F�:˜s D§L¡LÓ1Ü�F‰F�:˜s D×$9Ñ$9Ó:Ü�F‰F�:˜s D×$4Ñ$4Ó5ó
ð 	
r   c                  ó   — y r?   r<   )rE   s    r   ú<lambda>z_Test.<lambda>·   s   � r   c                 ó  ‡ ‡— ‰ j                   rˆˆ fd„}nˆˆ fd„}‰ j                  |_         |‰ «      }|€|S t        j                  j                  dd«      dk7  rt        j                  |«      S  t        j                  |«      |«      S )Nc                 ó*   •—  ‰j                   di ‰¤Ž y ©Nr<   )Úvalidate©ÚthisrC   r(   s    €€r   Úfnz$_Test.to_unittest_method.<locals>.fn¹   s   ø€ Ø�—‘Ñ' Ó'r   c                 ó’   •— | j                  t        j                  «      5   ‰j                  di ‰¤Ž d d d «       y # 1 sw Y   y xY wr‰   )ÚassertRaisesr   ÚValidationErrorrŠ   r‹   s    €€r   r�   z$_Test.to_unittest_method.<locals>.fn¼   s=   ø€ Ø×&Ñ&¤z×'AÑ'AÓBñ ,Ø!�D—M‘MÑ+ FÒ+÷,÷ ,ñ ,ús	   ¡=½AÚJSON_SCHEMA_EXPECTED_FAILURESÚ0)	Úvalidrf   r6   r	   r
   r   ri   ÚexpectedFailureÚskip)r(   r•   rC   r�   Úreasons   ` `  r   rg   z_Test.to_unittest_method·   su   ù€ Ø�:Š:ö(õ,ð ×&Ñ&ˆŒÙ�d“ˆØˆ>ØˆIÜ�Z‰Z�^‰^Ð;¸SÓAÀSÒHÜ×+Ñ+¨BÓ/Ð/à(”8—=‘= Ó(¨Ó,Ð,r   c                 óŠ  — |j                  | j                  «       t        j                  j	                  | j                  | j
                  |j                  ¬«      }d„ }||_         |d| j                  |dœ|¤Ž}t        j                  j                  dd«      dk7  r
t        «        |j                  | j                  ¬«       y )N)ru   ÚstoreÚid_ofc                 ó   — t        d| › �«      ‚)NzTried to access the network: )ÚRuntimeError)Úuris    r   Úprevent_network_accessz._Test.validate.<locals>.prevent_network_accessÔ   s   € ÜÐ!>¸s¸eÐDÓEÐEr   )ru   ÚresolverÚJSON_SCHEMA_DEBUGr’   )Úinstancer<   )Úcheck_schemaru   r   ÚRefResolverÚfrom_schemar)   ÚID_OFÚresolve_remoter	   r
   r   Ú
breakpointrŠ   Údata)r(   r-   rC   rž   r�   Ú	validators         r   rŠ   z_Test.validateÉ   sœ   € Ø×Ñ˜tŸ{™{Ô+Ü×)Ñ)×5Ñ5Ø—;‘;Ø—-‘-Ø—/‘/ð 6ó 
ˆò	Fà"8ˆÔáÐN T§[¡[¸8ÑNÀvÑNˆ	Ü�:‰:�>‰>Ð-¨sÓ3°sÒ:ÜŒLØ×Ñ D§I¡IÐÕ.r   c                 ó\   — 	 | j                  |¬«       y # t        j                  $ r Y y w xY w)N)r-   )rŠ   r   r�   )r(   r-   s     r   rB   z_Test.validate_ignoring_errorsÝ   s-   € ð	Ø�M‰M IˆMÕ.øÜ×)Ñ)ò 	Ùð	ús   ‚ •+ª+)r6   r7   r8   r9   r:   r/   rK   rv   rt   r§   ru   r“   r)   Úcommentr}   ÚpropertyrA   rf   rg   rŠ   rB   r<   r   r   rw   rw   Ž   sÁ   „ ð ˆd�g‰g‹i€Gàˆd�g‰g‹i€GØ�t—w‘w“yÐØ�$—'‘'“)€Kàˆ4�7‰7‹9€DØˆT�W‰W˜%Ô €FàˆD�G‰G‹I€Eàˆt�w‰w‹y€Hàˆd�g‰g˜dÔ#€Gò=ð ñ
ó ð
ð ñ
ó ð
ñ '8ó -ò$/ó(r   rw   c                  óF   — t        j                  d«      j                  d   S )a‡  
    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.
    é   r6   )r#   Ú	_getframeÚ	f_globalsr<   r   r   rk   rk   ä   s   € ô �=‰=˜Ó×%Ñ% jÑ1Ð1r   )Ú__doc__Ú	functoolsr   Úpathlibr   r   r	   r‚   r!   r#   ri   r9   Újsonschema.validatorsr   r   r   ÚsÚobjectr   r4   rw   rk   r<   r   r   ú<module>r¶      s³   ðñõ Ý Û Û 	Û 	Û Û 
Û ã å -Û òð$ €‡�ˆTÔô
ˆFó 
ó ð
ð4 €‡�ˆTÔôIˆfó Ió ðIðX €‡�ˆT˜ÔôRˆFó Ró ðRój2r   