
    `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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      sh    ::>>23DDz
##$++22V;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    ::..u6HI))^^S!12I>
 zz'..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 	OD)LLdL#--# . 	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/    $$Wd3MMO
 	
r   N)__name__
__module____qualname__attribFactoryr   r   r)   r0   r/    r   r   r   r   &   s.     DGGLDLL56E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    ZZ\ 	E !!--D99DV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      


3B ' 
  

   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    zz"":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    zz&&499??+<+D+DS"+M"MN  
 

 	
  5d55???


 
 4(++-w7	FHCN 
!
  	 
	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> MM 	s   +.r2   )r   r&   	read_text)r(   rK   r3   rx   s   `` @r   rM   zVersion._tests_in   sB     JJt~~w~?@ 
	D	 #7m	 	
	s   >AN)r6   r7   r8   r9   r:   rU   r)   r+   r0   r2   r\   r^   rp   rM   r<   r   r   r4   r4   A   sI     DGGIEtwwyH4779D
	

(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>    zz!!%%  	
 	
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     
%%FF:sDLL1FF:sD$9$9:FF:sD$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 ,!DMM+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ZZ^^;SAS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    !>se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NT[[8NvN	::>>-s3s:LDII.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-    	MMIM.)) 		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     dggiGdggiGtwwy$'')K4779DTWW% FDGGIEtwwyHdggd#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   