
    dp                        d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ 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 n# e$ r d dlZY nw xY wd d	lmZ d d
lmZmZ d dlmZmZmZ d dlm Z m!Z!  ej"                    5   ej#        d           d dlm$Z$ ddd           n# 1 swxY w Y   d Z%d Z&d Z' G d de          Z( G d de          Z) G d de          Z*dS )    )redirect_stderrredirect_stdout)StringIO)JSONDecodeError)Path)dedent)TestCaseN)metadata)m)Draft4ValidatorDraft202012Validator)RefResolutionErrorSchemaErrorValidationError)_LATEST_VERSIONvalidateignore)clic                  ^     t          t                                 G  fdd          }|S )Nc                   6    e Zd Zd Z fdZed             ZdS )%fake_validator.<locals>.FakeValidatorc                     d S N )selfargskwargss      ]/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/jsonschema/tests/test_cli.py__init__z.fake_validator.<locals>.FakeValidator.__init__&   s    D    c                 4    r                                 S g S r   )pop)r   instanceerrorss     r   iter_errorsz1fake_validator.<locals>.FakeValidator.iter_errors)   s     $zz||#Ir    c                     d S r   r   r   schemas     r   check_schemaz2fake_validator.<locals>.FakeValidator.check_schema.   s    Dr    N)__name__
__module____qualname__r   r%   classmethodr)   )r$   s   r   FakeValidatorr   %   sX        	 	 		 	 	 	 	
 
	 	 
	 	 	r    r.   )listreversed)r$   r.   s   ` r   fake_validatorr1   "   sR    (6""##F          r    c                       fd}|S )Nc                 n                         |           }|t          |           t          |          S r   )getFileNotFoundErrorr   )pathcontentsall_contentss     r   openzfake_open.<locals>.open6   s8    ##D))#D)))!!!r    r   )r8   r9   s   ` r   	fake_openr:   5   s#    " " " " "
 Kr    c                     	 t          j        |            t          d          # t          $ r}t	          |          cY d }~S d }~ww xY w)Nz.Tried and failed to capture a JSON dump error.)jsonloadsRuntimeErrorr   str)non_jsonerrors     r   _message_forrB   >   se    M
8 KLLL    5zzs   % 
AAAAc                   F   e Zd Z e             e            dfdZd1dZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0S )2TestCLIr   c                 v   t          j        |          }|                    |           |                     t	          t           d                     t          |          t           _        	 t                      t                      }}t          j        ||||          }	t           `n# t           `w xY w| 	                    |	|t          d                    ||	|                                |                                                               |                                |                                fS )Nr9   )stdinstdoutstderrz
                    Expected an exit code of {} != {}.

                    stdout: {}

                    stderr: {}
                )msg)r   
parse_argsupdateassertFalsehasattrr:   r9   r   runassertEqualr   formatgetvalue)
r   argvfilesrF   	exit_codeoverride	argumentsrG   rH   actual_exit_codes
             r   run_clizTestCLI.run_cliH   s(    N4((	"""f--...U##		%ZZFF"w	      LLLLiV F$OO%%OO%%	 . . 	 	
 	
 	
    &//"3"333s   ,4B( (	B1 c                     |                       | j        di |t          |          t          |          f           d S )Nr   )rO   rX   r   )r   rG   rH   r   s       r   assertOutputszTestCLI.assertOutputsm   sM    DL""6""F^^VF^^,	
 	
 	
 	
 	
r    c                     t          dd          }|                     t          dt          j        |j                            t          |g          g ddd	           d S )
NI am an error!   r#   *{"does not": "matter since it is stubbed"}some_schemasome_instance-irc   rb      12: I am an error!
rS   	validatorrR   rT   rH   r   r[   dictr<   dumpsr#   r1   r   rA   s     r   test_invalid_instancezTestCLI.test_invalid_instances   s~     02>>>H"j88   %eW--777) 	 	
 	
 	
 	
 	
r    c                     t          dd          }|                     t          dt          j        |j                            t          |g          g ddd	           d S )
Nr]   r^   r_   r`   ra   re   rc   --outputprettyrb   rf   z                ===[ValidationError]===(some_instance)===

                I am an error!
                -----------------------------
            rh   rj   rm   s     r   #test_invalid_instance_pretty_outputz+TestCLI.test_invalid_instance_pretty_output   s     02>>>H"j88   %eW--MMM 	 	
 	
 	
 	
 	
r    c                     t          dd          }|                     t          dt          j        |j                            t          |g          g ddd	           d S )
Nr]   r^   r_   r`   ra   )rq   plainre   rc   rb   rf   rg   rh   rj   rm   s     r   +test_invalid_instance_explicit_plain_outputz3TestCLI.test_invalid_instance_explicit_plain_output   s~     02>>>H"j88   %eW--LLL) 	 	
 	
 	
 	
 	
r    c                     d}t          d|          }t          d|          }|                     t          dt          j        |                    t          ||g          g ddd	
           d S )Nr^   First errorr_   Second errorr`   ra   rd   rf   zM                12: First error
                12: Second error
            rh   r   r[   rk   r<   rl   r1   r   r#   firstseconds       r   %test_invalid_instance_multiple_errorsz-TestCLI.test_invalid_instance_multiple_errors   s    AAA (CCCH"j22   %eV_55777 	 	
 	
 	
 	
 	
r    c                     d}t          d|          }t          d|          }|                     t          dt          j        |                    t          ||g          g ddd	
           d S )Nr^   rx   r_   ry   r`   ra   rp   rf   a                  ===[ValidationError]===(some_instance)===

                First error
                -----------------------------
                ===[ValidationError]===(some_instance)===

                Second error
                -----------------------------
            rh   rz   r{   s       r   3test_invalid_instance_multiple_errors_pretty_outputz;TestCLI.test_invalid_instance_multiple_errors_pretty_output   s    AAA (CCCH"j22   %eV_55MMM	 	 	
 	
 	
 	
 	
r    c           	      2   d}t          d|          t          d|          g}d}t          d|          g}|                     t          dt          j        |          t          j        |                    t          ||          g d	d
d           d S )Nr^   An errorr_   Another errorfooBOOMr`   rb   some_first_instancesome_second_instance)re   r   re   r   rb   rf   ze                12: An error
                12: Another error
                foo: BOOM
            rh   rz   r   first_instancefirst_errorssecond_instancesecond_errorss        r   test_multiple_invalid_instancesz'TestCLI.test_multiple_invalid_instances   s    J@@@OnEEE
  (/JJJKH$(J~$>$>%)Z%@%@  
 %\=AA    	 	
 	
 	
 	
 	
r    c           	      2   d}t          d|          t          d|          g}d}t          d|          g}|                     t          dt          j        |          t          j        |                    t          ||          g d	d
d           d S )Nr^   r   r_   r   r   r   r`   r   )rq   rr   re   r   re   r   rb   rf   a                  ===[ValidationError]===(some_first_instance)===

                An error
                -----------------------------
                ===[ValidationError]===(some_first_instance)===

                Another error
                -----------------------------
                ===[ValidationError]===(some_second_instance)===

                BOOM
                -----------------------------
            rh   rz   r   s        r   -test_multiple_invalid_instances_pretty_outputz5TestCLI.test_multiple_invalid_instances_pretty_output   s    J@@@OnEEE
  (/JJJKH$(J~$>$>%)Z%@%@  
 %\=AA   ! 	 	
 	
 	
 	
 	
r    c           	      2   d}t          d|          t          d|          g}d}t          d|          g}|                     t          dt          j        |          t          j        |                    t          ||          g d	d
d           d S )Nr^   r   r_   r   r   r   r`   r   )--error-format&:{error.message}._-_.{error.instance}:re   r   re   r   rb   rf   z5:An error._-_.12::Another error._-_.12::BOOM._-_.foo:rh   rz   r   s        r   test_custom_error_formatz TestCLI.test_custom_error_format  s    J@@@OnEEE
  (/JJJKH$(J~$>$>%)Z%@%@  
 %\=AA   J! 	 	
 	
 	
 	
 	
r    c                 V    |                      t          d          dgdd           d S )Nz{"type": 12}rb   rb   rf   O                12: 12 is not valid under any of the given schemas
            rS   rR   rT   rH   r[   rk   r   s    r   test_invalid_schemazTestCLI.test_invalid_schema9  sD    >222 	 	
 	
 	
 	
 	
r    c           	      X   ddi}|                      t                    5 }t          |d           d d d            n# 1 swxY w Y   t          |j                  }|                     t          t          j        |                    g dddt          |          z   d	z   
           d S )Ntyper^   rY   r(   r#   r   rq   rr   rb   rf   %===[SchemaError]===(some_schema)===


-----------------------------
r   	assertRaisesr   r   r?   	exceptionr[   rk   r<   rl   r   r(   erA   s       r   !test_invalid_schema_pretty_outputz)TestCLI.test_invalid_schema_pretty_outputD  s    "{++ 	1qFR0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1AK  4:f#5#56666669e**56 	 
	
 
	
 
	
 
	
 
	
s   =AAc                 V    |                      t          d          dgdd           d S )Nz{"type": 12, "items": 57}r   rb   rf   zF                57: 57 is not of type 'object', 'boolean'
            r   r   r   s    r   #test_invalid_schema_multiple_errorsz+TestCLI.test_invalid_schema_multiple_errorsW  sE    #>??? 	 	
 	
 	
 	
 	
r    c           	      Z   ddd}|                      t                    5 }t          |d           d d d            n# 1 swxY w Y   t          |j                  }|                     t          t          j        |                    g ddd	t          |          z   d
z              d S )Nr^   9   )r   itemsrY   r   r   r   rf   r   r   r   r   r   s       r   1test_invalid_schema_multiple_errors_pretty_outputz9TestCLI.test_invalid_schema_multiple_errors_pretty_outputb  s    r**{++ 	1qFR0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1AK  4:f#5#56666669e**56 	 
	
 
	
 
	
 
	
 
	
s   >AAc                 Z    |                      t          dd          g ddd           dS )	zv
        "Validating" an instance that's invalid under an invalid schema
        just shows the schema error.
        z{"type": 12, "minimum": 30}13ra   rd   rf   r   r   Nr   r   s    r   )test_invalid_schema_with_invalid_instancez1TestCLI.test_invalid_schema_with_invalid_instanceu  sV    
 	9"   877 	 	
 	
 	
 	
 	
r    c           	         dddd}}|                      t                    5 }t          ||           d d d            n# 1 swxY w Y   t          |j                  }|                     t          t          j        |          t          j        |                    g ddd	t          |          z   d
z              d S )N   r^      r   minimumr   ra   rq   rr   re   rc   rb   rf   r   r   r   r   )r   r#   r(   r   rA   s        r   7test_invalid_schema_with_invalid_instance_pretty_outputz?TestCLI.test_invalid_schema_with_invalid_instance_pretty_output  s   r::&{++ 	7qFX6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7AK   Jv.."j22   NMM9e**56 	 	
 	
 	
 	
 	
   A  AAc           
          |                      t          ddd          g ddd                    t          d                               d S )	Nz{"minimum": 30}not valid JSON!12)rb   r   r   )re   r   re   r   rb   rf   zw                Failed to parse 'first_instance': {}
                12: 12 is less than the minimum of 30
            r   r[   rk   rP   rB   r   s    r   -test_invalid_instance_continues_with_the_restz5TestCLI.test_invalid_instance_continues_with_the_rest  su    -0 $  
    |$56677! 	 	
 	
 	
 	
 	
r    c                    dddd}}|                      t                    5  t          ||           d d d            n# 1 swxY w Y   |                     t	          t          j        |                    g ddd	
           d S )Nr   r^   r   r   r   r   )r   r   rb   rf   z7:12 is not valid under any of the given schemas._-_.12:r   )r   r   r   r[   rk   r<   rl   )r   r#   r(   s      r   1test_custom_error_format_applies_to_schema_errorsz9TestCLI.test_custom_error_format_applies_to_schema_errors  s    r::&{++ 	7 	7FX6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	4:f#5#5666  
 L 	 
	
 
	
 
	
 
	
 
	
r   c           
          d}|                      t          d|          g ddd                    t          |                               d S )Nr   {}ra   rd   rf   z@                Failed to parse 'some_instance': {}
            r   r   r   r#   s     r   test_instance_is_invalid_JSONz%TestCLI.test_instance_is_invalid_JSON  sd    $4x@@@777|H--.. 	 	
 	
 	
 	
 	
r    c                     |                      t          dd          g dd          \  }}|                     |           |                     d|           |                     d|           d S )	Nr   r   ra   r   rf   rS   rR   rT   z7(some_instance)===

Traceback (most recent call last):
rb   rX   rk   rL   assertInassertNotInr   rG   rH   s      r   +test_instance_is_invalid_JSON_pretty_outputz3TestCLI.test_instance_is_invalid_JSON_pretty_output  s     /  
 NMM & 	
 	
 	   H	
 	
 	
 	/////r    c                     d}|                      t          d          t          |          dgdd                    t	          |                               d S )Nr   r   r   rb   rf   z8                Failed to parse <stdin>: {}
            )rS   rF   rR   rT   rH   )r[   rk   r   rP   rB   r   s     r   &test_instance_is_invalid_JSON_on_stdinz.TestCLI.test_instance_is_invalid_JSON_on_stdin  si    $4(((8$$|H--.. 	 
	
 
	
 
	
 
	
 
	
r    c                     |                      t          d          t          d          g dd          \  }}|                     |           |                     d|           |                     d|           d S )	Nr   r   r   r   rf   )rS   rF   rR   rT   z1(<stdin>)===

Traceback (most recent call last):
rb   )rX   rk   r   rL   r   r   r   s      r   4test_instance_is_invalid_JSON_on_stdin_pretty_outputz<TestCLI.test_instance_is_invalid_JSON_on_stdin_pretty_output  s    4(((,--666 & 
 
 	   B	
 	
 	
 	/////r    c           
          d}|                      t          |          dgdd                    t          |                               d S )Nr   r   rb   rf   >                Failed to parse 'some_schema': {}
            r   r   r'   s     r   test_schema_is_invalid_JSONz#TestCLI.test_schema_is_invalid_JSON  s^    "6***|F++,, 	 		
 		
 		
 		
 		
r    c                     |                      t          d          g dd          \  }}|                     |           |                     d|           d S )Nr   r   r   rf   r   5(some_schema)===

Traceback (most recent call last):
)rX   rk   rL   r   r   s      r   )test_schema_is_invalid_JSON_pretty_outputz1TestCLI.test_schema_is_invalid_JSON_pretty_output  su    #4555666 & 
 
 	   F	
 	
 	
 	
 	
r    c           
          d\  }}|                      t          ||          dgdd                    t          |                               dS )M
        Only the schema error is reported, as we abort immediately.
        )r   also not valid JSON!ra   rb   rf   r   r   Nr   r   r(   r#   s      r   .test_schema_and_instance_are_both_invalid_JSONz6TestCLI.test_schema_and_instance_are_both_invalid_JSON  sh     E6BBB|F++,, 	 		
 		
 		
 		
 		
r    c                     |                      t          dd          g dd          \  }}|                     |           |                     d|           |                     d|           d	S )
r   r   r   ra   r   rf   r   r   rc   Nr   r   s      r   <test_schema_and_instance_are_both_invalid_JSON_pretty_outputzDTestCLI.test_schema_and_instance_are_both_invalid_JSON_pretty_output-  s     -4  
 NMM & 	
 	
 	   F	
 	
 	
 	&11111r    c                 X    |                      t          d          g ddd           d S )Nr   r   )re   nonexisting_instancerb   rf   zC                'nonexisting_instance' does not exist.
            r   r   r   s    r   test_instance_does_not_existz$TestCLI.test_instance_does_not_existB  sH    4(((>>> 	 	
 	
 	
 	
 	
r    c                 X    |                      t          d          g ddd           d S )Nr   r   )rq   rr   re   r   rb   rf   z                ===[FileNotFoundError]===(nonexisting_instance)===

                'nonexisting_instance' does not exist.
                -----------------------------
            r   r   r   s    r   *test_instance_does_not_exist_pretty_outputz2TestCLI.test_instance_does_not_exist_pretty_outputM  sP    4(((    	 	
 	
 	
 	
 	
r    c                 8    |                      dgdd           d S )Nnonexisting_schemarf   %'nonexisting_schema' does not exist.
rR   rT   rH   r[   r   s    r   test_schema_does_not_existz"TestCLI.test_schema_does_not_exist_  s5    &';	 	 	
 	
 	
 	
 	
r    c                 :    |                      g ddd           d S )N)rq   rr   r   rf                   ===[FileNotFoundError]===(nonexisting_schema)===

                'nonexisting_schema' does not exist.
                -----------------------------
            r   r   r   s    r   (test_schema_does_not_exist_pretty_outputz0TestCLI.test_schema_does_not_exist_pretty_outputg  s:    ===	 	 
	
 
	
 
	
 
	
 
	
r    c                 :    |                      g ddd           d S )N)re   r   r   rf   r   r   r   r   s    r   &test_neither_instance_nor_schema_existz.TestCLI.test_neither_instance_nor_schema_existt  s8    EEE;	 	 	
 	
 	
 	
 	
r    c                 :    |                      g ddd           d S )N)rq   rr   re   r   r   rf   r   r   r   r   s    r   4test_neither_instance_nor_schema_exist_pretty_outputz<TestCLI.test_neither_instance_nor_schema_exist_pretty_output|  sB        	 	
 	
 	
 	
 	
r    c                 Z    |                      t          dd          g ddd           d S Nr   ra   rd   rY   rS   rR   rG   rH   r   r   s    r   test_successful_validationz"TestCLI.test_successful_validation  H    4t<<<777	 	 	
 	
 	
 	
 	
r    c                 Z    |                      t          dd          g ddd           d S Nr   ra   r   z"===[SUCCESS]===(some_instance)===
rY   r   r   r   s    r   (test_successful_validation_pretty_outputz0TestCLI.test_successful_validation_pretty_output  H    4t<<<MMM8	 	 	
 	
 	
 	
 	
r    c                 r    |                      t          d          t          d          dgdd           d S )Nr   r   rb   rY   rS   rF   rR   rG   rH   r[   rk   r   r   s    r   #test_successful_validation_of_stdinz+TestCLI.test_successful_validation_of_stdin  sK    4(((4.. 	 	
 	
 	
 	
 	
r    c                 t    |                      t          d          t          d          g ddd           d S )Nr   r   r   z===[SUCCESS]===(<stdin>)===
rY   r   r   r   s    r   1test_successful_validation_of_stdin_pretty_outputz9TestCLI.test_successful_validation_of_stdin_pretty_output  sO    4(((4..6662 	 	
 	
 	
 	
 	
r    c                 Z    |                      t          dd          g ddd           d S r   r   r   s    r   -test_successful_validation_of_just_the_schemaz5TestCLI.test_successful_validation_of_just_the_schema  r   r    c                 Z    |                      t          dd          g ddd           d S r   r   r   s    r   ;test_successful_validation_of_just_the_schema_pretty_outputzCTestCLI.test_successful_validation_of_just_the_schema_pretty_output  r   r    c                    t          j        d          }|                                 |                     t          j        |j                   t          |j                  }|                    d           d|j         d}| 	                    t          |d          dd	d
|j                                        dz   dgdd           d S )NFdelete-{"definitions": {"num": {"type": "integer"}}}
{"$ref": "#definitions/num"}1ra   re   rc   
--base-uri/rb   rY   r   tempfileNamedTemporaryFileclose
addCleanuposremovenamer   
write_textr[   rk   parentas_urir   ref_schema_fileref_pathr(   s       r   0test_successful_validation_via_explicit_base_uriz8TestCLI.test_successful_validation_via_explicit_base_uri  s    "5UCCC	?#7888,--KLLLAx}AAA6===oho4466<
  	 		
 		
 		
 		
 		
r    c                    t          j        d          }|                                 |                     t          j        |j                   t          |j                  }|                    d           d|j         d}| 	                    t          |d          dd	d
|j                                        dz   dgddd           d S )NFr  r  r  r  z"1"ra   re   rc   r  r	  rb   rf   rY   z 1: '1' is not of type 'integer'
rS   rR   rT   rG   rH   r
  r  s       r   2test_unsuccessful_validation_via_explicit_base_uriz:TestCLI.test_unsuccessful_validation_via_explicit_base_uri  s    "5UCCC	?#7888,--KLLLAx}AAA6???oho4466<
 6 	 
	
 
	
 
	
 
	
 
	
r    c           	      |   d}d}|                      t                    5 }|                     t          ||          dddt	          j                                                    dg           d d d            n# 1 swxY w Y   t          |j                  }| 	                    t          j         d	|           d S )
Nz4{"$ref": "someNonexistentFile.json#definitions/num"}r  ra   re   rc   r  rb   rS   rR   zsomeNonexistentFile.json')r   r   r[   rk   r   cwdr  r?   r   r   r  sepr   r(   r#   r   rA   s        r   ,test_nonexistent_file_with_explicit_base_uriz4TestCLI.test_nonexistent_file_with_explicit_base_uri  s   G122 	a &"*  
 / $(**"3"3"5"5!  
 
 
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 AK  :::EBBBBBs   AA::A>A>c                    d}d}|                      t                    5 }|                     t          ||          g d           d d d            n# 1 swxY w Y   t	          |j                  }|                     |d           d S )Nz${"$ref": "foo.json#definitions/num"}r  ra   )re   rc   r  znot@UR1rb   r  zunknown url type: 'foo.json')r   r   r[   rk   r?   r   rO   r   s        r   test_invalid_exlicit_base_uriz%TestCLI.test_invalid_exlicit_base_uri  s    7122 	a &"*      
 
 
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 AK  1	
 	
 	
 	
 	
s   )AAAc                     |                      t          t                     |                     t	          dd          g dddd           d S )	Nz{"const": "check"}z"a"ra   rd   rf   rY   za: 'check' was expected
r  )assertIsr   r   r[   rk   r   s    r   =test_it_validates_using_the_latest_validator_when_unspecifiedzETestCLI.test_it_validates_using_the_latest_validator_when_unspecified  sc     	*O<<<#7uMMM777. 	 	
 	
 	
 	
 	
r    c                 d    d}d}|                      t          ||          g dddd           d	S )
zG
        Specifically, `const` validation applies for Draft 7.
        z
            {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "const": "check"
            }
        "foo"ra   rd   rf   rY   zfoo: 'check' was expected
r  Nr   r   s      r   -test_it_validates_using_draft7_when_specifiedz5TestCLI.test_it_validates_using_draft7_when_specified"  sY     6BBB7770 	 	
 	
 	
 	
 	
r    c                 b    d}d}|                      t          ||          g ddd           dS )zP
        Specifically, `const` validation *does not* apply for Draft 4.
        z
            {
                "$schema": "http://json-schema.org/draft-04/schema#",
                "const": "check"
            }
            r(  ra   rd   rY   r   Nr   r   s      r   -test_it_validates_using_draft4_when_specifiedz5TestCLI.test_it_validates_using_draft4_when_specified5  sV     6BBB777	 	 	
 	
 	
 	
 	
r    N)rY   rY   )2r*   r+   r,   r   r   rX   r[   rn   rs   rv   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   r   r   r  r  r!  r#  r&  r)  r+  r   r    r   rD   rD   G   s       !##XXZZ1#4 #4 #4 #4J
 
 
 

 
 

 
 
(
 
 

 
 
*
 
 
6
 
 
>'
 '
 '
R
 
 
8	
 	
 	

 
 
&	
 	
 	

 
 
&
 
 
$
 
 
,
 
 
(
 
 
$
 
 
0 0 0$
 
 
0 0 0 
 
 

 
 

 
 
 2 2 2*	
 	
 	

 
 
$
 
 

 
 

 
 

 
 
"
 
 

 
 

 
 

 
 

 
 

 
 

 
 
*
 
 
,C C C&
 
 
*
 
 
 
 
 
&
 
 
 
 
r    rD   c                   @    e Zd Z e            Zd Zd Zd Zd Zd Z	dS )
TestParserc                 t    t          j        g d          }|                     |d         | j                   d S )N)--validatorz2jsonschema.tests.test_cli.TestParser.FakeValidator
--instancemem://some/instancemem://some/schemari   )r   rJ   r%  r.   r   rV   s     r   2test_find_validator_by_fully_qualified_object_namez=TestParser.test_find_validator_by_fully_qualified_object_nameL  sF    N  
 
	 	i,d.@AAAAAr    c                 t    t          j        g d          }|                     |d         t                     d S )N)r/  r   r0  r1  r2  ri   )r   rJ   r%  r   r3  s     r   !test_find_validator_in_jsonschemaz,TestParser.test_find_validator_in_jsonschemaW  sC    N  
 
	 	i,o>>>>>r    c                    t                      t                      }}t          |          5  t          |          5  |                     t                    5  t          j        |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                |                                fS r   )r   r   r   r   
SystemExitr   rJ   rQ   )r   rR   rG   rH   s       r   cli_output_forzTestParser.cli_output_fora  sr   !XZZV$$ 	% 	%of&=&= 	% 	%"":.. % %t$$$% % % % % % % % % % % % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%   &//"3"333sX   B&BA8,B8A<<B?A< BB&B	B&B	B&&B*-B*c                     |                      ddd          \  }}|                     d|           |                     |           d S )Nrq   r   r2  zinvalid choice: 'foo'r9  r   rL   r   s      r   test_unknown_outputzTestParser.test_unknown_outputh  sT    ,,
 
 	-v666     r    c                     |                      ddddd          \  }}|                     d|           |                     |           d S )Nrq   rr   r   r   r2  z3--error-format can only be used with --output plainr;  r   s      r   test_useless_error_formatz$TestParser.test_useless_error_formatp  sb    ,,e
 

 	A	
 	
 	
 	     r    N)
r*   r+   r,   r1   r.   r4  r6  r9  r<  r>  r   r    r   r-  r-  H  so        "N$$M	B 	B 	B? ? ?4 4 4! ! !
! 
! 
! 
! 
!r    r-  c                        e Zd Zd Zd Zd ZdS )TestCLIIntegrationc                     t          j        t          j        ddddgt           j                  }|                     d|           d S )N-mpipshow
jsonschemarH   s   License: MIT)
subprocesscheck_outputsys
executableSTDOUTr   )r   outputs     r   test_licensezTestCLIIntegration.test_license~  sK    (^T5&,?$
 
 
 	ov.....r    c                    t          j        t          j        dddddgt           j                  }|                    d                                          }|                     |t          j	        d                     d S )Nz-Wr   rB  rE  z	--versionrF  zutf-8)
rG  rH  rI  rJ  rK  decodestriprO   r
   version)r   rQ  s     r   test_versionzTestCLIIntegration.test_version  sw    )^T8T<M$
 
 
 ..))//11("2<"@"@AAAAAr    c                     t          j        t          j        ddgt           j                  }t          j        t          j        dddgt           j                  }|                     ||           d S )NrB  rE  rF  z--help)rG  rH  rI  rJ  rK  rO   )r   rL  output_for_helps      r   #test_no_arguments_shows_usage_notesz6TestCLIIntegration.test_no_arguments_shows_usage_notes  sv    (^T<0$
 
 
 %1^T<:$
 
 
 	11111r    N)r*   r+   r,   rM  rR  rU  r   r    r   r@  r@  }  sD        / / /B B B	2 	2 	2 	2 	2r    r@  )+
contextlibr   r   ior   r<   r   pathlibr   textwrapr   unittestr	   r  rG  rI  r  warnings	importlibr
   ImportErrorimportlib_metadata
pyrsistentr   rE  r   r   jsonschema.exceptionsr   r   r   jsonschema.validatorsr   r   catch_warningssimplefilterr   r1   r:   rB   rD   r-  r@  r   r    r   <module>rd     s   7 7 7 7 7 7 7 7                                      				     



  *""""""" * * *))))))*       < < < < < < < <         
 < ; ; ; ; ; ; ;X  H(###              
  &  M M M~
 ~
 ~
 ~
 ~
h ~
 ~
 ~
B2! 2! 2! 2! 2! 2! 2! 2!j2 2 2 2 2 2 2 2 2 2s$    A 	AAB((B,/B,