
    Kcw                     .   d 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
mZ ddlmZ ddlZddlmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZ 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% n# e&$ r	 ddlm%Z% Y nw xY wej'        j(        Z) G d de          Z* G d de          Z+ G d de          Z,d Z- G d de          Z.d Z/ G d de          Z0 G d de          Z1 G d de          Z2 G d de          Z3 G d d e          Z4d! Z5d" Z6d# Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>ej?        d+             Z@ej        A                    ejB        jC        d,k    d-.          d/             ZDeEd0k    re,F                                 dS dS )1z4
Tests for traitlets.config.application.Application
    N)StringIO)TemporaryDirectory)TestCase)mark)	BoolBytesDict	HasTraitsIntegerListSetTupleUnicode)Application)Configurable)ConfigKVArgParseConfigLoader)check_help_all_outputcheck_help_outputget_output_error_code)mockc                      e Zd Z edd                              d          Z edd                              d          Z edd	                              d          Z e	g                               d          Z
 e	 e                                          d          Z e                                dd
          ZdS )Foor   z.
    The integer i.

    Details about i.
    helpTconfig   zThe integer j.BrianzFirst name.+r   multiplicityN)__name__
__module____qualname__r   tagijr   namer   lalir	   fdict     Glib/python3.11/site-packages/traitlets/config/tests/test_application.pyr   r   $   s        		 	 	 
cc  	()))--T-::A77///3343@@D	bT	"	"B	ggii		D		)	)BDFFJJdJ55EEEr.   r   c                      e Zd Z edd                              d          Z edd                              d          Z ed                              dd	          Z	 e
                                dd
	          Z e                                d          Z e e                                          d          Z e e             e            d                              d          ZdS )Barr   The integer b.r   Tr   zEnable bar.r-   *r!   r    )value_trait)r'   b)per_key_traitsN)r#   r$   r%   r   r&   r5   r   enabledr   tbr   asetr	   bdictidictr   key_dictr-   r.   r/   r1   r1   5   s
       ()))--T-::Ad4m,,,000==G	rd	5	5B35599Ds933DDFFJJdJ##EDWWYY'''++4+88Et#A#ABBBFFdFSSHHHr.   r1   c                   l   e Zd ZU  ed          Z edd                              d          Z ee	e
g          Z edd                              d          Z ed	dd
          Zi Zej        ej        ej        f         ed<   e                    ej                   e                    ddddddddddd
           i Zej        ej        ej        f         ed<   e                    ej                   e                    dddiidfdddiidfddej        iidfd           d  Zd! Zd"S )#MyAppmyappFzIs the app running?r   Tr    zLoad this config filez yes the name is wrong on purposezAShould print a warning if `MyApp.warn-typo=...` command is passed)r   r   aliaseszFoo.i)zFoo.jz`j` terse help msgzFoo.namezFoo.lazFoo.lizBar.tbz	Bar.bdictzBar.enabledzApplication.log_level)
)fooir'   )r(   foojr)   r*   r+   r8   Dr7   enablez	log-levelflagsr1   r7   zSet Bar.enabled to TruezSet Bar.enabled to Falser   	log_levelzset level=CRITICAL))rE   e)ddisablecritc                 0    t          |           | _        d S N)parent)r   fooselfs    r/   init_foozMyApp.init_fooh       d###r.   c                 0    t          |           | _        d S rM   )r1   barrP   s    r/   init_barzMyApp.init_bark   rS   r.   N)r#   r$   r%   r   r)   r   r&   runningr   r1   r   classesconfig_file	warn_tpyorA   tr	   Any__annotations__updater   rF   loggingCRITICALrR   rV   r-   r.   r/   r>   r>   @   s        77Dd54555999FFGdC:G'"#:;;;??t?LLK*P  I %'GQVAE15L!&&&NN;&'''NN":$#0	
 	
   #%E16!%,$$$	LL"###	LL$y$&78:ST %	5'9:<VW#k73C%DEG[\	
 	
  $ $ $$ $ $ $ $r.   r>   c                     d | D             S )Nc                     g | ]	}|j         
S r-   )r#   ).0klasss     r/   
<listcomp>z"class_to_names.<locals>.<listcomp>p   s    000uEN000r.   r-   )rX   s    r/   class_to_namesrf   o   s    000000r.   c                   Z   e 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 ej         e e!d           d          d             Z" ej         e e!d           d          d              Z#d! Z$d" Z%d# Z&d$S )%TestApplicationc                    t                      }t          t          j                  }t          j        |          }d|_        d|_        |g|j        _        |j        	                    d           d|
                                v sJ d S )NrG   z%(message)sz%Y-%m-%d %H:%Mhello)r   r>   r_   INFOStreamHandler
log_formatlog_datefmtloghandlersinfogetvalue)rQ   streamapphandlers       r/   test_logzTestApplication.test_logt   s|    gl+++'//&*#9W&//++++++++r.   c                     t                      }|                    dg           |                                 |j        j        dk    sJ d S )Nz--Foo.name=11)r>   
initializerR   rO   r)   rQ   ru   s     r/   test_no_eval_cli_textz%TestApplication.test_no_eval_cli_text   sH    gg'(((w|s""""""r.   c                    t                      }|                     |j        d           |                     |j        d           |                     |j        t           t
          t          g           |                     |j        d           d S )Nr?   Fr@   )r>   assertEqualr)   rW   rX   r1   r   rY   r{   s     r/   
test_basiczTestApplication.test_basic   sx    gg7+++e,,,uc3&7888"-----r.   c                    t                      }|                     t          |                                          g d           |                     t          |                                          g d           |                     t          |                    t
          g                    dg           |                     t          |                    t
          g                    g d           |                     t          |                    t          g                    dg           |                     t          |                    t          g                    ddg            G d d	t
                    }|                     t          |                    t          g                    dg           |                     t          |                    t          g                    ddg           d S )
N)r   r>   r1   r   )r   LoggingConfigurableSingletonConfigurabler   r>   r1   r   r   )r   r   r   r   r   r   r1   c                       e Zd ZdS )2TestApplication.test_mro_discovery.<locals>.MyApp2Nr#   r$   r%   r-   r.   r/   MyApp2r              Dr.   r   )r>   assertSequenceEqualrf   _classes_with_config_traits_classes_inc_parentsr   r   r1   )rQ   ru   r   s      r/   test_mro_discoveryz"TestApplication.test_mro_discovery   s   gg  3::<<==222	
 	
 	
 	  3335566  	
 	
 	
 	  3::K=IIJJ]O	
 	
 	
 	  333[MBBCC[[[	
 	
 	

 	  0O0OQTPU0V0V!W!WZ_Y`aaa  333SE::;;ne=T	
 	
 	
	 	 	 	 	[ 	 	 	 	  0O0OQTPU0V0V!W!WZ_Y`aaa  333SE::;;ne=T	
 	
 	
 	
 	
r.   c                 |   t                      }|                    g d           |j        }t          |           |                     |j        j        d           |                     |j        j        d           |                     |j        j	        d           |                     |j         j
        d           d S )Nz--i=10z
--Foo.j=10z--enable=Falsez--log-level=50
   F2   )r>   parse_command_liner   printr~   r   r'   r(   r1   r7   rG   rQ   ru   r   s      r/   test_configzTestApplication.test_config   s    gg  	
 	
 	
 fr***r***+U333/44444r.   c                 Z   t                      }|                    d                                           |j        dgk    sJ |j        }|j        j        ddgk    sJ |j        j        ddgk    sJ |j        j	        dk    sJ | 
                    |j        j        dd	h           |                                 |j        j        ddgk    sJ |j        j        ddgk    sJ |                                 | 
                    |j        j        dd	h           |j        j	        dk    sJ d S )
NzT--li 1 --li 3 --la 1 --tb AB 2 --Foo.la=ab --Bar.aset S1 --Bar.aset S2 --Bar.aset S12r      ry   ab)ABS1S2)r>   r   split
extra_argsr   r   r+   r*   r1   r8   r~   r9   rR   rO   rV   rU   r   s      r/   test_config_seq_argsz$TestApplication.test_config_seq_args   s:   ggbhhjj	
 	
 	
 ~#&&&&z}A&&&&z}d++++z}''''4,777wzaV####wzc4[((((d|444wzW$$$$$$r.   c                 :   t                      }|                    d                                           dddd}dddd}dd	d
d}|j        }|j        j        |k    sJ |                     |j        j        |           |                     |j        j	        |           |
                                 |                     |j        j        |           |                                 |j        j        |k    sJ |                     |j        j	        |           d S )Nz--Foo.fdict a=1 --Foo.fdict b=b --Foo.fdict c=3 --Bar.bdict k=1 -D=a=b -D 22=33 --Bar.idict k=1 --Bar.idict b=2 --Bar.idict c=3 ry   r5   3)ar5   c33)kr   22r      r   )r   r5   r   )r>   r   r   r   r1   r;   assertDictEqualr   r,   r:   rR   r~   rO   rV   rU   )rQ   ru   r,   r:   r;   r   s         r/   test_config_dict_argsz%TestApplication.test_config_dict_args   s   gg??Duww	
 	
 	

 #..400aa((z5((((VZ-u555VZ-u555...w}%%%%.....r.   c                 `   t                      }|                    g d           |                                 |                                 |                     |j        j        d           |                     |j        j        d           |                     |j        j	        d           d S )Nr   r   F)
r>   r   rR   rV   r~   rO   r'   r(   rU   r7   r{   s     r/   test_config_propagationz'TestApplication.test_config_propagation   s    gg[[[\\\B'''B'''%00000r.   c                 P   d} G d dt                     } |            }t                      5 }t          ||          }t          |d          5 }|                    ddg           ddd           n# 1 swxY w Y   |                    dg           d	|j        j        v sJ |j        j        j        d
k    sJ |j        d
k    sJ |	                    ||g           |j
        sJ |j        j        j        d
k    sJ |j        d
k    sJ 	 ddd           dS # 1 swxY w Y   dS )z<Test that loading config files does not override CLI options	config.pyc                       e Zd Z e                                d          Z e                                d          ZddiZdS )2TestApplication.test_cli_priority.<locals>.TestAppTr   vTestApp.valueN	r#   r$   r%   r   r&   valuer   config_file_loadedrA   r-   r.   r/   TestAppr      sK        GIIMMM..E!%4!8!8O,GGGr.   r   w c.TestApp.value = 'config file'
$c.TestApp.config_file_loaded = True
N--v=clir   clipath)r   r   pjoinopen
writelinesr   r   r   r   load_config_filer   )rQ   r)   r   ru   tdrY   fs          r/   test_cli_priorityz!TestApplication.test_cli_priority   s   	- 	- 	- 	- 	-k 	- 	- 	-
 gii!! 	&RD//Kk3'' 18:ab                
 ""I;///cj00000:%+u44449%%%%  RD 111)))):%+u44449%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s6   !DA3'D3A7	7D:A7	;BDD"Dc                    d} G d dt                     } |            }t                      5 }t          ||          }t          |d          5 }|                    ddg           d d d            n# 1 swxY w Y   |                    dg           |j        }d|j        j        v sJ |j        j        j        d	k    sJ |j        d	k    sJ |	                    ||g
           |j
        sJ |                    |           |j        j        j        d	k    sJ |j        d	k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   c                       e Zd Z e                                d          Z e                                d          ZddiZdS ):TestApplication.test_ipython_cli_priority.<locals>.TestAppTr   r   )r   z	some helpNr   r-   r.   r/   r   r     sL        GIIMMM..E!%4!8!8:;GGGr.   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   update_config)rQ   r)   r   ru   r   rY   r   
cli_configs           r/   test_ipython_cli_priorityz)TestApplication.test_ipython_cli_priority  s    	< 	< 	< 	< 	<k 	< 	< 	<
 gii!! 	&RD//Kk3'' 18:ab                
 ""I;/// Jcj00000:%+u44449%%%%  RD 111)))) j))):%+u44449%%%%%-	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s6   !D7A3'D73A7	7D7:A7	;B.D77D;>D;c                 ~     G d dt                     } |            }|                    dg           |j        J d S )Nc                   0    e Zd ZddiZ edd          ZdS )0TestApplication.test_cli_allow_none.<locals>.AppoptApp.optT)
allow_noner   Nr#   r$   r%   rA   r   r   r-   r.   r/   Appr   5  s,        i(G'T$777CCCr.   r   z
--opt=None)r   r   r   )rQ   r   ru   s      r/   test_cli_allow_nonez#TestApplication.test_cli_allow_none4  sc    	8 	8 	8 	8 	8+ 	8 	8 	8 cee~...wr.   c                    t                      }|                    dg           |                                 |                     |j        j        d           t                      }|                    dg           |                                 |                     |j        j        d           t                      }|                    dg           |                                 |                     |j        j        d           t                      }|                    dg           |                                 |                     |j        j        d           d S )N	--disableFz-d--enableTz-e)r>   r   rV   r~   rU   r7   r{   s     r/   
test_flagszTestApplication.test_flags=  s    gg}---%000ggv&&&%000gg
|,,,$///ggv&&&$/////r.   c                    t                      }t          j                    }t          j        |          5  |                                 d d d            n# 1 swxY w Y   |                                }|                     |d           |                     |d           |                     d|           |                     d|           d S )Nz(?<!-)-e, --enable\bz(?<!-)-d, --disable\bz#Equivalent to: [--Bar.enabled=True]z$Equivalent to: [--Bar.enabled=False])	r>   ior   
contextlibredirect_stdoutprint_flag_helprs   assertRegexassertInrQ   ru   stdouthmsgs       r/   test_flags_help_msgz#TestApplication.test_flags_help_msgR  s    gg'// 	" 	"!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"  67777888;TBBB<dCCCCC   AAAc                 T   t                      }|                    ddg           |                                 |                     |j        j        d           |                                 |                     |j        j        d           t                      }|                    ddg           |                                 |                     |j        j        d           |                                 |                     |j        j        d           t                      }|                    ddg           |                                 |                     |j        j        d           |                                 |                     |j        j        d           d S )	Nz--i=5z--j=10   r   z-i=5z-j=10z--fooi=5z	--fooj=10)r>   r   rR   r~   rO   r'   r(   r{   s     r/   test_aliaseszTestApplication.test_aliases]  sX   gg2333A&&&B'''gg0111A&&&B'''gg
K8999A&&&B'''''r.   c                     G d dt                     } |            }|                    ddg           |                     |j        d            |            }|                    ddg           |                     |j        d            |            }|                    d	d
g           |                     |j        d           d S )Nc                   .    e Zd Z ed          ZddiZdS )@TestApplication.test_aliases_multiple.<locals>.TestMultiAliasAppTr   )r   rU   quxzTestMultiAliasApp.fooN)r#   r$   r%   r   rO   rA   r-   r.   r/   TestMultiAliasAppr   u  s+        '&&&C*,CDGGGr.   r   z-fr   r   z--bar4   z--qux5r   )r   r   r~   rO   )rQ   r   ru   s      r/   test_aliases_multiplez%TestApplication.test_aliases_multiples  s    	E 	E 	E 	E 	E 	E 	E 	E  !!c{+++!$$$!!~...!$$$!!~...!$$$$$r.   c                    t                      }t          j                    }t          j        |          5  |                                 d d d            n# 1 swxY w Y   |                                }|                     |d           |                     |d           |                     d|           |                     d|           |                     d|           d S )Nz(?<!-)-i, --fooi\bz(?<!-)-j, --fooj\bzEquivalent to: [--Foo.i]zEquivalent to: [--Foo.j]zEquivalent to: [--Foo.name])	r>   r   r   r   r   print_alias_helprs   r   r   r   s       r/   test_aliases_help_msgz%TestApplication.test_aliases_help_msg  s   gg'// 	# 	#  """	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#  455545550$7770$7773T:::::r   c                 Z    G d dt                      G fddt                    } |            }|                    dg           |j        dk    sJ  |            }t	          j        t          d          5  |                    d	g           d
d
d
           d
S # 1 swxY w Y   d
S )z;Check ability to override handling for unrecognized aliasesc                       e Zd Zd ZdS )=TestApplication.test_alias_unrecognized.<locals>.StrictLoaderc                 @    | j                             d|z             d S )NzUnrecognized alias: %s)parsererror)rQ   args     r/   _handle_unrecognized_aliaszXTestApplication.test_alias_unrecognized.<locals>.StrictLoader._handle_unrecognized_alias  s$    !!":S"@AAAAAr.   N)r#   r$   r%   r   r-   r.   r/   StrictLoaderr     s(        B B B B Br.   r   c                       e Zd Z fdZdS )BTestApplication.test_alias_unrecognized.<locals>.StrictApplicationc                 .     ||||| j                   S )N)rX   rp   rp   )rQ   argvrA   rF   rX   r   s        r/   _create_loaderzQTestApplication.test_alias_unrecognized.<locals>.StrictApplication._create_loader  s     #|D'5'txXXXXr.   N)r#   r$   r%   r   )r   s   r/   StrictApplicationr     s5        Y Y Y Y Y Y Yr.   r   z--log-level=20   r   )matchz--unrecognized=20N)r   r   rz   rG   pytestraises
SystemExit)rQ   r   ru   r   s      @r/   test_alias_unrecognizedz'TestApplication.test_alias_unrecognized  sJ   	B 	B 	B 	B 	B1 	B 	B 	B	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y  !!()***}""""!!]:S111 	2 	2NN/0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   <B  B$'B$c                    t                      }|                    ddg           |                                 |                     |j        j        d           |                     |j        j        d           |                    ddg           |                                 |                     |j        j        d           |                     |j        j        d           d	S )
z9test that setting flags doesn't clobber existing settings	--Bar.b=5r   Fr   r   z
--Bar.b=10Tr   N)r>   r   rV   r~   rU   r7   r5   r{   s     r/   test_flag_clobberz!TestApplication.test_flag_clobber  s    gg[9:::%000A&&&
L9:::$///B'''''r.   c                 v   t                      }t          t          j                  }t          j        |          g|j        _        t                      }d|j        _        ||_	        | 
                    d|                                           | 
                    d|                                           d S )Nrj   WOOOO	warn_typorZ   )r   r>   r_   rl   rm   rp   rq   r   r  r   r   rs   )rQ   rt   ru   cfgs       r/   test_warn_autocorrectz%TestApplication.test_warn_autocorrect  s    gl+++#1&99:hh%	
k6??#4#4555k6??#4#455555r.   c                    t                      }t          j        |j        _        t                      }|                    |           |                     |j        t          j                   |                     |j        j        j        t          j                   |                    dg           |                     |j        t          j	                   |                     |j        j        j        t          j	                   d S )Nz--crit
r   r_   WARNr>   rG   r   r~   r   rz   r`   rQ   r  ru   s      r/   test_flatten_flagsz"TestApplication.test_flatten_flags  s    hh%l	gg#555)3W\BBBz"""(8999)3W5EFFFFFr.   c                    t                      }t          j        |j        _        t                      }|                    |           |                     |j        t          j                   |                     |j        j        j        t          j                   |                    ddg           |                     |j        t          j	                   |                     |j        j        j        d           d S )Nz--log-levelr`   r  r  s      r/   test_flatten_aliasesz$TestApplication.test_flatten_aliases  s    hh%l	gg#555)3W\BBBz2333(8999)3Z@@@@@r.   c                    t                      }|                    g d           |                                 |                     |j        j        d           |                     |j        j        d           |                     |j        ddg           t                      }|                    g d           |                                 |                     |j        j        d           |                     |j        j        d           |                     |j        g d           t                      }|                    g d	           |                     |j        g d
           d S )N)r  extraargsr   Fr   r  r  )r  --r  r   r  T)r  r   r  )r   z--la-r  z	--Bar.b=1r  r  r  )r  r  r  )r>   r   rV   r~   rU   r7   r5   r   r{   s     r/   test_extra_argszTestApplication.test_extra_args  sQ   ggJJJKKK%000A&&&'6):;;;ggPPPQQQ$///A&&&)G)G)GHHHgg___```)<)<)<=====r.   c                 N    t                      }|                    dg           d S )Nu   ünîcødé)r>   r   r{   s     r/   test_unicode_argvz!TestApplication.test_unicode_argv  s'    gg/////r.   c                 J    t                      }|                                 d S N)r>   document_config_optionsr{   s     r/   test_document_config_optionz+TestApplication.test_document_config_option  s#    gg##%%%%%r.   c                 R    t                      }d|                                v sJ d S )Nr2   )r>   generate_config_filer{   s     r/   test_generate_config_filez)TestApplication.test_generate_config_file  s.    gg3#;#;#=#=======r.   c                     G d dt                     } G d dt          t          |          }t                      }|j                            |           |                                }t          |           |                     d|           |                     d|           | 	                    d|           |                     d|           |                     d	|           |                     d
|           |                     d|           |                     d|           |                     d|           | 
                    |                    d          d           |                     d|           | 	                    d|           | 
                    |                    d          d           | 	                    d|           d S )Nc                   P    e Zd Z edd                              d          ZdS )QTestApplication.test_generate_config_file_classes_to_include.<locals>.NotInConfigxzFFrom hidden class

            Details about from_hidden.
            r   Tr   N)r#   r$   r%   r   r&   from_hiddenr-   r.   r/   NotInConfigr&    s@        !'   cc KKr.   r)  c                       e Zd ZdS )NTestApplication.test_generate_config_file_classes_to_include.<locals>.NoTraitsNr   r-   r.   r/   NoTraitsr+    r   r.   r,  r2   z# Foo(Configurable)z# Configurablez# NoTraits(Foo, Bar)z# c.NoTraits.iz# c.NoTraits.jz# c.NoTraits.nz#  See also: Foo.jz#  See also: Bar.bzDetails about i.r   z# c.NoTraits.from_hiddenz#  See also: NotInConfig.zDetails about from_hidden.)r
   r   r1   r>   rX   appendr"  r   r   assertNotInr~   count)rQ   r)  r,  ru   conf_txts        r/   ,test_generate_config_file_classes_to_includez<TestApplication.test_generate_config_file_classes_to_include  s   	 	 	 	 	) 	 	 		 	 	 	 	sC 	 	 	 gg8$$$++--h&111+X666)8444,h777 	&111&111&111*H555*H555(:;;Q??? 	0(;;;4h???(DEEqIII11111r.   c                 T   t                      }t          j                    |_        d}t	          d          5 }t          t          ||          d          5 }|                    d           d d d            n# 1 swxY w Y   t	          d          5 }t          t          ||          d          5 }|                    d           d d d            n# 1 swxY w Y   |                    |||g           |	                                 | 
                    |j        j        d           |                    |||g           |	                                 | 
                    |j        j        d	           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
Nr   _1r   zget_config().MyApp.Bar.b = 1_2zget_config().MyApp.Bar.b = 2r   r   r   )r>   r_   	getLoggerrp   r   r   r   writer   rV   r~   rU   r5   )rQ   ru   r)   td1f1td2f2s          r/   test_multi_filezTestApplication.test_multi_file  su   gg#%%%% 	/eC&&,, 978889 9 9 9 9 9 9 9 9 9 9 9 9 9 9#D)) /S%T**C00 =BHH;<<<= = = = = = = = = = = = = = =$$Tc
$;;;  A...$$Tc
$;;;  A.../ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s~   FA9-F9A=	=F A=	FF2CFCFCBF9FF			FF		FF!$F!
assertLogszrequires TestCase.assertLogsreasonc                    t                      }t          j                    |_        |j                            t          j                   d}t          d          5 }t          t          ||dz             d          5 }|	                    d           d d d            n# 1 swxY w Y   t          t          ||dz             d          5 }t          j        ddd	ii|           d d d            n# 1 swxY w Y   |                     |j        t          j                  5 }|                    ||g
           |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        j        d	k    sJ d                    |j                  }d|v sJ d|v sJ t          ||dz             |v sJ t          ||dz             |v sJ d S )Nr   r3  z.pyr   zget_config().Bar.b = 1z.jsonr1   r5   r   r   
	Collisionz1 ignored, using 2)r>   r_   r5  rp   setLevelrl   r   r   r   r6  jsondumpr<  WARNINGr   rV   rU   r5   joinoutputrQ   ru   r)   r   r   capturedrG  s          r/   test_log_collisionsz#TestApplication.test_log_collisions/  s   gg#%%&&&%% 	eBu--s33 2q01112 2 2 2 2 2 2 2 2 2 2 2 2 2 2eBw//55 0	53(+Q///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0'/:: h$$T$555              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 wyA~8?++f$$$$#v----R&&&0000R((F222222s~   "E2>B E2 B$	$E2'B$	($E2C2&E22C6	6E29C6	:(E2"-EE2E	E2"E	#E22E69E6c                 B   t                      }t          j                    |_        d}t	                      5 }t          t          ||          d          5 }|                    d           d d d            n# 1 swxY w Y   |                     |j        t          j	                  5 }|
                    ||g           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d                    |j                  }|                     d|           d S )Nr   r   syntax error()r   r@  SyntaxError)r>   r_   r5  rp   r   r   r   r6  r<  ERRORr   rF  rG  r   rH  s          r/   test_log_bad_configz#TestApplication.test_log_bad_configD  s   gg#%%!! 	6ReBoos++ *q()))* * * * * * * * * * * * * * *'-88 6H$$T$5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6
 8?++mV,,,,,sY   C$A8,C$8A<	<C$?A<	 (C$(CC$C	C$C	C$$C(+C(c                    t                      }d|_        t          j                    |_        d}t                      5 }t          t          ||          d          5 }|                    d           d d d            n# 1 swxY w Y   | 	                    t                    5  |                    ||g           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NTr   r   rL  r   )r>   raise_config_file_errorsr_   r5  rp   r   r   r   r6  assertRaisesrM  r   )rQ   ru   r)   r   r   s        r/   test_raise_on_bad_configz(TestApplication.test_raise_on_bad_configQ  s   gg'+$#%%!! 	6ReBoos++ *q()))* * * * * * * * * * * * * * *"";// 6 6$$T$5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6sY   C!A?3C!?B	C!B	C!$C	=C!	C	C!C	C!!C%(C%c                    t                                           }|                    dg           |                     |j        t
                     |                     |j        j        |           t                                            t
                                           t                                           }|                    ddg           |                     |j        t
                     |                     |j        j        t                     |                     |j        j        |           |                     |j        j        j        |j                   t                                            t
                                           t                                           }|                    ddg           |                     |j        t
                     |                     |j        j        t                     |                     |j        j        j                   |                     |j        j        |           |                     |j        j        j        |j                   dS )z/Try all ways to specify how to create sub-apps.sub1sub2sub3N)Rootinstancer   assertIsInstancesubappSub1assertIsrN   clear_instanceSub2Sub3
assertTrueflagr{   s     r/   test_subcommands_instanciationz.TestApplication.test_subcommands_instanciation\  s   mmoox(((cj$///cj'---mmoo/000cj$///cj/666cj'---cj'.
;;;mmoo/000cj$///cj/666
).///cj'---cj'.
;;;;;r.   c                 @   t                      }t          j                    |_        d}t	          d          5 }t          ||          }t          |d          5 }|                    dg           d d d            n# 1 swxY w Y   |                    ||g           | 	                    t          |j                  d           | 	                    |j        d         |           |                                 | 	                    |j        d           t          |d          5 }|                    d	g           d d d            n# 1 swxY w Y   |                    ||g           | 	                    t          |j                  d           | 	                    |j        d
           |                     t                    5  d|_        d d d            n# 1 swxY w Y   |j                            d           | 	                    t          |j                  d           |                    ||g           | 	                    t          |j                  d           | 	                    |j        d
           d d d            d S # 1 swxY w Y   d S )Nr   r3  r   zc.MyApp.running = True
r   r   r   Tzc.MyApp.running = False
Fz/fooz/bar)r>   r_   r5  rp   r   r   r   r   r   r~   lenloaded_config_filesstartrW   rR  AttributeErrorr-  )rQ   ru   r)   r7  rY   r   s         r/   test_loaded_config_filesz(TestApplication.test_loaded_config_files|  sk   gg#%%%%  	1T**Kk3'' ;189:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;   SE 222S!8991===S4Q7EEEIIKKKS[$/// k3'' <19:;;;< < < < < < < < < < < < < < <   SE 222S!8991===S[%000 "">22 1 1*0'1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 #**6222S!8991===   SE 222S!8991===S[%000A 	1  	1  	1  	1  	1  	1  	1  	1  	1  	1  	1  	1  	1  	1  	1  	1  	1  	1s   !JA<0J<B 	 JB 	B#J'E
>J
E	JE	A8J
GJG"	"J%G"	&B JJJN)'r#   r$   r%   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r   r#  r1  r;  r   skipifhasattrr   rJ  rO  rS  rc  ri  r-   r.   r/   rh   rh   s   s_       	, 	, 	,# # #. . .'
 '
 '
R5 5 5"% % %$/ / /(1 1 1& & &6"& "& "&H  0 0 0*	D 	D 	D( ( (,% % %$
; 
; 
;2 2 20
( 
( 
(
6 
6 
6
G 
G 
G
A 
A 
A> > >(0 0 0& & &> > >#2 #2 #2J/ / /" T[WWX|444=[\\\3 3 ]\3( T[WWX|444=[\\\
- 
- ]\
-	6 	6 	6< < <@$1 $1 $1 $1 $1r.   rh   c                     G d dt                     } |t          j                              }t          j        t
                    5  |                    g d           d d d            n# 1 swxY w Y   |                     d          d         }|j        }d|v sJ d|v sJ d	|v sJ |j	        t          j
        k    sJ d S )
Nc                   .    e Zd ZddiZ ed          ZdS )"test_cli_multi_scalar.<locals>.Appr   r   Tr   Nr   r-   r.   r/   r   rn    s*        )$gT"""r.   r   r   )--optry   ro  r   callzError loading argumentzApp.opt=['1', '2']zopt only accepts one value)r   r_   r5  r  r  r  r   get_recordsmessagelevelnor`   )caplogr   ru   recordrs  s        r/   test_cli_multi_scalarrw    s7   # # # # #k # # # #'#%%
&
&
&C	z	"	" = =;;;<<<= = = = = = = = = = = = = = =''+FnG#w....7****'72222>W-------s   
A..A25A2c                       e Zd ZddiZdS )rX  rU  )z,traitlets.config.tests.test_application.Sub1zimport stringN)r#   r$   r%   subcommandsr-   r.   r/   rX  rX    s        QKKKr.   rX  c                   $    e Zd Z ed          ZdS )r`  FN)r#   r$   r%   r   rb  r-   r.   r/   r`  r`    s        4;;DDDr.   r`  c                       e Zd ZdS )r_  Nr   r-   r.   r/   r_  r_    s        Dr.   r_  c                   .    e Zd ZU edfd dfdZeed<   dS )r\  zApplication classc                 $    t          | d          S )NT)rN   rb  )r`  )roots    r/   <lambda>zSub1.<lambda>  s    d$T::: r.   factory)rV  rW  ry  N)r#   r$   r%   r_  ry  dictr]   r-   r.   r/   r\  r\    sG         *+::IF K     r.   r\  c                   &     e Zd ZdZdZ fdZ xZS )DeprecatedAppFc                      d _          fd}t          j                             j        d|          5  t                                          |||           d d d            d S # 1 swxY w Y   d S )NTc                      d_         d S )NT)parent_called)r  rQ   s    r/   _capturez/DeprecatedApp._config_changed.<locals>._capture  s    !%Dr.   debug)override_calledr   patchobjectrp   super_config_changed)rQ   r)   oldnewr  	__class__s   `    r/   r  zDeprecatedApp._config_changed  s    #	& 	& 	& 	& 	& Ztx(;; 	4 	4GG##D#s333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   $A&&A*-A*)r#   r$   r%   r  r  r  __classcell__)r  s   @r/   r  r    sB        OM4 4 4 4 4 4 4 4 4r.   r  c                      t                      } | j        rJ | j        rJ t          dddii          | _        | j        sJ | j        sJ d S )NAr5   r   )r  r  r  r   r   )ru   s    r/   test_deprecated_notifierr    se    
//C""""    sCj)**CJr.   c                  .    t          t                     d S r  )r   r#   r-   r.   r/   test_help_outputr    s    hr.   c                  .    t          t                     d S r  )r   r#   r-   r.   r/   test_help_all_outputr    s    (#####r.   c                  n    t          t          j        dt          dg          \  } }}|dk    sJ d| vsJ d S )N-mz--show-configr   show_configr   sys
executabler#   outerrecs      r/   test_show_config_clir    sD    (#.$/)Z[[LCb7NNN######r.   c                  n    t          t          j        dt          dg          \  } }}|dk    sJ d| vsJ d S )Nr  z--show-config-jsonr   r  r  r  s      r/   test_show_config_json_clir    sE    (#.$J^)_``LCb7NNN######r.   c                     t                      }d|j        _        |j         t          |d          }|                                 |                                 \  }}d|v sJ d|v sJ d|vsJ d S )Nr   T)r   r  r>   zi = 5OtherApp)r   r>   r'   r  rg  
readouterr)capsysr  ru   r  r  s        r/   test_show_configr    s    
((CCIKLL
s
-
-
-CIIKKK  ""HCc>c>S      r.   c                    t                      }d|j        _        |j         t          |d          }|                                 |                                 \  }}t          j        |          }t          |          |k    sJ d S )Nr   T)r   show_config_json)r   r>   r'   r  rg  r  rC  loads)r  r  ru   r  r  	displayeds         r/   test_show_config_jsonr    s{    
((CCIKLL
sT
2
2
2CIIKKK  ""HC
3I)######r.   c                  `   ddl m ddlm} m}  G fdd|           G fdd|           G fdd	|           } |            }|                    d
g           |j        j        j        dk    sJ t          t          |                                                    dk    sJ d S )Nr   Int)r   r   c                   P    e Zd Z  d                              d          ZdS )test_deep_alias.<locals>.Foor   )default_valueTr   N)r#   r$   r%   r&   valr  s   r/   r   r    s2        c"""&&d&33r.   r   c                   "     e Zd Z fdZ xZS )test_deep_alias.<locals>.Barc                 \     t                      j        |i |  |           | _        d S rM   )r  __init__rO   )rQ   r  kwargsr   r  s      r/   r  z%test_deep_alias.<locals>.Bar.__init__  s7    EGGd-f---s$'''DHHHr.   )r#   r$   r%   r  r  )r  r   s   @r/   r1   r    s>        	( 	( 	( 	( 	( 	( 	( 	( 	( 	(r.   r1   c                   6     e Zd ZdZddiZgZ fdZ xZS ) test_deep_alias.<locals>.TestApptestr  zBar.Foo.valc                 \     t                      j        |i |  |           | _        d S rM   )r  rz   rU   )rQ   r  r  r1   r  s      r/   rz   z+test_deep_alias.<locals>.TestApp.initialize   s7    EGG////s$'''DHHHr.   )r#   r$   r%   r)   rA   rX   rz   r  )r  r1   r   s   @r/   r   r    sV        -(*	( 	( 	( 	( 	( 	( 	( 	( 	( 	(r.   r   z--val=10r   )	traitletsr  traitlets.configr   r   rz   rU   rO   r  re  listemit_alias_help)r   r   r   ru   r1   r   r  s       @@@r/   test_deep_aliasr    s;   ::::::::4 4 4 4 4 4 4l 4 4 4( ( ( ( ( ( (l ( ( (
( ( ( ( ( ( ( (+ ( ( ( '))CNNJ<   7;?b    tC''))**++a//////r.   c           	         | dz  }t          ddddt          |          diddddgd	id
          }t          |j        j                  dk    sJ |j                            d           |j                            d           t          |          5 }|                                dk    sJ 	 ddd           n# 1 swxY w Y   |	                                j
        dk    sJ dS )z7We should be able to configure additional log handlers.log_filer   filezlogging.FileHandlerDEBUG)classlevelfilenamer   console)r  rq   )versionrq   loggers)logging_configr   rr   warnz
info
warn
Nz[Application] WARNING | warn
)r   strre  rp   rq   rr   warningr   readr  r  )tmp_pathr  r  ru   
log_handles        r/   test_logging_configr  *  s^   *$H
2$ #H  $!*F 3   
 
  C& sw  A%%%% GLLGOOF 
h 3:  N222223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 "&FFFFFFFs   B>>CCc                    |                      dd           t                                                      }d|vsJ d|vsJ |                      dd           t                                                      }d|v sJ d|v sJ dS )z7Ensure logging is correctly disabled for pythonw usage.z'traitlets.config.application.IS_PYTHONWTrq   r  FN)setattrr   get_default_logging_config)monkeypatchr   s     r/   'test_get_default_logging_config_pythonwr  N  s    A4HHH]]5577FV####F""""A5III]]5577Fr.   c                 B    g fd}|                      d|           S )zCapture logging config events for DictConfigurator objects.

    This suppresses the event (so the configuration doesn't happen).

    Returns a list of (args, kwargs).
    c                  6                         | |f           d S r  )r-  )r  r  callss     r/   
_configurez caplogconfig.<locals>._configuree  s    dF^$$$$$r.   z)logging.config.DictConfigurator.configure)r  )r  r  r  s     @r/   caplogconfigr  [  sJ     E% % % % % 3  
 Lr.   pypyzTest does not work on pypyr=  c                     t                      }~t          |          dk    sJ |                                 \  }}d|vsJ t                      }d|_        ~t          |          dk    sJ dS )zEnsure we don't try to open logs in order to close them (See #722).

    If you try to configure logging handlers whilst Python is shutting down
    you may get traceback.
    r   	TracebackTr   N)r   re  r  _logging_configured)r  r  ru   r  r  s        r/   test_logging_teardown_on_errorr  q  s     --C|!!!!  ""HCc!!!! --C"C|!!!!!!r.   __main__)G__doc__r   r   rC  r_   osr  typingr[   r   tempfiler   unittestr   r  r   r  r   r   r	   r
   r   r   r   r   r   traitlets.config.applicationr   traitlets.config.configurabler   traitlets.config.loaderr   r   traitlets.tests.utilsr   r   r   r   ImportErrorr   rF  r   r   r1   r>   rf   rh   rw  rX  r`  r_  r\  r  r  r  r  r  r  r  r  r  r  r  fixturer  rj  implementationr)   r  r#   launch_instancer-   r.   r/   <module>r     sk        				   				 



           ' ' ' ' ' '              V V V V V V V V V V V V V V V V V V V V V V 4 4 4 4 4 4 6 6 6 6 6 6 B B B B B B B B a a a a a a a a a a    	6 6 6 6 6, 6 6 6"T T T T T, T T T,$ ,$ ,$ ,$ ,$K ,$ ,$ ,$^1 1 1m1 m1 m1 m1 m1h m1 m1 m1`. . ."    ;       ;   	 	 	 	 	; 	 	 	    ;   4 4 4 4 4K 4 4 4       $ $ $$ $ $$ $ $! ! !	$ 	$ 	$0 0 08!G !G !GH
 
 
   * C&+v5>Z[[" " \[", z 	 s   0A7 7BB