
    _dW                        d Z ddl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 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mZmZ d
dlmZ  G d de	      ZdZdZ ejC                  dd      Ze jC                  dd      Z  G d de	      Z" G d de"      Z#dZ$dZ% G d de      Z& G d de      Z' G d de      Z( G d de	      Z) G d  d!e)      Z* G d" d#e      Z+ G d$ d%e	      Z, G d& d'e      Z- G d( d)e      Z.d* Z/y)+z'Tests for traitlets.config.configurable    N)TestCase)mark)Application)ConfigurableLoggingConfigurableSingletonConfigurable)Config)
get_logger)CaselessStrEnumDictEnumFloat	FuzzyEnumIntegerListSetUnicode_deprecations_shownvalidate   )expected_warningsc                       e Zd Z edd      j	                  d      Z edd      j	                  d      Z ed      Z	y	)
MyConfigurable   The integer a.helpTconfigg      ?zThe integer b.	no configN)
__name__
__module____qualname__r   tagar   br   c     J/usr/lib/python3/dist-packages/traitlets/config/tests/test_configurable.pyr   r   $   sB    ()--T-:Ac()--T-:AAr)   r   zMyConfigurable(Configurable) options
------------------------------------
--MyConfigurable.a=<Integer>
    The integer a.
    Default: 1
--MyConfigurable.b=<Float>
    The integer b.
    Default: 1.0zMyConfigurable(Configurable) options
------------------------------------
--MyConfigurable.a=<Integer>
    The integer a.
    Current: 5
--MyConfigurable.b=<Float>
    The integer b.
    Current: 4.0z	<Integer>z<Int>c                       e Zd Z edd      j	                  d      Z ed      j	                  d      Z eg       j	                  d      Z	 e
       j	                  d      Zy)Foor   r   r   Tr   nopeN)r!   r"   r#   r   r$   r%   r   r&   r   flistr   fdictr(   r)   r*   r,   r,   A   sZ    ()--T-:A4(AHLLL%EFJJdJ#Er)   r,   c                   D   e Zd Z edd      j	                  d      Z ed      j	                  d      Z eg       j	                  dd	      Z	 eg d
      j	                  dd	      Z
 e       j	                  dd	      Z edddd      j	                  dd	      Zy)BargotitzThe string b.r   Fr   zThe string c.T+)r   multiplicity)   r      r%   r&   r'   )r   0r6   N)r!   r"   r#   r   r$   r&   r   r'   r   bsetbset_valuesr   bdictbdict_valuesr(   r)   r*   r1   r1   H   s    o.22%2@A?#''t'4Ar7;;d;5Di.$$Ds$CKFJJdJ5ECcc2377tRU7VLr)   r1   zFoo(Configurable) options
-------------------------
--Foo.a=<Int>
    The integer a.
    Default: 0
--Foo.b=<Unicode>
    Default: 'nope'
--Foo.fdict=<key-1>=<value-1>...
    Default: {}
--Foo.flist=<list-item-1>...
    Default: []a  Bar(Foo) options
----------------
--Bar.a=<Int>
    The integer a.
    Default: 0
--Bar.bdict <key-1>=<value-1>...
    Default: {}
--Bar.bdict_values <key-1>=<value-1>...
    Default: {1: 'a', '0': 'b', 5: 'c'}
--Bar.bset <set-item-1>...
    Default: set()
--Bar.bset_values <set-item-1>...
    Default: {1, 2, 5}
--Bar.c=<Float>
    The string c.
    Default: 0.0
--Bar.fdict=<key-1>=<value-1>...
    Default: {}
--Bar.flist=<list-item-1>...
    Default: []c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestConfigurablec                    t               }t        |j                        }t        |j                        }| j                  |j                  |j                         | j                  |j                  |j                         y )Nr   )r   r   assertEqual)selfc1c2c3s       r*   test_defaultzTestConfigurable.test_defaultt   sU    ^++BII.BII.r)   c                    t               }d|_        d|_        t        |      }t        |j                        }t        |j                        }| j                  |j                  |       | j                  |j                  |       | j                  |j                  |       | j                  |j                  |u        | j                  |j                  |u        | j                  |j                  |u        | j                  |j                  |j                  u        | j                  |j                  |j                  u        y )Nfoobarr   )r	   rF   rG   r   r   r?   
assertTrue)r@   r   rA   rB   rC   s        r*   test_customzTestConfigurable.test_custom{   s    

(++F+F+F+		V+,		V+,		V+,		RYY./		RYY./r)   c                     t               }d|j                  _        d|j                  _        t        |      }t        |j                        }| j                  |j                  |j                  j                         | j                  |j                  |j                  j                         | j                  |j                  |j                  j                         | j                  |j                  |j                  j                         y )Nr5          @r   )r	   r   r%   r&   r   r?   )r@   r   rA   rB   s       r*   test_inheritancez!TestConfigurable.test_inheritance   s    "#"%6*299-v44667v44667v44667v44667r)   c                    t               }d|j                  _        d|j                  _        d|j                  _        d|j                  _        t        |      }t        dg      5  t	        |j                        }d d d        | j                  |j                  d       | j                  |j                  d       | j                  j                  d       | j                  |j
                  d       y # 1 sw Y   zxY w)N
   wowlaterg      Y@r   `b` not recognizedr2   )	r	   r,   r%   r&   r1   r'   r   r   r?   )r@   r   fr&   s       r*   test_parentzTestConfigurable.test_parent   s    







v 456 	%188$A	%b!e$g&e$	% 	%s   'C77D c                 F   t               }d|j                  _        d|j                  _        t        d|      }| j	                  |j                  d       | j	                  |j                  |j                  j                         | j	                  |j
                  d       y )Nr5   rK   r   )r%   r   r    )r	   r   r%   r&   r?   r'   r@   r   r'   s      r*   test_override1zTestConfigurable.test_override1   sy    "#"%Qv.a f33556k*r)   c                    t               }d|j                  _        d|j                  _        d|j                  _        t        dg      5  t        |      }d d d        | j                  j                  |j                  j                         | j                  |j                  d       | j                  |j
                  |j                  j
                         t        dg      5  t        ddd	|
      }d d d        | j                  |j                  d       | j                  |j                  d       | j                  |j
                  d	       y # 1 sw Y   xY w# 1 sw Y   jxY w)Nr   org      $@rQ   r   r2   r5   andg      4@)r%   r&   r'   r   )r	   r,   r%   r1   r&   r'   r   r?   rU   s      r*   test_override2zTestConfigurable.test_override2   s   





 456 	#6"A	#fjjll+g&fjjll+ 456 	9a5D8A	9a e$d#	# 	#
	9 	9s   
E'E E E)c                     | j                  t        j                         t               | j                  t        j                         t
               | j                  t        j                         t               y N)r?   r   class_get_helpmc_helpr,   foo_helpr1   bar_helpr@   s    r*   	test_helpzTestConfigurable.test_help   sM    668'B++-x8++-x8r)   c                 p    t        dd      }| j                  t         j                  |      t               y )Nr6      )r%   r&   )r   r?   r]   mc_help_inst)r@   insts     r*   test_help_instzTestConfigurable.test_help_inst   s)    Q'66t<lKr)   c                 x    G d dt               }d}d}d}d}|j                         }| j                  ||       | j                  ||       | j                  ||       |j	                         }| j                  ||       | j                  ||       | j                  ||       | j                  |j                  |      |j                  |             |j                         }| j                  ||       | j                  ||       | j                  ||        G d dt               }	d	}
|	j                         }| j                  ||       | j                  ||       | j                  ||       | j                  |
|       | j                  |j                  |
      |j                  |             |	j	                         }| j                  ||       | j                  ||       | j                  ||       | j                  |
|       | j                  |j                  |
      |j                  |             y )
Nc                   \    e Zd Z edj	                         d      j                  d      Zy)DTestConfigurable.test_generated_config_enum_comments.<locals>.MyConfChoice1 choice2Many choices.r   Tr   Nr!   r"   r#   r   splitr$   an_enumr(   r)   r*   MyConfrj      s'    ,224?KOOW[O\Gr)   rp   rl   z&Choices: any of ['Choice1', 'choice2']z3MyConf.an_enum : any of ``'Choice1'``|``'choice2'``or Nonec                   `    e Zd Z edj	                         ddd      j                  d      Zy)ETestConfigurable.test_generated_config_enum_comments.<locals>.MyConf2rk   Tchoice2rl   
allow_nonedefault_valuer   r   Nrm   r(   r)   r*   MyConf2rs      s2    !'')'$	
 cc r)   rx   Default: 'choice2')r   r]   assertInassertNotInclass_config_sectionassertGreaterindexclass_config_rst_doc)r@   rp   help_strenum_choices_strrst_choices_stror_none_strcls_helpcls_cfgrst_helprx   defaults_strcls2_msgcls2_cfgs                r*   #test_generated_config_enum_commentsz4TestConfigurable.test_generated_config_enum_comments   s   	]\ 	] #CO((*h)&1h/--/h(&0h/7==)9:GMM(<ST..0h)ox0h/	l 	 ,))+h)&1k8,lH-8>>,7HX9YZ//1h)&1k8,lH-8>>,7HX9YZr)   c                    d}d}d} G d dt               }d}|j                         }| j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  |j	                  |      |j	                  |             |j                         }| j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  |j	                  |      |j	                  |              G d dt               }d	}|j                         }	| j                  ||	       | j                  ||	       | j                  ||	       | j                  ||	       | j                  |	j	                  |      |	j	                  |             |j                         }
| j                  ||
       | j                  ||
       | j                  ||
       | j                  ||
       | j                  |
j	                  |      |
j	                  |             y )
Nrl   ry   rq   c                   `    e Zd Z edj	                         ddd      j                  d      Zy)HTestConfigurable.test_generated_config_strenum_comments.<locals>.MyConf3rk   Trt   rl   ru   r   N)r!   r"   r#   r   rn   r$   ro   r(   r)   r*   MyConf3r     s2    %!'')'$	
 cc r)   r   z9Choices: any of ['Choice1', 'choice2'] (case-insensitive)c                   `    e Zd Z edj	                         ddd      j                  d      Zy)HTestConfigurable.test_generated_config_strenum_comments.<locals>.MyConf4rk   Trt   rl   ru   r   N)r!   r"   r#   r   rn   r$   ro   r(   r)   r*   MyConf4r   !  s2    !'')'$	
 cc r)   r   z>Choices: any case-insensitive prefix of ['Choice1', 'choice2'])r   r]   rz   r}   r~   r|   )r@   r   r   r   r   r   cls3_msgcls3_cfgr   cls4_msgcls4_cfgs              r*   &test_generated_config_strenum_commentsz7TestConfigurable.test_generated_config_strenum_comments   s   "+	l 	 W))+h)&1k8,lH-8>>,7HX9YZ//1h)&1k8,lH-8>>,7HX9YZ	l 	 \))+h)&1k8,lH-8>>,7HX9YZ//1h)&1k8,lH-8>>,7HX9YZr)   N)r!   r"   r#   rD   rI   rL   rS   rV   rZ   rb   rg   r   r   r(   r)   r*   r=   r=   s   s8    /0"	8%+$ 9
L7[r;[r)   r=   c                       e Zd Zd Zd Zy)TestSingletonConfigurablec                 B    G d dt               }| j                  |j                         d       |j                         }| j                  |j                         d       | j                  ||j                                | j                  t         j                  d        y )Nc                       e Zd Zy)4TestSingletonConfigurable.test_instance.<locals>.FooNr!   r"   r#   r(   r)   r*   r,   r   @      r)   r,   FTr   r?   initializedinstance	_instance)r@   r,   rF   s      r*   test_instancez'TestSingletonConfigurable.test_instance?  sw    	' 	 	*E2lln*D1clln-.88$?r)   c                     G d dt               } G d d|      }| j                  |j                         d       | j                  |j                         d       |j                         }| j                  |j                         d       | j                  |j                         d       | j                  ||j                         | j                  ||j                         | j                  t         j                  d        y )Nc                       e Zd Zy)7TestSingletonConfigurable.test_inheritance.<locals>.BarNr   r(   r)   r*   r1   r   J  r   r)   r1   c                       e Zd Zy)7TestSingletonConfigurable.test_inheritance.<locals>.BamNr   r(   r)   r*   Bamr   M  r   r)   r   FTr   )r@   r1   r   bams       r*   rL   z*TestSingletonConfigurable.test_inheritanceI  s    	' 		# 	 	*E2*E2lln*D1*D1cmm,cmm,.88$?r)   N)r!   r"   r#   r   rL   r(   r)   r*   r   r   >  s    @@r)   r   c                       e Zd Zd Zd Zy)TestLoggingConfigurablec                     G d dt               } G d dt               }t               j                  d      } ||      } ||      }| j                  |j                  |       | j                  |j                  |        |       } |||      }| j                  |j                  t                      | j                  |j                  |       y )	Nc                       e Zd Zy):TestLoggingConfigurable.test_parent_logger.<locals>.ParentNr   r(   r)   r*   Parentr   \  r   r)   r   c                       e Zd Zy)9TestLoggingConfigurable.test_parent_logger.<locals>.ChildNr   r(   r)   r*   Childr   _  r   r)   r   r   )logparent)r   r   )r   r
   getChildr?   r   )r@   r   r   r   r   childs         r*   test_parent_loggerz*TestLoggingConfigurable.test_parent_logger[  s    	( 		' 	 l##$=>CV$S)C(V-Z\2C(r)   c                      G d dt               } G d dt              } |       } ||      }| j                  |j                  t	                      y )Nc                       e Zd Zy)LTestLoggingConfigurable.test_parent_not_logging_configurable.<locals>.ParentNr   r(   r)   r*   r   r   o  r   r)   r   c                       e Zd Zy)KTestLoggingConfigurable.test_parent_not_logging_configurable.<locals>.ChildNr   r(   r)   r*   r   r   r  r   r)   r   r   )r   r   r?   r   r
   )r@   r   r   r   r   s        r*   $test_parent_not_logging_configurablez<TestLoggingConfigurable.test_parent_not_logging_configurablen  sD    	\ 		' 	 V$JL1r)   N)r!   r"   r#   r   r   r(   r)   r*   r   r   Z  s    )&	2r)   r   c                       e Zd Zy)MyParentNr   r(   r)   r*   r   r   z      r)   r   c                       e Zd Zy)	MyParent2Nr   r(   r)   r*   r   r   ~  r   r)   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestParentConfigurablec                     t        ddddiii      }t        |      }t        |      }| j                  |j                  |j
                  j                  j                  j                         y Nr   r   r&   rK   r   r   )r	   r   r   r?   r&   r   r@   cfgr   mycs       r*   test_parent_configz)TestParentConfigurable.test_parent_config  sf    $S'
 %F+ 6 6 E E G GHr)   c                     t        ddddiii      }t        |      }t        |      }| j                  |j                  |j
                  j                  j                  j                         y r   r	   r   r   r?   r&   r   r   r   s       r*   test_parent_inheritancez.TestParentConfigurable.test_parent_inheritance  sf    $S'
 #&F+ 6 6 E E G GHr)   c                    t        ddddiiddidi      }t        |      }t        |      }t        |      }| j	                  |j
                  |j                  j                  j                  j                  j
                         y )	Nr   r   r&   rK         @)r   r   r   r   )r	   r   r   r   r?   r&   r   r@   r   parent2r   r   s        r*   test_multi_parentz(TestParentConfigurable.test_multi_parent  s    (+! S'

 3')F+ 7 7 @ @ O O Q QRr)   c                     t        ddidddiidddiid      }t        |      }t        |      }| j                  |j                  |j
                  j                  j                  j                         y )	Nr&   rK   r   r         @r   r   r   r   r   )r	   r   r   r?   r&   r   r   s       r*   test_parent_priorityz+TestParentConfigurable.test_parent_priority  s     # %S' %S'
" #&F+ 7 7 F F H HIr)   c                 $   t        ddidddiiddidddiidd      }t        |	      }t        |
      }t        |
      }| j                  |j                  |j
                  j                  j                  j                  j                         y )Nr&   rK   r   r   r   g      @)r   r   r   r   r   r   r   s        r*   test_multi_parent_priorityz1TestParentConfigurable.test_multi_parent_priority  s     # %S' S' )+!		
, 3''*F+ 7 7 @ @ O O Q QRr)   N)r!   r"   r#   r   r   r   r   r   r(   r)   r*   r   r     s     IIS*J,Sr)   r   c                       e Zd Z e       j	                  d      Zd Z e       j	                  d      Zd Z	 e
       j	                  d      Zd Zy)
ContainersTr   c                     dgS )Nr(   ra   s    r*   _lis_defaultzContainers._lis_default  s	    tr)   c                     dhS )Nr%   r(   ra   s    r*   
_s_defaultzContainers._s_default  s	    ur)   c                 
    ddiS )Nr%   r&   r(   ra   s    r*   
_d_defaultzContainers._d_default  s    Szr)   N)r!   r"   r#   r   r$   lisr   r   sr   r   dr   r(   r)   r*   r   r     sK    
&**D*
!C 				A 	

$
Ar)   r   c                   `    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y)TestConfigContainersc           	          t               }|j                  j                  j                  t	        t        d                   t        |      }| j                  |j                  t	        t        dd                   y )Nr6   r   r   )r	   r   r   extendlistranger?   r@   r'   objs      r*   test_extendz TestConfigContainers.test_extend  sR    H	U1X/"$uR|"45r)   c                    t               }|j                  j                  j                  dd       |j                  j                  j                  dd       t        |      }| j	                  |j                  g d       y )Nr   r%   r   r&   r   )r%   r&   r   )r	   r   r   insertr?   r   s      r*   test_insertz TestConfigContainers.test_insert  s[    H	3'	3'".1r)   c                    t               }|j                  j                  j                  ddg       |j                  j                  j                  ddg       t        |      }| j	                  |j                  g d       y )Nr   r5   r   r   )r5   r   r   r5   r   )r	   r   r   prependr?   r   s      r*   test_prependz!TestConfigContainers.test_prepend  s`    H	  !Q(	  !Q(""23r)   c                    t               }|j                  j                  j                  ddg       |j                  j                  j	                  ddg       t        |      }| j                  |j                  g d       y )Nr   r5   r   r   )r   r5   r   r5   r   )r	   r   r   r   r   r?   r   s      r*   test_prepend_extendz(TestConfigContainers.test_prepend_extend  s`    H	  !Q(	A'""23r)   c                    t               }|j                  j                  j                  ddg       |j                  j                  j	                  ddg       t        |      }| j                  |j                  dddgddg       y )Nr   r5   r   r   r   )r	   r   r   appendr   r?   r   s      r*   test_append_extendz'TestConfigContainers.test_append_extend  sl    H	A'	A'"21vq!"45r)   c                    t               }|j                  j                  j                  ddg       |j                  j                  j	                  ddg       t        |      }| j                  |j                  dddddgg       y )Nr5   r   r   r   r   )r	   r   r   r   r   r?   r   s      r*   test_extend_appendz'TestConfigContainers.test_extend_append  sl    H	A'	A'"2q!aV"45r)   c                    t               }|j                  j                  j                  dd       |j                  j                  j	                  ddg       t        |      }| j                  |j                  g d       y )Nr   r   r5   r   r   )r   r   r5   r   )r	   r   r   r   r   r?   r   s      r*   test_insert_extendz'TestConfigContainers.test_insert_extend"  s]    H	1%	A'"-0r)   c                    t               }|j                  j                  j                  h d       |j                  j                  j                  dh       t        |      }| j	                  |j                  h d       y )N>   r   r   r5   r   r   >   r%   r   r   r5   r   )r	   r   r   updater?   r   s      r*   test_set_updatez$TestConfigContainers.test_set_update)  sV    H	i(	qc"" 12r)   c                    t               }|j                  j                  j                  ddi       |j                  j                  j                  ddi       t        |      }| j	                  |j                  dddd       y )Nr'   r   erR   r   r&   )r%   r'   r  )r	   r   r   r   r?   r   s      r*   test_dict_updatez%TestConfigContainers.test_dict_update0  sb    H	sCj)	sCj)"c# >?r)   c                    t               }d|j                  _        t        |      }| j                  |j                  d       t               }d|j                  _        |j	                  |       | j                  |j                  d       d|j                  _        |j	                  |       | j                  |j                  d       y )Nr6   r   rN      r	   r   r%   r?   update_config)r@   r'   mrB   s       r*   test_update_twicez&TestConfigContainers.test_update_twice7  s    H!$a X 	b! 	b!r)   c                    t               }d|j                  _        t        |      }| j                  |j                  d       d|j                  _        |j	                  |       | j                  |j                  d       y)zCupdate_config with same config object still triggers config_changedr6   r   rN   Nr  )r@   r'   r  s      r*   test_update_selfz%TestConfigContainers.test_update_selfF  sc    H!$a 	b!r)   c                 x    G d dt                G fddt              }t               }d|j                  _         |       }| j                  |j                  d       j                  |      } |       }| j                  |j                  |j                         | j                  |j                  d       y )Nc                       e Zd Zy)?TestConfigContainers.test_config_default.<locals>.SomeSingletonNr   r(   r)   r*   SomeSingletonr  Q  r   r)   r  c                   F    e Zd Z e       j	                  d      Z fdZy)ETestConfigContainers.test_config_default.<locals>.DefaultConfigurableTr   c                 l    j                         rj                         j                  S t               S r\   r   r   r   r	   r@   r  s    r*   _config_defaultzUTestConfigContainers.test_config_default.<locals>.DefaultConfigurable._config_defaultW  s+     ,,.(113:::xr)   N)r!   r"   r#   r   r$   r%   r  r  s   r*   DefaultConfigurabler  T  s    	T*A r)   r  r6   r   r   )	r   r   r	   r  r%   r?   r   assertIsr   r@   r  r'   d1singled2r  s         @r*   test_config_defaultz(TestConfigContainers.test_config_defaultP  s    	1 		 , 	  H"# "q!''q'1 "bii/q!r)   c                     G d dt               t        j                          t        g       5   G fddt              }ddd       t               }d|j                  _                }| j                  |j                  d       j                  |      } |       }| j                  |j                  |j                         | j                  |j                  d       y# 1 sw Y   xY w)	zDMake sure configurables work even with the deprecations in traitletsc                       e Zd Zy)JTestConfigContainers.test_config_default_deprecated.<locals>.SomeSingletonNr   r(   r)   r*   r  r   k  r   r)   r  c                   *    e Zd Z ed      Z fdZy)PTestConfigContainers.test_config_default_deprecated.<locals>.DefaultConfigurableTr   c                 l    j                         rj                         j                  S t               S r\   r  r  s    r*   r  z`TestConfigContainers.test_config_default_deprecated.<locals>.DefaultConfigurable._config_defaultu  s+    $002,557>>>!8Or)   N)r!   r"   r#   r   r%   r  r  s   r*   r  r"  r  s    4($r)   r  Nr6   r   r   )r   r   clearr   r   r	   r  r%   r?   r   r  r   r  s         @r*   test_config_default_deprecatedz3TestConfigContainers.test_config_default_deprecatedh  s    	1 	 	!!#r" 	$$l $	$ H"# "q!''q'1 "bii/q!)	$ 	$s   C$$C-c                     G d dt               }t               }d|j                  _        d|j                  _         |dd|      }|j                  dk(  sJ |j                  dk(  sJ |j
                  dk(  sJ |j                  dk(  sJ y )Nc                   t    e Zd Z edd      Z edd      Z edd      Z ed      Z ed      d        Z	y):TestConfigContainers.test_kwarg_config_priority.<locals>.AdefaultTr   neverr&   c                 <    | j                   | _        |j                  S r\   )r'   c_during_configvalue)r@   proposals     r*   	_record_czDTestConfigContainers.test_kwarg_config_priority.<locals>.A._record_c  s     (,vv$~~%r)   N)
r!   r"   r#   r   r%   r&   r'   r,  r   r/  r(   r)   r*   Ar(    sF    	$/A	$/A	$/A%g.Oc]& &r)   r0  za-configzb-configza-kwargzc-kwarg)r%   r'   r   )r   r	   r0  r%   r&   r'   r,  )r@   r0  r   r   s       r*   test_kwarg_config_priorityz/TestConfigContainers.test_kwarg_config_priority  s    
	& 
	& h)y5uu	!!!uu
"""uu	!!!""i///r)   N)r!   r"   r#   r   r   r   r   r   r   r   r   r  r	  r  r  r%  r1  r(   r)   r*   r   r     sI    62446613@"""0"<0r)   r   c                   f    e Zd Z G d de      Z ej                   eed       d      d        Z	y)
TestLoggerc                   B    e Zd Z ed      Z ed      Z ed      Zy)TestLogger.ATr   N)r!   r"   r#   r   rF   rG   bazr(   r)   r*   r0  r5    s     T"T"T"r)   r0  
assertLogszrequires TestCase.assertLogs)reasonc                    t        j                  d      }t        dddii      }| j                  |t         j                        5 }t
        j                  ||       d d d        dj                  j                        }| j                  d|       | j                  d|       t        dd	dii      }| j                  |t         j                        5 }t
        j                  ||       d d d        dj                  |j                        }| j                  d
|       | j                  d|       t        dddii      }| j                  |t         j                        5 }t
        j                  ||       d d d        dj                  |j                        }| j                  d|       | j                  d|       y # 1 sw Y   fxY w# 1 sw Y   xY w# 1 sw Y   bxY w)Ntest_warn_matchr0  batr6   )r   r   
z Did you mean one of: `bar, baz`?z*Config option `bat` not recognized by `A`.foolz+Config option `fool` not recognized by `A`.zDid you mean `foo`?totally_wrongz4Config option `totally_wrong` not recognized by `A`.zDid you mean)logging	getLoggerr	   r7  WARNINGr3  r0  joinoutputrz   r{   )r@   loggerr   capturedrC  s        r*   r:  zTestLogger.test_warn_match  s   ""#45cE1:&'__VW__5 	1LLL0	1 8??+8&ABFKcFA;'(__VW__5 	1LLL0	1 8??+CVL+V4cOQ/01__VW__5 	1LLL0	1 8??+LfU0+	1 	1	1 	1	1 	1s$   GG!GGGG#N)
r!   r"   r#   r   r0  r   skipifhasattrr   r:  r(   r)   r*   r3  r3    s<    # #
 T[[WX|44=[\1 ]1r)   r3  c                    t        j                  d      }t        j                  |ddi      }t        |t         j                        }d|_        |j                  j                  d       d|j                         j                  v sJ y )Nr   keyadapted)r   	log_levelz%(key)s %(message)sztest messagezadapted test message)
r?  r@  LoggerAdapterr   INFO
log_formatr   info
readouterrerr)caplogcapsysrD  adapterapps        r*   test_logger_adapterrV    sm    }-F##FUI,>?G
'W\\
:C*CNGGLL !V%6%6%8%<%<<<<r)   )0__doc__r?  unittestr   pytestr   traitlets.config.applicationr   traitlets.config.configurabler   r   r   traitlets.config.loaderr	   traitlets.logr
   traitlets.traitletsr   r   r   r   r   r   r   r   r   r   r   tests._warningsr   r   r^   re   replacer,   r1   r_   r`   r=   r   r   r   r   r   r   r   r3  rV  r(   r)   r*   <module>ra     s)   -
    4 
 + $    1\  //+w
/##K9$, $W# W
,H[x H[V@ @82h 2@	| 		 	bSX bSJ "g08 g0T1 1D=r)   