
    `dBp                     <   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mZ d d	lmZ d d
lmZmZmZ d dlmZmZmZ d dlm Z m!Z! d Z"d Z#d Z$ G d de      Z% G d de      Z& G d de      Z'y# e$ r d dlZY Xw xY w)    )redirect_stderrredirect_stdout)StringIO)JSONDecodeError)Path)dedent)TestCaseN)metadata)m)Draft4ValidatorDraft202012Validatorcli)RefResolutionErrorSchemaErrorValidationError)_LATEST_VERSIONvalidatec                  R     t        t                       G  fddt              }|S )Nc                   .    e Zd Zd Z fdZed        Zy)%fake_validator.<locals>.FakeValidatorc                      y N )selfargskwargss      ;/usr/lib/python3/dist-packages/jsonschema/tests/test_cli.py__init__z.fake_validator.<locals>.FakeValidator.__init__!   s        c                 ,    rj                         S g S r   )pop)r   instanceerrorss     r   iter_errorsz1fake_validator.<locals>.FakeValidator.iter_errors$   s    zz|#Ir   c                      y r   r   r   schemas     r   check_schemaz2fake_validator.<locals>.FakeValidator.check_schema)   s    r   N)__name__
__module____qualname__r   r$   classmethodr(   )r#   s   r   FakeValidatorr       s!    		
 
	 
	r   r-   )listreversedobject)r#   r-   s   ` r   fake_validatorr1      s&    (6"#F  r   c                       fd}|S )Nc                 V    j                  |       }|t        |       t        |      S r   )getFileNotFoundErrorr   )pathcontentsall_contentss     r   openzfake_open.<locals>.open1   s/    ##D)#D))!!r   r   )r8   r9   s   ` r   	fake_openr:   0   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   9   s>    M

8 KLL  5zs   " 	A 
;A A c                   8   e Zd Z e        e       dfdZd0d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. Z1y/)1TestCLIr   c                    t        j                  |      }|j                  |       | j                  t	        t         d             t        |      t         _        	 t               t               }}t        j                  ||||      }	t         `| j                  |	|t        dj                  ||	|j                         |j                                            |j                         |j                         fS # t         `w xY w)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_cliC   s     NN4(	"f-.U#		%ZFF"ww	  iV F$OO%OO%	. 	 	
   &//"333% s   -C9 9Dc                 p    | j                   | j                  di |t        |      t        |      f       y )Nr   )rO   rX   r   )r   rG   rH   r   s       r   assertOutputszTestCLI.assertOutputsh   s1    DLL"6"F^VF^,	
r   c                     t        dd      }| j                  t        dt        j                  |j
                              t        |g      g ddd	       y )
NI am an error!   r"   *{"does not": "matter since it is stubbed"}some_schemasome_instance-irb   ra      12: I am an error!
rS   	validatorrR   rT   rH   r   rZ   dictr<   dumpsr"   r1   r   rA   s     r   test_invalid_instancezTestCLI.test_invalid_instancen   sR     02>H"jj8 %eW-7) 	 	
r   c                     t        dd      }| j                  t        dt        j                  |j
                              t        |g      g ddd	       y )
Nr\   r]   r^   r_   r`   rd   rb   --outputprettyra   re   z                ===[ValidationError]===(some_instance)===

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

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

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

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

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

                BOOM
                -----------------------------
            rg   ry   r   s        r   -test_multiple_invalid_instances_pretty_outputz5TestCLI.test_multiple_invalid_instances_pretty_output   s    J@OnE
  (/JKH$(JJ~$>%)ZZ%@
 %\=A ! 	 	
r   c           	         d}t        d|      t        d|      g}d}t        d|      g}| j                  t        dt        j                  |      t        j                  |            t        ||      g d	d
d       y )Nr]   r   r^   r   r   r   r_   r   )--error-format&:{error.message}._-_.{error.instance}:rd   r   rd   r   ra   re   z5:An error._-_.12::Another error._-_.12::BOOM._-_.foo:rg   ry   r   s        r   test_custom_error_formatz TestCLI.test_custom_error_format  s    J@OnE
  (/JKH$(JJ~$>%)ZZ%@
 %\=A J! 	 	
r   c                 D    | j                  t        d      dgdd       y )Nz{"type": 12}ra   ra   re   O                12: 12 is not valid under any of the given schemas
            rS   rR   rT   rH   rZ   rj   r   s    r   test_invalid_schemazTestCLI.test_invalid_schema4  s*    >2 	 	
r   c           	      *   ddi}| j                  t              5 }t        |d       d d d        t        j                        }| j                  t        t        j                  |            g dddt        |      z   d	z   
       y # 1 sw Y   bxY w)Ntyper]    r'   r"   r   rp   rq   ra   re   %===[SchemaError]===(some_schema)===


-----------------------------
r   	assertRaisesr   r   r?   	exceptionrZ   rj   r<   rk   r   r'   erA   s       r   !test_invalid_schema_pretty_outputz)TestCLI.test_invalid_schema_pretty_output?  s    "{+ 	1qFR0	1AKK 4::f#5669e*56 	 
	
		1 	1s   B		Bc                 D    | j                  t        d      dgdd       y )Nz{"type": 12, "items": 57}r   ra   re   zF                57: 57 is not of type 'object', 'boolean'
            r   r   r   s    r   #test_invalid_schema_multiple_errorsz+TestCLI.test_invalid_schema_multiple_errorsR  s+    #>? 	 	
r   c           	      ,   ddd}| j                  t              5 }t        |d       d d d        t        j                        }| j                  t        t        j                  |            g ddd	t        |      z   d
z          y # 1 sw Y   bxY w)Nr]   9   )r   itemsr   r   r   r   re   r   r   r   r   r   s       r   1test_invalid_schema_multiple_errors_pretty_outputz9TestCLI.test_invalid_schema_multiple_errors_pretty_output]  s    r*{+ 	1qFR0	1AKK 4::f#5669e*56 	 
	
		1 	1s   B

Bc                 H    | j                  t        dd      g ddd       y)	zv
        "Validating" an instance that's invalid under an invalid schema
        just shows the schema error.
        z{"type": 12, "minimum": 30}13r`   rc   re   r   r   Nr   r   s    r   )test_invalid_schema_with_invalid_instancez1TestCLI.test_invalid_schema_with_invalid_instancep  s2    
 	9" 8 	 	
r   c           	      X   dddd}}| j                  t              5 }t        ||       d d d        t        j                        }| j                  t        t        j                  |      t        j                  |            g ddd	t        |      z   d
z          y # 1 sw Y   vxY w)N   r]      r   minimumr   r`   rp   rq   rd   rb   ra   re   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	7AKK  JJv."jj2 N9e*56 	 	
		7 	7s   B  B)c           
      z    | j                  t        ddd      g dddj                  t        d                   y )	Nz{"minimum": 30}not valid JSON!12)ra   r   r   )rd   r   rd   r   ra   re   zw                Failed to parse 'first_instance': {}
                12: 12 is less than the minimum of 30
            r   rZ   rj   rP   rB   r   s    r   -test_invalid_instance_continues_with_the_restz5TestCLI.test_invalid_instance_continues_with_the_rest  sG    -0 $
  |$567! 	 	
r   c                     dddd}}| j                  t              5  t        ||       d d d        | j                  t	        t        j                  |            g ddd	
       y # 1 sw Y   >xY w)Nr   r]   r   r   r   r   )r   r   ra   re   z7:12 is not valid under any of the given schemas._-_.12:r   )r   r   r   rZ   rj   r<   rk   )r   r"   r'   s      r   1test_custom_error_format_applies_to_schema_errorsz9TestCLI.test_custom_error_format_applies_to_schema_errors  sp    r:&{+ 	7FX6	7 	4::f#56
 L 	 
	
	7 	7s   A((A1c           
      |    d}| j                  t        d|      g dddj                  t        |                   y )Nr   {}r`   rc   re   z@                Failed to parse 'some_instance': {}
            r   r   r   r"   s     r   test_instance_is_invalid_JSONz%TestCLI.test_instance_is_invalid_JSON  s>    $4x@7|H-. 	 	
r   c                     | j                  t        dd      g dd      \  }}| j                  |       | j                  d|       | j	                  d|       y )	Nr   r   r`   r   re   rS   rR   rT   z7(some_instance)===

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

Traceback (most recent call last):
ra   )rX   rj   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  sd    4(,-6 & 
 	 B	
 	/r   c           
      x    d}| j                  t        |      dgddj                  t        |                   y )Nr   r   ra   re   >                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                     | j                  t        d      g dd      \  }}| j                  |       | j                  d|       y )Nr   r   r   re   r   5(some_schema)===

Traceback (most recent call last):
)rX   rj   rL   r   r   s      r   )test_schema_is_invalid_JSON_pretty_outputz1TestCLI.test_schema_is_invalid_JSON_pretty_output
  sJ    #456 & 
 	 F	
r   c           
          d\  }}| j                  t        ||      dgddj                  t        |                   y)M
        Only the schema error is reported, as we abort immediately.
        )r   also not valid JSON!r`   ra   re   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|F+, 	 		
r   c                     | j                  t        dd      g dd      \  }}| j                  |       | j                  d|       | j	                  d|       y	)
r   r   r   r`   r   re   r   r   rb   Nr   r   s      r   <test_schema_and_instance_are_both_invalid_JSON_pretty_outputzDTestCLI.test_schema_and_instance_are_both_invalid_JSON_pretty_output(  sf     -4
 N & 	
 	 F	
 	&1r   c                 F    | j                  t        d      g ddd       y )Nr   r   )rd   nonexisting_instancera   re   zC                'nonexisting_instance' does not exist.
            r   r   r   s    r   test_instance_does_not_existz$TestCLI.test_instance_does_not_exist=  s(    4(> 	 	
r   c                 F    | j                  t        d      g ddd       y )Nr   r   )rp   rq   rd   r   ra   re   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_outputH  s,    4(  	 	
r   c                 .    | j                  dgdd       y )Nnonexisting_schemare   %'nonexisting_schema' does not exist.
rR   rT   rH   rZ   r   s    r   test_schema_does_not_existz"TestCLI.test_schema_does_not_existZ  s!    &';	 	 	
r   c                 0    | j                  g ddd       y )N)rp   rq   r   re                   ===[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_outputb  s     =	 	 
	
r   c                 0    | j                  g ddd       y )N)rd   r   r   re   r   r   r   r   s    r   &test_neither_instance_nor_schema_existz.TestCLI.test_neither_instance_nor_schema_existo  s    E;	 	 	
r   c                 0    | j                  g ddd       y )N)rp   rq   rd   r   r   re   r   r   r   r   s    r   4test_neither_instance_nor_schema_exist_pretty_outputz<TestCLI.test_neither_instance_nor_schema_exist_pretty_outputw  s$      	 	
r   c                 H    | j                  t        dd      g ddd       y Nr   r`   rc   r   rS   rR   rG   rH   r   r   s    r   test_successful_validationz"TestCLI.test_successful_validation  (    4t<7	 	 	
r   c                 H    | j                  t        dd      g ddd       y Nr   r`   r   z"===[SUCCESS]===(some_instance)===
r   r   r   r   s    r   (test_successful_validation_pretty_outputz0TestCLI.test_successful_validation_pretty_output  (    4t<M8	 	 	
r   c                 X    | j                  t        d      t        d      dgdd       y )Nr   r   ra   r   rS   rF   rR   rG   rH   rZ   rj   r   r   s    r   #test_successful_validation_of_stdinz+TestCLI.test_successful_validation_of_stdin  s/    4(4. 	 	
r   c                 Z    | j                  t        d      t        d      g ddd       y )Nr   r   r   z===[SUCCESS]===(<stdin>)===
r   r   r   r   s    r   1test_successful_validation_of_stdin_pretty_outputz9TestCLI.test_successful_validation_of_stdin_pretty_output  s-    4(4.62 	 	
r   c                 H    | j                  t        dd      g ddd       y r   r   r   s    r   -test_successful_validation_of_just_the_schemaz5TestCLI.test_successful_validation_of_just_the_schema  r   r   c                 H    | j                  t        dd      g ddd       y 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      }|j                          | j                  t        j
                  |j                         t        |j                        }|j                  d       d|j                   d}| j                  t        |d      dd	d
|j                  j                         dz   dgdd       y )NFdelete-{"definitions": {"num": {"type": "integer"}}}
{"$ref": "#definitions/num"}1r`   rd   rb   
--base-uri/ra   r   r   tempfileNamedTemporaryFileclose
addCleanuposremovenamer   
write_textrZ   rj   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    "55UC		?#7#78,,-KLx}}o-@A6=ohoo446<
  	 		
r   c                    t        j                  d      }|j                          | j                  t        j
                  |j                         t        |j                        }|j                  d       d|j                   d}| j                  t        |d      dd	d
|j                  j                         dz   dgddd       y )NFr  r  r  r  z"1"r`   rd   rb   r  r  ra   re   r   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    "55UC		?#7#78,,-KLx}}o-@A6?ohoo446<
 6 	 
	
r   c           	      V   d}d}| j                  t              5 }| j                  t        ||      dddt	        j
                         j                         dg       d d d        t        j                        }| j                  t        j                   d	|       y # 1 sw Y   BxY w)
Nz4{"$ref": "someNonexistentFile.json#definitions/num"}r  r`   rd   rb   r  ra   rS   rR   zsomeNonexistentFile.json')r   r   rZ   rj   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 	a &"*
 / $((*"3"3"5!  
	 AKK  9:EB	 	s   ABB(c                     d}d}| j                  t              5 }| j                  t        ||      g d       d d d        t	        j
                        }| j                  |d       y # 1 sw Y   1xY w)Nz${"$ref": "foo.json#definitions/num"}r  r`   )rd   rb   r  znot@UR1ra   r  zunknown url type: 'foo.json')r   r   rZ   rj   r?   r   rO   r  s        r   test_invalid_exlicit_base_uriz%TestCLI.test_invalid_exlicit_base_uri  s|    712 	a &"*  
	 AKK 1	
	 	s   !A++A4c                 ~    | j                  t        t               | j                  t	        dd      g dddd       y )	Nz{"const": "check"}z"a"r`   rc   re   r   za: 'check' was expected
r  )assertIsr   r   rZ   rj   r   s    r   =test_it_validates_using_the_latest_validator_when_unspecifiedzETestCLI.test_it_validates_using_the_latest_validator_when_unspecified  s=     	*O<#7uM7. 	 	
r   c                 R    d}d}| j                  t        ||      g dddd       y	)
zG
        Specifically, `const` validation applies for Draft 7.
        z
            {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "const": "check"
            }
        "foo"r`   rc   re   r   zfoo: 'check' was expected
r  Nr   r   s      r   -test_it_validates_using_draft7_when_specifiedz5TestCLI.test_it_validates_using_draft7_when_specified  s9     6B70 	 	
r   c                 P    d}d}| j                  t        ||      g ddd       y)zP
        Specifically, `const` validation *does not* apply for Draft 4.
        z
            {
                "$schema": "http://json-schema.org/draft-04/schema#",
                "const": "check"
            }
            r'  r`   rc   r   r   Nr   r   s      r   -test_it_validates_using_draft4_when_specifiedz5TestCLI.test_it_validates_using_draft4_when_specified0  s6     6B7	 	 	
r   N)r   r   )2r)   r*   r+   r   r   rX   rZ   rm   rr   ru   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   B   s    #XZ1#4J


(

*
6
>'
R
8	

&	

&
$
,
(
$
0$
0 


 2*	

$



"






*
,C&
*
 
&
r   rD   c                   8    e Zd Z e       Zd Zd Zd Zd Zd Z	y)
TestParserc                 p    t        j                  g d      }| j                  |d   | j                         y )N)--validatorz2jsonschema.tests.test_cli.TestParser.FakeValidator
--instancemem://some/instancemem://some/schemarh   )r   rJ   r$  r-   r   rV   s     r   2test_find_validator_by_fully_qualified_object_namez=TestParser.test_find_validator_by_fully_qualified_object_nameG  s0    NN
	 	i,d.@.@Ar   c                 d    t        j                  g d      }| j                  |d   t               y )N)r.  r   r/  r0  r1  rh   )r   rJ   r$  r   r2  s     r   !test_find_validator_in_jsonschemaz,TestParser.test_find_validator_in_jsonschemaR  s*    NN
	 	i,o>r   c                 h   t               t               }}t        |      5  t        |      5  | j                  t              5  t        j                  |       d d d        d d d        d d d        |j                         |j                         fS # 1 sw Y   9xY w# 1 sw Y   =xY w# 1 sw Y   AxY wr   )r   r   r   r   
SystemExitr   rJ   rQ   )r   rR   rG   rH   s       r   cli_output_forzTestParser.cli_output_for\  s    !XZV$ 	%of&= 	%"":. %t$%	% 	%  &//"333% %	% 	% 	% 	%s:   B(BBB B(BBB%	!B((B1c                 v    | j                  ddd      \  }}| j                  d|       | j                  |       y )Nrp   r   r1  zinvalid choice: 'foo'r8  r   rL   r   s      r   test_unknown_outputzTestParser.test_unknown_outputc  s=    ,,
 	-v6 r   c                 z    | j                  ddddd      \  }}| j                  d|       | j                  |       y )Nrp   rq   r   r   r1  z3--error-format can only be used with --output plainr:  r   s      r   test_useless_error_formatz$TestParser.test_useless_error_formatk  sG    ,,e

 	A	
 	 r   N)
r)   r*   r+   r1   r-   r3  r5  r8  r;  r=  r   r   r   r,  r,  C  s$    "$M	B?4!
!r   r,  c                       e Zd Zd Zd Zd Zy)TestCLIIntegrationc                     t        j                  t        j                  ddddgt         j                        }| j                  d|       y )N-mpipshow
jsonschemarH   s   License: MIT)
subprocesscheck_outputsys
executableSTDOUTr   )r   outputs     r   test_licensezTestCLIIntegration.test_licensey  s=    ((^^T5&,?$$
 	ov.r   c                     t        j                  t        j                  dddgt         j                        }|j                  d      j                         }| j                  |t        j                  d             y )NrA  rD  z	--versionrE  zutf-8)
rF  rG  rH  rI  rJ  decodestriprO   r
   version)r   rP  s     r   test_versionzTestCLIIntegration.test_version  s_    ))^^T<=$$
 ..)//1("2"2<"@Ar   c                    t        j                  t        j                  ddgt         j                        }t        j                  t        j                  dddgt         j                        }| j                  ||       y )NrA  rD  rE  z--help)rF  rG  rH  rI  rJ  rO   )r   rK  output_for_helps      r   #test_no_arguments_shows_usage_notesz6TestCLIIntegration.test_no_arguments_shows_usage_notes  sf    ((^^T<0$$
 %11^^T<:$$
 	1r   N)r)   r*   r+   rL  rQ  rT  r   r   r   r?  r?  x  s    /B	2r   r?  )(
contextlibr   r   ior   r<   r   pathlibr   textwrapr   unittestr	   r  rF  rH  r
  	importlibr
   ImportErrorimportlib_metadata
pyrsistentr   rD  r   r   r   jsonschema.exceptionsr   r   r   jsonschema.validatorsr   r   r1   r:   rB   rD   r,  r?  r   r   r   <module>r`     s    7        	  
 *"  A A 
 <&M~
h ~
B2! 2!j2 2S  *)*s   B 	BB