
    _dQs                        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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 ddlmZm Z m!Z! 	 ddl
m"Z" ejH                  jJ                  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      Z- G d de      Z. G d de      Z/ G d de      Z0 G d d e      Z1d! Z2d" Z3d# Z4d$ Z5d% Z6d& Z7d' Z8d( Z9d) Z:d* Z;ejx                  d+        Z=ej                  j}                  ej~                  j                  d,k(  d-.      d/        ZAeBd0k(  re)j                          yy# e#$ r
 ddl
m"Z" Y w xY w)1z4
Tests for traitlets.config.application.Application
    N)StringIO)TemporaryDirectory)TestCase)mark)	BoolBytesDict	HasTraitsIntegerListSetTupleUnicode)Application)Configurable)Config)check_help_all_outputcheck_help_outputget_output_error_code)mockc                   B   e Zd Z edd      j	                  d      Z edd      j	                  d      Z edd	      j	                  d      Z e	g       j	                  d      Z
 e	 e             j	                  d      Z e       j	                  dd
      Zy)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     I/usr/lib/python3/dist-packages/traitlets/config/tests/test_application.pyr   r   '   s    		 
cc  	()--T-:A7/3343@D	bT	"B	gi		D		)BFJJdJ5Er-   r   c                      e Zd Z edd      j	                  d      Z edd      j	                  d      Z ed      j	                  dd	      Z	 e
       j	                  dd
	      Z e       j	                  d      Z e e             j	                  d      Z e e        e       d      j	                  d      Zy)Barr   The integer b.r   Tr   zEnable bar.r,   *r    r   )value_trait)r&   b)per_key_traitsN)r"   r#   r$   r   r%   r4   r   enabledr   tbr   asetr	   bdictidictr   key_dictr,   r-   r.   r0   r0   8   s    ()--T-:A4m,000=G	rd	5B599Ds93DFJJdJ#EWY'++4+8E#ABFFdFSHr-   r0   c                      e Zd Z ed      Z edd      j                  d      Z ee	e
g      Z edd      j                  d      Z ed	dd
      Zi Zej                  ej                         ej                  ddddddddddd
       i Zej                  ej"                         ej                  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y )!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   z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*   r7   Dr6   enablez	log-levelr0   r6   zSet Bar.enabled to TruezSet Bar.enabled to Falser   	log_levelzset level=CRITICAL))rC   e)ddisablecritc                 &    t        |       | _        y N)parent)r   fooselfs    r.   init_foozMyApp.init_fook       d#r-   c                 &    t        |       | _        y rJ   )r0   barrM   s    r.   init_barzMyApp.init_barn   rP   r-   N)r"   r#   r$   r   r(   r   r%   runningr   r0   r   classesconfig_file	warn_tpyoaliasesupdater   flagsloggingCRITICALrO   rS   r,   r-   r.   r=   r=   C   s   7D545999FGC:G"#:;??t?LK*PI GNN;&&'NN":$#0	
 E	LL""#	LL$y$&78:ST %	5'9:<VW#k73C3C%DEG[\	
$$r-   r=   c                 @    | D cg c]  }|j                    c}S c c}w N)r"   )rU   klasss     r.   class_to_namesr`   r   s    (/0uENN000s   c                   B   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 ej<                   ee d       d      d        Z! ej<                   ee d       d      d        Z"d  Z#d! Z$d" Z%y#)$TestApplicationc                    t               }t        t        j                        }t        j                  |      }d|_        d|_        |g|j                  _        |j                  j                  d       d|j                         v sJ y )NrD   z%(message)sz%Y-%m-%d %H:%Mhello)r   r=   r[   INFOStreamHandler
log_formatlog_datefmtloghandlersinfogetvalue)rN   streamapphandlers       r.   test_logzTestApplication.test_logw   sh    gll+''/&*#9W&//++++r-   c                     t               }|j                  dg       |j                          |j                  j                  dk(  sJ y )Nz--Foo.name=11)r=   
initializerO   rL   r(   rN   ro   s     r.   test_no_eval_cli_textz%TestApplication.test_no_eval_cli_text   s7    g'(ww||s"""r-   c                    t               }| j                  |j                  d       | j                  |j                  d       | j                  |j                  t         t
        t        g       | j                  |j                  d       y )Nr>   Fr?   )r=   assertEqualr(   rT   rU   r0   r   rV   ru   s     r.   
test_basiczTestApplication.test_basic   s`    g7+e,uc3&78"-r-   c                 (   t               }| j                  t        |j                               g d       | j                  t        |j	                               g d       | j                  t        |j                  t
        g            dg       | j                  t        |j	                  t
        g            g d       | j                  t        |j                  t        g            dg       | j                  t        |j	                  t        g            ddg        G d d	t
              }| j                  t        |j                  t        g            dg       | j                  t        |j	                  t        g            ddg       y )
N)r   r=   r0   r   )r   LoggingConfigurableSingletonConfigurabler   r=   r0   r   r   )r   r{   r|   r   r   r   r0   c                       e Zd Zy)2TestApplication.test_mro_discovery.<locals>.MyApp2Nr"   r#   r$   r,   r-   r.   MyApp2r~          r-   r   )r=   assertSequenceEqualr`   _classes_with_config_traits_classes_inc_parentsr   r   r0   )rN   ro   r   s      r.   test_mro_discoveryz"TestApplication.test_mro_discovery   sV   g  3::<=2	
 	  33356	
 	  3::K=IJ]O	
 	  333[MBC[	

 	  0O0OQTPU0V!WZ_Y`a  333SE:;ne=T	
	[ 	 	  0O0OQTPU0V!WZ_Y`a  333SE:;ne=T	
r-   c                    t               }|j                  g d       |j                  }t        |       | j	                  |j
                  j                  d       | j	                  |j
                  j                  d       | j	                  |j                  j                  d       | j	                  |j                   j                  d       y )Nz--i=10z
--Foo.j=10z--enable=Falsez--log-level=50
   F2   )r=   parse_command_liner   printrx   r   r&   r'   r0   r6   rD   rN   ro   r   s      r.   test_configzTestApplication.test_config   s    g	
 fr*r*++U3//4r-   c                    t               }|j                  dj                                |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                  j                  dd	h       |j                          |j                  j                  ddgk(  sJ |j                  j                  ddgk(  sJ |j                          | j                  |j                  j                  dd	h       |j                  j                  dk(  sJ y )
NzT--li 1 --li 3 --la 1 --tb AB 2 --Foo.la=ab --Bar.aset S1 --Bar.aset S2 --Bar.aset S12r      rs   ab)ABS1S2)r=   r   split
extra_argsr   r   r*   r)   r0   r7   rx   r8   rO   rL   rS   rR   r   s      r.   test_config_seq_argsz$TestApplication.test_config_seq_args   s    gbhhj	
 ~~#&&&zz}}A&&&zz}}d+++zz}}'''4,7wwzzaV###wwzzc4[(((d|4wwzzW$$$r-   c                 n   t               }|j                  dj                                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                  |j                  j                  |       |j                          |j                  j
                  |k(  sJ | j                  |j                  j                  |       y )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 rs   r4   3)ar4   c33)kr   22r      r   )r   r4   r   )r=   r   r   r   r0   r:   assertDictEqualr   r+   r9   rO   rx   rL   rS   rR   )rN   ro   r+   r9   r:   r   s         r.   test_config_dict_argsz%TestApplication.test_config_dict_args   s    g??Duw	

 #.40aa(zz5(((VZZ--u5VZZ--u5.ww}}%%%.r-   c                 b   t               }|j                  g d       |j                          |j                          | j	                  |j
                  j                  d       | j	                  |j
                  j                  d       | j	                  |j                  j                  d       y )Nr   r   F)
r=   r   rO   rS   rx   rL   r&   r'   rR   r6   ru   s     r.   test_config_propagationz'TestApplication.test_config_propagation   sr    g[\B'B'%0r-   c                 h   d} G d dt               } |       }t               5 }t        ||      }t        |d      5 }|j	                  ddg       ddd       |j                  dg       d	|j                  j                  v sJ |j                  j                  j                  d
k(  sJ |j                  d
k(  sJ |j                  ||g       |j                  sJ |j                  j                  j                  d
k(  sJ |j                  d
k(  sJ 	 ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z<Test that loading config files does not override CLI options	config.pyc                   p    e Zd Z e       j	                  d      Z e       j	                  d      ZddiZy)2TestApplication.test_cli_priority.<locals>.TestAppTr   vTestApp.valueN	r"   r#   r$   r   r%   valuer   config_file_loadedrX   r,   r-   r.   TestAppr      s1    IMMM.E!%4!8O,Gr-   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   )rN   r(   r   ro   tdrV   fs          r.   test_cli_priorityz!TestApplication.test_cli_priority   s-   	-k 	-
 i! 	&RD/Kk3' 18:ab
 ""I;/cjj00000::%%++u44499%%%  RD 1))))::%%++u44499%%%	& 	& 	& 	&s#   D(DCD(D%	!D((D1c                    d} G d dt               } |       }t               5 }t        ||      }t        |d      5 }|j	                  ddg       d d d        |j                  dg       |j                  }d|j                  j                  v sJ |j                  j                  j                  d	k(  sJ |j                  d	k(  sJ |j                  ||g
       |j                  sJ |j                  |       |j                  j                  j                  d	k(  sJ |j                  d	k(  sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   c                   p    e Zd Z e       j	                  d      Z e       j	                  d      ZddiZy):TestApplication.test_ipython_cli_priority.<locals>.TestAppTr   r   )r   z	some helpNr   r,   r-   r.   r   r     s2    IMMM.E!%4!8:;Gr-   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   update_config)rN   r(   r   ro   r   rV   r   
cli_configs           r.   test_ipython_cli_priorityz)TestApplication.test_ipython_cli_priority  sJ    	<k 	<
 i! 	&RD/Kk3' 18:ab
 ""I;/ Jcjj00000::%%++u44499%%%  RD 1)))) j)::%%++u44499%%%-	& 	& 	& 	&s#   ED9CE9E	>EEc                 p     G d dt               } |       }|j                  dg       |j                  J y )Nc                   (    e Zd ZddiZ edd      Zy)0TestApplication.test_cli_allow_none.<locals>.AppoptApp.optT)
allow_noner   Nr"   r#   r$   rX   r   r   r,   r-   r.   Appr   8  s    i(GT$7Cr-   r   z
--opt=None)r   r   r   )rN   r   ro   s      r.   test_cli_allow_nonez#TestApplication.test_cli_allow_none7  s5    	8+ 	8 e~.wwr-   c                    t               }|j                  dg       |j                          | j                  |j                  j
                  d       t               }|j                  dg       |j                          | j                  |j                  j
                  d       t               }|j                  dg       |j                          | j                  |j                  j
                  d       t               }|j                  dg       |j                          | j                  |j                  j
                  d       y )N	--disableFz-d--enableTz-e)r=   r   rS   rx   rR   r6   ru   s     r.   
test_flagszTestApplication.test_flags@  s    g}-%0gv&%0g
|,$/gv&$/r-   c                 d   t               }t        j                         }t        j                  |      5  |j                          d d d        |j                         }| j                  |d       | j                  |d       | j                  d|       | j                  d|       y # 1 sw Y   bxY w)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_helprm   assertRegexassertInrN   ro   stdouthmsgs       r.   test_flags_help_msgz#TestApplication.test_flags_help_msgU  s    g''/ 	"!	" 6778;TB<dC	" 	"s   B&&B/c                 :   t               }|j                  ddg       |j                          | j                  |j                  j
                  d       |j                          | j                  |j                  j                  d       t               }|j                  ddg       |j                          | j                  |j                  j
                  d       |j                          | j                  |j                  j                  d       t               }|j                  ddg       |j                          | j                  |j                  j
                  d       |j                          | j                  |j                  j                  d       y )	Nz--i=5z--j=10   r   z-i=5z-j=10z--fooi=5z	--fooj=10)r=   r   rO   rx   rL   r&   r'   ru   s     r.   test_aliaseszTestApplication.test_aliases`  s   g23A&B'g01A&B'g
K89A&B'r-   c                 f    G d dt               } |       }|j                  ddg       | j                  |j                  d        |       }|j                  ddg       | j                  |j                  d        |       }|j                  d	d
g       | j                  |j                  d       y )Nc                   &    e Zd Z ed      ZddiZy)@TestApplication.test_aliases_multiple.<locals>.TestMultiAliasAppTr   )r   rR   quxzTestMultiAliasApp.fooN)r"   r#   r$   r   rL   rX   r,   r-   r.   TestMultiAliasAppr   x  s    &C*,CDGr-   r   z-fr   r   z--bar4   z--qux5r   )r   r   rx   rL   )rN   r   ro   s      r.   test_aliases_multiplez%TestApplication.test_aliases_multiplev  s    	E 	E  !c{+!$!~.!$!~.!$r-   c                    t               }t        j                         }t        j                  |      5  |j                          d d d        |j                         }| j                  |d       | j                  |d       | j                  d|       | j                  d|       | j                  d|       y # 1 sw Y   txY w)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_helprm   r   r   r   s       r.   test_aliases_help_msgz%TestApplication.test_aliases_help_msg  s    g''/ 	#  "	# 45450$70$73T:	# 	#s   B88Cc                    t               }|j                  ddg       |j                          | j                  |j                  j
                  d       | j                  |j                  j                  d       |j                  ddg       |j                          | j                  |j                  j
                  d       | j                  |j                  j                  d       y	)
z9test that setting flags doesn't clobber existing settings	--Bar.b=5r   Fr   r   z
--Bar.b=10Tr   N)r=   r   rS   rx   rR   r6   r4   ru   s     r.   test_flag_clobberz!TestApplication.test_flag_clobber  s    g[9:%0A&
L9:$/B'r-   c                 Z   t               }t        t        j                        }t        j                  |      g|j
                  _        t               }d|j                  _        ||_	        | j                  d|j                                | j                  d|j                                y )Nrd   WOOOO	warn_typorW   )r   r=   r[   rf   rg   rj   rk   r   r   r   r   rm   )rN   rn   ro   cfgs       r.   test_warn_autocorrectz%TestApplication.test_warn_autocorrect  su    gll+#11&9:h%		
k6??#45k6??#45r-   c                 P   t               }t        j                  |j                  _        t               }|j                  |       | j                  |j                  t        j                         | j                  |j                  j                  j                  t        j                         |j                  dg       | j                  |j                  t        j                         | j                  |j                  j                  j                  t        j                         y )Nz--crit
r   r[   WARNr=   rD   r   rx   r   rt   r\   rN   r   ro   s      r.   test_flatten_flagsz"TestApplication.test_flatten_flags  s    h%ll		g#5))33W\\Bz"(8(89))33W5E5EFr-   c                 6   t               }t        j                  |j                  _        t               }|j                  |       | j                  |j                  t        j                         | j                  |j                  j                  j                  t        j                         |j                  ddg       | j                  |j                  t        j                         | j                  |j                  j                  j                  d       y )Nz--log-levelr\   r   r   s      r.   test_flatten_aliasesz$TestApplication.test_flatten_aliases  s    h%ll		g#5))33W\\Bz23(8(89))33Z@r-   c                    t               }|j                  g d       |j                          | j                  |j                  j
                  d       | j                  |j                  j                  d       | j                  |j                  ddg       t               }|j                  g d       |j                          | j                  |j                  j
                  d       | j                  |j                  j                  d       | j                  |j                  g d       t               }|j                  g d	       | j                  |j                  g d
       y )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   rS   rx   rR   r6   r4   r   ru   s     r.   test_extra_argszTestApplication.test_extra_args  s    gJK%0A&'6):;gPQ$/A&)GHg_`)<=r-   c                 <    t               }|j                  dg       y )Nu   ünîcødé)r=   r   ru   s     r.   test_unicode_argvz!TestApplication.test_unicode_argv  s    g/r-   c                 8    t               }|j                          y r^   )r=   document_config_optionsru   s     r.   test_document_config_optionz+TestApplication.test_document_config_option  s    g##%r-   c                 @    t               }d|j                         v sJ y )Nr1   )r=   generate_config_fileru   s     r.   test_generate_config_filez)TestApplication.test_generate_config_file  s     g3#;#;#====r-   c                      G d dt               } G d dt        t        |      }t               }|j                  j                  |       |j                         }t        |       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d	|       | j                  d
|       | j                  d|       | j                  d|       | j                  d|       | j                  |j                  d      d       | j                  d|       | j                  d|       | j                  |j                  d      d       | j                  d|       y )Nc                   @    e Zd Z edd      j	                  d      Zy)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 r-   r  c                       e Zd Zy)NTestApplication.test_generate_config_file_classes_to_include.<locals>.NoTraitsNr   r,   r-   r.   NoTraitsr    r   r-   r  r1   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   r0   r=   rU   appendr  r   r   assertNotInrx   count)rN   r  r  ro   conf_txts        r.   ,test_generate_config_file_classes_to_includez<TestApplication.test_generate_config_file_classes_to_include  s?   	) 		sC 	 g8$++-h&1+X6)84,h7 	&1&1&1*H5*H5(:;Q? 	0(;4h?(DEqI1r-   c                    t               }t        j                         |_        d}t	        d      5 }t        t        ||      d      5 }|j                  d       d d d        t	        d      5 }t        t        ||      d      5 }|j                  d       d d d        |j                  |||g       |j                          | j                  |j                  j                  d       |j                  |||g       |j                          | j                  |j                  j                  d	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)
Nr   _1r   zget_config().MyApp.Bar.b = 1_2zget_config().MyApp.Bar.b = 2r   r   r   )r=   r[   	getLoggerrj   r   r   r   writer   rS   rx   rR   r4   )rN   ro   r(   td1f1td2f2s          r.   test_multi_filezTestApplication.test_multi_file	  s;   g##%% 	/eC&, 9789#D) /S%T*C0 =BHH;<=$$Tc
$;  A.$$Tc
$;  A./	/ 	/9 9= =/ /	/ 	/sT   E)EE)-EEBE4E)E	
E)EEE&	"E))E2
assertLogszrequires TestCase.assertLogsreasonc                    t               }t        j                         |_        |j                  j	                  t        j
                         d}t        d      5 }t        t        ||dz         d      5 }|j                  d       d d d        t        t        ||dz         d      5 }t        j                  ddd	ii|       d d d        | j                  |j                  t        j                        5 }|j                  ||g
       |j                          d d d        d d d        |j                   j"                  d	k(  sJ dj%                  j&                        }d|v sJ d|v sJ t        |dz         |v sJ t        ||dz         |v sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   r  z.pyr   zget_config().Bar.b = 1z.jsonr0   r4   r   r   
	Collisionz1 ignored, using 2)r=   r[   r  rj   setLevelrf   r   r   r   r  jsondumpr  WARNINGr   rS   rR   r4   joinoutputrN   ro   r(   r   r   capturedr)  s          r.   test_log_collisionsz#TestApplication.test_log_collisions  s   g##%&% 	eBu-s3 2q012eBw/5 0		53(+Q/0'//: h$$T$5	 wwyyA~~8??+f$$$#v---R&&000R(F2222 20 0 	 	sT   F74F!F7'F2F74%F+F7F	F7F(	$F7+F4	0F77G c                    t               }t        j                         |_        d}t	               5 }t        t        ||      d      5 }|j                  d       d d d        | j                  |j                  t        j                        5 }|j                  ||g       d d d        d d d        dj                  j                        }| j                  d|       y # 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   OxY w)Nr   r   syntax error()r   r"  SyntaxError)r=   r[   r  rj   r   r   r   r  r  ERRORr   r(  r)  r   r*  s          r.   test_log_bad_configz#TestApplication.test_log_bad_config/  s    g##%! 	6ReBos+ *q()*'--8 6H$$T$56	6
 8??+mV,* *6 6	6 	6s;   C6C2C6C* C6C'	#C6*C3	/C66C?c                    t               }d|_        t        j                         |_        d}t               5 }t        t        ||      d      5 }|j                  d       d d d        | j                  t              5  |j                  ||g       d d d        d d d        y # 1 sw Y   DxY w# 1 sw Y   xY w# 1 sw Y   y xY w)NTr   r   r.  r   )r=   raise_config_file_errorsr[   r  rj   r   r   r   r  assertRaisesr/  r   )rN   ro   r(   r   r   s        r.   test_raise_on_bad_configz(TestApplication.test_raise_on_bad_config<  s    g'+$##%! 	6ReBos+ *q()*"";/ 6$$T$56	6 	6* *6 6	6 	6s;   B;B# B;=B/B;#B,	(B;/B8	4B;;Cc                    t         j                         }|j                  dg       | j                  |j                  t
               | j                  |j                  j                  |       t         j                          t
        j                          t         j                         }|j                  ddg       | j                  |j                  t
               | j                  |j                  j                  t               | j                  |j                  j                  |       | j                  |j                  j                  j                  |j                         t         j                          t
        j                          t         j                         }|j                  ddg       | j                  |j                  t
               | j                  |j                  j                  t               | j                  |j                  j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                  |j                         y)z/Try all ways to specify how to create sub-apps.sub1sub2sub3N)Rootinstancer   assertIsInstancesubappSub1assertIsrK   clear_instanceSub2Sub3
assertTrueflagru   s     r.   test_subcommands_instanciationz.TestApplication.test_subcommands_instanciationG  s   mmox(cjj$/cjj''-mmo/0cjj$/cjj//6cjj''-cjj''..

;mmo/0cjj$/cjj//6

))../cjj''-cjj''..

;r-   c                    t               }t        j                         |_        d}t	        d      5 }t        ||      }t        |d      5 }|j                  dg       d d d        |j                  ||g       | j                  t        |j                        d       | j                  |j                  d   |       |j                          | j                  |j                  d       t        |d      5 }|j                  d	g       d d d        |j                  ||g       | j                  t        |j                        d       | j                  |j                  d
       | j                  t              5  d|_        d d d        |j                  j!                  d       | j                  t        |j                        d       |j                  ||g       | j                  t        |j                        d       | j                  |j                  d
       d d d        y # 1 sw Y   xY w# 1 sw Y   /xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  r   zc.MyApp.running = True
r   r   r   Tzc.MyApp.running = False
Fz/fooz/bar)r=   r[   r  rj   r   r   r   r   r   rx   lenloaded_config_filesstartrT   r4  AttributeErrorr  )rN   ro   r(   r  rV   r   s         r.   test_loaded_config_filesz(TestApplication.test_loaded_config_filesg  s   g##%%  	1T*Kk3' ;189:;   SE 2S!8!891=S44Q7EIIKS[[$/ k3' <19:;<   SE 2S!8!891=S[[%0 "">2 1*0'1 ##**62S!8!891=   SE 2S!8!891=S[[%0A 	1  	1; ;< <1 1- 	1  	1sV   I
H(BI5H5A2I:IBI(H2	-I5H?	:II	IIN)&r"   r#   r$   rq   rv   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   skipifhasattrr   r,  r1  r5  rE  rK  r,   r-   r.   rb   rb   v   s    	,#.'
R5"%$/(1&6"&H0*	D(,%$
;
(
6
G
A>(0&>#2J/" T[[WX|44=[\3 ]3( T[[WX|44=[\
- ]
-	6<@$1r-   rb   c                 |    G d dt               } |t        j                               }t        j                  t
              5  |j                  g d       d d d        | j                  d      d   }|j                  }d|v sJ d|v sJ d	|v sJ |j                  t        j                  k(  sJ y # 1 sw Y   [xY w)
Nc                   &    e Zd ZddiZ ed      Zy)"test_cli_multi_scalar.<locals>.Appr   r   Tr   Nr   r,   r-   r.   r   rP    s    )$T"r-   r   )rj   )--optrs   rQ  r   callzError loading argumentzApp.opt=['1', '2']zopt only accepts one value)r   r[   r  pytestraises
SystemExitr   get_recordsmessagelevelnor\   )caplogr   ro   recordrX  s        r.   test_cli_multi_scalarr\    s    #k # '##%
&C	z	" =;<='+FnnG#w...7***'7222>>W-----= =s   B22B;c                       e Zd ZddiZy)r:  r7  )z,traitlets.config.tests.test_application.Sub1zimport stringN)r"   r#   r$   subcommandsr,   r-   r.   r:  r:    s    QKr-   r:  c                       e Zd Z ed      Zy)rB  FN)r"   r#   r$   r   rD  r,   r-   r.   rB  rB    s    ;Dr-   rB  c                       e Zd Zy)rA  Nr   r,   r-   r.   rA  rA    s    r-   rA  c                        e Zd Zedfd dfdZy)r>  zApplication classc                     t        | d      S )NT)rK   rD  )rB  )roots    r.   <lambda>zSub1.<lambda>  s    d$T: r-   factory)r8  r9  N)r"   r#   r$   rA  r^  r,   r-   r.   r>  r>    s    *+:IFKr-   r>  c                   &     e Zd ZdZdZ fdZ xZS )DeprecatedAppFc                      d _          fd}t        j                  j                   j                  d|      5  t
           |||       d d d        y # 1 sw Y   y xY w)NTc                      d_         y )NT)parent_called)r   rN   s    r.   _capturez/DeprecatedApp._config_changed.<locals>._capture  s    !%Dr-   debug)override_calledr   patchobjectrj   super_config_changed)rN   r(   oldnewrk  	__class__s   `    r.   rq  zDeprecatedApp._config_changed  sR    #	& ZZtxx(; 	4G#D#s3	4 	4 	4s   AA)r"   r#   r$   rm  rj  rq  __classcell__)rt  s   @r.   rg  rg    s    OM4 4r-   rg  c                      t               } | j                  rJ | j                  rJ t        dddii      | _        | j                  sJ | j                  sJ y )NAr4   r   )rg  rm  rj  r   r   )ro   s    r.   test_deprecated_notifierrx    sZ    
/C""""    sCj)*CJr-   c                  "    t        t               y r^   )r   r"   r,   r-   r.   test_help_outputrz    s
    hr-   c                  "    t        t               y r^   )r   r"   r,   r-   r.   test_help_all_outputr|    s
    (#r-   c                  h    t        t        j                  dt        dg      \  } }}|dk(  sJ d| vsJ y )N-mz--show-configr   show_configr   sys
executabler"   outerrecs      r.   test_show_config_clir    s8    (#..$/)Z[LCb7N7###r-   c                  h    t        t        j                  dt        dg      \  } }}|dk(  sJ d| vsJ y )Nr~  z--show-config-jsonr   r  r  r  s      r.   test_show_config_json_clir    s9    (#..$J^)_`LCb7N7###r-   c                     t               }d|j                  _        |j                   t        |d      }|j	                          | j                         \  }}d|v sJ d|v sJ d|vsJ y )Nr   T)r   r  r=   zi = 5OtherApp)r   r=   r&   r  rI  
readouterr)capsysr   ro   r  r  s        r.   test_show_configr    sh    
(CCIIKLL
s
-CIIK  "HCc>>c>>S   r-   c                     t               }d|j                  _        |j                   t        |d      }|j	                          | j                         \  }}t        j                  |      }t        |      |k(  sJ y )Nr   T)r   show_config_json)r   r=   r&   r  rI  r  r%  loads)r  r   ro   r  r  	displayeds         r.   test_show_config_jsonr    sb    
(CCIIKLL
sT
2CIIK  "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	|       } |       }|j                  d
g       |j                  j                  j                  dk(  sJ t        t        |j                                     dkD  sJ y )Nr   Int)r   r   c                   B    e Zd Z W  d      j                  d      Zy)test_deep_alias.<locals>.Foor   )default_valueTr   N)r"   r#   r$   r%   valr  s   r.   r   r    s    "&&d&3r-   r   c                   "     e Zd Z fdZ xZS )test_deep_alias.<locals>.Barc                 @    t        |   |i |  |       | _        y rJ   )rp  __init__rL   )rN   r   kwargsr   rt  s      r.   r  z%test_deep_alias.<locals>.Bar.__init__  s!    Gd-f-$'DHr-   )r"   r#   r$   r  ru  )rt  r   s   @r.   r0   r     s    	( 	(r-   r0   c                   :     e Zd ZdZddiZW W gZ fdZ xZS ) test_deep_alias.<locals>.TestApptestr  zBar.Foo.valc                 @    t        |   |i |  |       | _        y rJ   )rp  rt   rR   )rN   r   r  r0   rt  s      r.   rt   z+test_deep_alias.<locals>.TestApp.initialize  s!    G//$'DHr-   )r"   r#   r$   r(   rX   rU   rt   ru  )rt  r0   r   s   @r.   r   r    s%    -(*	( 	(r-   r   z--val=10r   )	traitletsr  traitlets.configr   r   rt   rR   rL   r  rG  listemit_alias_help)r   r   r   ro   r0   r   r  s       @@@r.   test_deep_aliasr    s    :4l 4(l (
(+ ( )CNNJ< 77;;??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                  j                  d       |j                  j                  d       t        |      5 }|j                         dk(  sJ 	 ddd       |j                         j                  dk(  sJ y# 1 sw Y   )xY w)z7We should be able to configure additional log handlers.log_filer   filezlogging.FileHandlerDEBUG)classlevelfilenamer   console)r  rk   )versionrk   loggers)logging_configr   rl   warnz
info
warn
Nz[Application] WARNING | warn
)r   strrG  rj   rk   rl   warningr   readr  r  )tmp_pathr  r  ro   
log_handles        r.   test_logging_configr    s    *$H
2$ #H $!*F 3 
C& sww A%%% GGLLGGOOF 
h 3: N2223 ""&FFFF	3 3s   CCc                     | j                  dd       t               j                         }d|vsJ d|vsJ | j                  dd       t               j                         }d|v sJ d|v sJ y)z7Ensure logging is correctly disabled for pythonw usage.z'traitlets.config.application.IS_PYTHONWTrk   r  FN)setattrr   get_default_logging_config)monkeypatchr   s     r.   'test_get_default_logging_config_pythonwr  9  s|    A4H]557FV###F"""A5I]557Fr-   c                 :    g fd}| j                  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                  ,    j                  | |f       y r^   )r  )r   r  callss     r.   
_configurez caplogconfig.<locals>._configureP  s    dF^$r-   z)logging.config.DictConfigurator.configure)r  )r  r  r  s     @r.   caplogconfigr  F  s,     E% 3
 Lr-   pypyzTest does not work on pypyr  c                     t               }~t        |      dk(  sJ | j                         \  }}d|vsJ t               }d|_        ~t        |      dk(  sJ y)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   rG  r  _logging_configured)r  r  ro   r  r  s        r.   test_logging_teardown_on_errorr  \  sh     -C|!!!  "HCc!!! -C"C|!!!r-   __main__)D__doc__r   r   r%  r[   osr  r   tempfiler   unittestr   rT  r   r  r   r   r	   r
   r   r   r   r   r   traitlets.config.applicationr   traitlets.config.configurabler   traitlets.config.loaderr   traitlets.tests.utilsr   r   r   r   ImportErrorr   r(  r   r   r0   r=   r`   rb   r\  r:  rB  rA  r>  rg  rx  rz  r|  r  r  r  r  r  r  r  fixturer  rL  implementationr(   r  r"   launch_instancer,   r-   r.   <module>r     s    	   	 
  '    V V V 4 6 *  	6, 6"T, T,$K ,$^1U1h U1p."; ; 	; 	; 4K 4 $$$!	$08!GH
  * C&&++v5>Z[" \", z	 e  s   *E0 0E?>E?