
    4eq                         d dl Z d dlmZ d dlZd dlmZ d dlZd dlm	Z	 d dl
mZ d dl
mZ  e j                  e      Z G d dej                         Z G d	 d
ej                         Zy)    N)mock)base)_message)fakes)utilsc                      e Zd ZdZd Zd Z ej                  d       ej                  d      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                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d       ej                  d      d               Z  ej                  d       ej                  dd !       ej                  d      d"                      Z! ej                  d      d#        Z" ej                  d      d$        Z# ej                  d      d%        Z$ ej                  d      d&        Z% ej                  d      d'        Z& ej                  d       ej                  d      d(               Z'y))*MessageTestCasez$Unit tests for locale Message class.c                    t        j                  d      }| j                  d|j                         | j                  d|       t        j                  dd      }| j                  d|j                         | j                  d|       y )N1A)msgtext)r   MessageassertEqualmsgidselfmessages     >/usr/lib/python3/dist-packages/oslo_i18n/tests/test_message.py test_message_id_and_message_textz0MessageTestCase.test_message_id_and_message_text"   sl    ""3'gmm,g&""34gmm,g&    c                 `    t        j                  d      dz  }| j                  |t               y Nzsome %sr   )r   r   assertIsInstancestrr   s     r   test_message_is_unicodez'MessageTestCase.test_message_is_unicode*   s'    ""9-	9gs+r   zlocale.getlocalegettext.translationc                    d}d}||i}d|i}t         j                  j                  |      }||_        d|_        t        j                  |      }| j                  ||       | j                  ||j                                y )NzA message in EnglishA message in Spanishesr   	r   FakeTranslations
translatorside_effectreturn_valuer   r   r   translation)	r   mock_translationmock_localer   es_translationes_translationstranslations_mapr#   r   s	            r   .test_create_message_non_english_default_localez>MessageTestCase.test_create_message_non_english_default_locale.   s    
 '/ .1 /2++667GH
'1$#* ""5) 	1)<)<)>?r   c                 |    t        j                  d      dz  }| j                  |j                         t               y r   )r   r   r   r&   r   r   s     r    test_translation_returns_unicodez0MessageTestCase.test_translation_returns_unicodeC   s0    ""9-	9g113S9r   c                     d}ddddddd}t        j                  |      |z  }||z  }| j                  ||       | j                  ||j                                y )	Nzn%(description)s
Command: %(cmd)s
Exit code: %(exit_code)s
Stdout: %(stdout)r
Stderr: %(stderr)r %%(something)stest1test2test3test4test5trimmed)descriptioncmd	exit_codestdoutstderr	somethingr   r   r   r&   r   r   paramsresultexpecteds        r   test_mod_with_named_parametersz.MessageTestCase.test_mod_with_named_parametersG   sm    5 ") &##(* !!%(616>6*6#5#5#78r   c                 j   d}dddddd}t        j                  |      |z  }|i z  }| j                  |j                  |j                         | j                  |j                  |j                         | j                  ||       | j                  |j                         |j                                y )Nz_%(description)s
Command: %(cmd)s
Exit code: %(exit_code)s
Stdout: %(stdout)r
Stderr: %(stderr)rr0   r1   r2   r3   r4   )r6   r7   r8   r9   r:   )r   r   r   r   r>   assertIsNotr&   )r   r   r>   firstr@   s        r   &test_multiple_mod_with_named_parameterz6MessageTestCase.test_multiple_mod_with_named_parameterX   s    & ") &##	%   '&0( 2: 	hnn5 	x7 	5) 	--/1B1B1DEr   c                     d}ddddddid}t        j                  |      |z  }||z  }| j                  ||       | j                  ||j                                y )	NzNRequest: %(method)s http://%(server)s:%(port)s%(url)s with headers %(headers)sPOSTr0   i  r1   h1val1)methodserverporturlheadersr<   r=   s        r   'test_mod_with_named_parameters_no_spacez7MessageTestCase.test_mod_with_named_parameters_no_space   sl    <"# "F^	- !!%(616>6*6#5#5#78r   c                     d}ddi}t        j                  |      |z  }||z  }| j                  ||       | j                  ||j                                y )Nz'Test that we can inject a dictionary %sr6   r0   r<   r=   s        r   test_mod_with_dict_parameterz,MessageTestCase.test_mod_with_dict_parameter   sX    9)!!%(616>6*6#5#5#78r   c                 R   d}ddi}t        j                  d      5 }||j                  j                  _        t	        j
                  |      |z  }d}||j                  j                  _        |j                         }||z  }| j                  ||       d d d        y # 1 sw Y   y xY w)NzCorrect type %(arg1)sarg1r0   r   zWrong type %(arg1)d)	r   patchr%   ugettextr   r   gettextr&   r   )r   r   r>   transr?   
wrong_typetrans_resultr@   s           r   'test_mod_with_wrong_field_type_in_transz7MessageTestCase.test_mod_with_wrong_field_type_in_trans   s    ''"ZZ-. 	5% 8=E''4%%e,v5F /J6@E&&3!--/Lv~HX|4	5 	5 	5s   A8BB&c                     d}ddi}t        j                  t              5  t        j                  |      |z   d d d        y # 1 sw Y   y xY w)Nz(Test that we handle unused args %(arg1)drS   r0   )	testtoolsExpectedException	TypeErrorr   r   r   r   r>   s      r   test_mod_with_wrong_field_typez.MessageTestCase.test_mod_with_wrong_field_type   sG    :'"((3 	-U#f,	- 	- 	-s   AAc                     d}ddi}t        j                  t        d      5  t        j                  |      |z   d d d        y # 1 sw Y   y xY w)Nz2Test that we handle missing args %(arg1)s %(arg2)srS   r0   z.*arg2.*)r\   r]   KeyErrorr   r   r_   s      r   test_mod_with_missing_argz)MessageTestCase.test_mod_with_missing_arg   sI    D'"((:> 	-U#f,	- 	- 	-s   AAc                    d}g d}g }g }|D ]=  }|j                  ||z         |j                  t        j                  |      |z         ? t        ||      D ]|  \  }}| j	                  |t        j                         | j                  ||j                                d|j                         z  }| j                  ||       | j                  ||       ~ y )NzSome string with params: %d)r      
   i<^  z%s)appendr   r   zipr   r   r&   )	r   r   r>   messagesresultsparamr   r?   
result_strs	            r    test_mod_with_integer_parametersz0MessageTestCase.test_mod_with_integer_parameters   s    -" 	<EOOEEM*NN8++E2U:;	<  #8W5 	.OGV!!&(*:*:;Wf&8&8&:;  2 2 44JZ1Wf-	.r   c                     d}ddi}t        j                  |      |z  }d|d<   | j                  d|j                                y )NzFound object: %(current_value)scurrent_valuere      zFound object: 1r<   )r   r   changing_dictr?   s       r   test_mod_copies_parametersz*MessageTestCase.test_mod_copies_parameters   sL    1(!,!!%(=8)*o& 	*F,>,>,@Ar   c                     d}t        g d      }d|i}t        j                  |      |z  }|j                  d       | j	                  d|j                                y )NzFound list: %(current_list)s)re   rp      current_list   zFound list: [1, 2, 3])listr   r   rg   r   r&   )r   r   changing_listr>   r?   s        r   test_mod_deep_copies_parametersz/MessageTestCase.test_mod_deep_copies_parameters   sY    .Y -0!!%(61Q 	0&2D2D2FGr   c                     d}t        j                  d      }t        j                  |      |z  }| j	                  d|j                                y )Nz	Value: %s   zValue: 5r   NoDeepCopyObjectr   r   r   r&   r   r   r>   r?   s       r   'test_mod_deep_copies_param_nodeep_paramz7MessageTestCase.test_mod_deep_copies_param_nodeep_param   sE    ''*!!%(61V%7%7%9:r   c                 H   d}dt        j                  d      d}t        j                  |      |z  }| j	                  d|j                                dt        j                  d      d}t        j                  |      |z  }| j	                  d|j                                y )	NzValues: %(val1)s %(val2)sre   rp   )rI   val2zValues: 1 2rt   rv   zValues: 3 4r|   r~   s       r   &test_mod_deep_copies_param_nodeep_dictz6MessageTestCase.test_mod_deep_copies_param_nodeep_dict   s    +U%;%;A%>?!!%(61(:(:(<= U%;%;A%>?!!%(61(:(:(<=r   c                 2   d}t        j                  |      }|dddz  }|dddz  }| j                  ||       | j                  ||       | j                  |j	                         |dddz         | j                  |j	                         |dddz         y )Nz&Some msgid string: %(test1)s %(test2)sfoobar)r0   r1   foo2bar2)r   r   rC   r   r&   )r   r   r   m1m2s        r   test_mod_returns_a_copyz'MessageTestCase.test_mod_returns_a_copy   s    8""5)77&99"%"%)55!AA	C)6F!CC	Er   c                     d}t        j                  |      d z  }| j                  |d z  |       | j                  |d z  |j                                y )NzSome string with params: %sr<   )r   r   r   s      r   test_mod_with_none_parameterz,MessageTestCase.test_mod_with_none_parameter  sM    -""5)D0w/w':':'<=r   c                 @    dfd}| j                  t        |       y )NzSome string with params: %s %sc                  4    t        j                         dz  S )Nzjust oner   r   r   s   r   <lambda>zBMessageTestCase.test_mod_with_missing_parameters.<locals>.<lambda>  s    (**51J> r   assertRaisesr^   r   test_mer   s     @r    test_mod_with_missing_parametersz0MessageTestCase.test_mod_with_missing_parameters  s    0>)W-r   c                 "   d}dddd}t        j                  |      |z  }||z  }| j                  ||       | j                  ||j                                | j                  |j	                         |j
                  j	                                y )Nz.Some string with params: %(param1)s %(param2)stestr1   notinstring)param1param2param3)r   r   r   r&   keysr>   r=   s        r   test_mod_with_extra_parametersz.MessageTestCase.test_mod_with_extra_parameters  s    @"#)+ !!%(616>6*6#5#5#78 	(:(:(<=r   c                 @    dfd}| j                  t        |       y )N	A messagec                  4    t        j                         dz   S )Nz some stringr   r   s   r   r   z3MessageTestCase.test_add_disabled.<locals>.<lambda>$  s    (**51NB r   r   r   s     @r   test_add_disabledz!MessageTestCase.test_add_disabled"  s    B)W-r   c                 @    dfd}| j                  t        |       y )Nr   c                  Z    t        j                  d      t        j                         z   S )Nr   )r   
SomeObjectr   r   r   s   r   r   z4MessageTestCase.test_radd_disabled.<locals>.<lambda>)  s"    %**62X5E5Ee5LL r   r   r   s     @r   test_radd_disabledz"MessageTestCase.test_radd_disabled'  s    L)W-r   c                     d}d}t        j                  |      }||i}d|i}t        j                  j	                  |      }||_        | j                  ||j                  d             y NA message in the default localer   r   r   r   r   r"   r#   r$   r   r&   )r   r'   
en_messager)   r   r*   r+   r#   s           r   test_translationz MessageTestCase.test_translation,  sl    6
/"":.%~6 /2++667GH
'1$)<)<T)BCr   c                    d}d}t        j                  |      }||i}d|i}t        j                  j	                  |      }||_        t        j                  |      }t        |      }	| j                  ||	j                  d             y r   )r   r   r   r"   r#   r$   r   r   r   r   r&   )
r   r'   r   r)   r   r*   r+   r#   objunicoded_objs
             r   +test_translate_message_from_unicoded_objectz;MessageTestCase.test_translate_message_from_unicoded_object9  s    6
/"":.%~6 /2++667GH
'1$ w'3x)A)A$)GHr   c                    d}d}d}t        j                  |      }||i}||i}||d}t        j                  j	                  |      }	|	|_        | j                  ||j                  d             | j                  ||j                  d             | j                  ||j                  d              | j                  ||j                  d             | j                  ||j                  d             y )	Nr   r   zA message in Chinese)r   zhr   r   enXXr   )
r   r'   r   r)   zh_translationr   r*   zh_translationsr+   r#   s
             r   !test_translate_multiple_languagesz1MessageTestCase.test_translate_multiple_languagesJ  s    6
//"":.%~6%~6"1"13++667GH
'1$)<)<T)BC)<)<T)BCW%8%8%>?W%8%8%>?W%8%8%>?r   c                 4   d}d}d}||i}t         j                  j                  d|i      }||_        t	        j
                  |      }||z  }||z  }||z  }	| j                  |	|j                  d             | j                  ||j                  d             y NA message: %sA message in Spanish: %sA Message paramr   r   r   r"   r#   r$   r   r   r   r&   )
r   r'   message_with_paramsr)   rk   translationsr#   msgdefault_translationexpected_translations
             r   !test_translate_message_with_paramz1MessageTestCase.test_translate_message_with_param^  s    -3!+^<++66l7KL
'1$23Ek1E9-5-st/DE,cood.CDr   zoslo_i18n._message.LOGc                 r   d}d}d}||i}t         j                  j                  d|i      }||_        t	        j
                  d      5 }t	        j                  dt               t        j                  |      }	|	|z  }	||z  }
| j                  |
|	j                  d             | j                  d	t        |             | j                  d
t        |d   j                        j                  dd             d d d        |j                   j#                  d||t$        j&                         y # 1 sw Y   6xY w)Nr   A message in Spanish: %s %sr   r   Trecordignore)categoryre   Failed to insert replacement values into translated message A message in Spanish: %s %s (Original: 'A message: %s'): not enough arguments for format stringr   u''QFailed to insert replacement values into translated message %s (Original: %r): %s)r   r"   r#   r$   warningscatch_warningsfilterwarningsDeprecationWarningr   r   r   r&   lenr   r   replacedebugassert_called_withr   ANY)r   mock_logr'   r   r)   rk   r   r#   wr   r   s              r   &test_translate_message_bad_translationz6MessageTestCase.test_translate_message_bad_translationp  s.   
 .6!+^<++66l7KL
'1$$$D1 	CQ##H7IJ""#67C+C"5"=0#//$2GHQA'  F !1.66tSA	C	C$ 	)) ,C +9*=*.((	4%	C 	Cs   	B/D--D6)r    )r%   c                    d}d}d}||i}t         j                  j                  d|i      }||_        t	        j
                  |      }	t        j                  d      5 }
t        j                  d       |	|z  }	| j                  dt        |
             | j                  d	t        |
d
   j                        j                  dd             d d d        |j                  j                  d||t         j"                         |j%                          ||z  }| j                  ||	       | j'                  |j(                  j*                         y # 1 sw Y   xY w)Nr   r   r   r   Tr   alwaysre   r   r   r   r   r   )r   r"   r#   r$   r   r   r   r   simplefilterr   r   r   r   r   r   r   r   r   
reset_mockassertFalsewarningcalled)r   r   r(   r'   r   r)   rk   r   r#   r   r   r   s               r   .test_translate_message_bad_default_translationz>MessageTestCase.test_translate_message_bad_default_translation  sJ    .6!+^<++66l7KL
'1$23$$D1 	CQ!!(++CQA'  F !1.66tSA	C	C 	)) ,C +9*=*.((	4 	1E9,c2))001/	C 	Cs   A.EEc                    d}d}d}d}||||i}t         j                  j                  d|i      }||_        t	        j
                  |      }t	        j
                  |      }	t        j                  |	      }
||
z  }||z  }||z  }| j                  ||j                  d             | j                  ||j                  d             y )Nr   r   r   zA Message param in Spanishr   r   )
r   r"   r#   r$   r   r   r   r   r   r&   )r   r'   r   r)   rk   param_translationr   r#   r   	param_msgr   r   r   s                r   (test_translate_message_with_object_paramz8MessageTestCase.test_translate_message_with_object_param  s    -3!8+^02++66l7KL
'1$23$$U+	
 y)Ci1E9-0AA-st/DE,cood.CDr   c                 t   d}d}d}||i}t         j                  j                  d|i      }||_        t	        j
                  |      }||z  }||z  }||z  }	t        j                  |      }
t        |
      }| j                  |	|j                  d             | j                  ||j                  d             y r   )r   r"   r#   r$   r   r   r   r   r   r   r&   )r   r'   r   r)   rk   r   r#   r   r   r   r   r   s               r   3test_translate_message_with_param_from_unicoded_objzCMessageTestCase.test_translate_message_with_param_from_unicoded_obj  s     .3!+^<++66l7KL
'1$23Ek1E9-5s#3x-|/G/G/MN,l.F.Ft.LMr   c                 f   d}d}d}d}||||i}t         j                  j                  d|i      }||_        t	        j
                  |      }t	        j
                  |      }	||	z  }||z  }
||z  }| j                  ||j                  d             | j                  |
|j                  d             y )NzA message with param: %sz#A message with param in Spanish: %sA message paramA message param in Spanishr   r   r   r   r'   r   r)   message_parames_param_translationr   r#   r   	msg_paramr   r   s               r   -test_translate_message_with_message_parameterz=MessageTestCase.test_translate_message_with_message_parameter  s    8>);+^%';=++66l7KL
'1$23$$]3	Io1MA-0DD-st/DE,cood.CDr   c                    d}d}d}d}d}d}||||||i}t         j                  j                  d|i      }	|	|_        t	        j
                  |      }
t	        j
                  |      }t	        j
                  |      }|
||fz  }
|||fz  }|||fz  }| j                  ||
j                  d             | j                  ||
j                  d             y )	NzA message with params: %s %sz'A message with params in Spanish: %s %sr   r   zAnother message paramz Another message param in Spanishr   r   r   )r   r'   r   r)   r   r   another_message_paramanother_es_param_translationr   r#   r   param_1param_2r   r   s                  r   .test_translate_message_with_message_parametersz>MessageTestCase.test_translate_message_with_message_parameters  s   <B); 7'I$+^%';-/KM ++66l7KL
'1$23""=1""#89Wg&&1]5J5L L-1E1M1O  O-st/DE,cood.CDr   c                 r   d}d}d}d}||||i}t         j                  j                  d|i      }||_        t	        j
                  |      }t	        j
                  |      }	|d|	iz  }|d|iz  }
|d|iz  }| j                  ||j                  d             | j                  |
|j                  d             y )N A message with params: %(param)s+A message with params in Spanish: %(param)sr   r   r   rk   r   r   r   s               r   ,test_translate_message_with_named_parametersz<MessageTestCase.test_translate_message_with_named_parameters"  s    @F);+^%';=++66l7KL
'1$23$$]3	Wi((1Wm4LL-:N0OO-st/DE,cood.CDr   c                 `   d}d}d}d}d}d}d}	d}
||||i}||||	i}||||
i}t         j                  j                  |||d	      }||_        d
|_        t        j                  |      }t        j                  |      }|d|iz  }|d|iz  }|d|	iz  }|d|
iz  }| j                  ||       | j                  ||j                                | j                  ||j                  d             | j                  ||j                  d             | j                  ||j                  d             y )Nr   r   z+A message with params in Chinese: %(param)sz*A message with params in French: %(param)sr   r   zA message param in ChinesezA message param in French)r   r   frr    rk   r   r   r   r!   )r   r'   r(   r   r)   r   fr_translationr   r   zh_param_translationfr_param_translationr*   r   fr_translationsr#   r   r   s                    r   )test_translate_message_non_default_localez9MessageTestCase.test_translate_message_non_default_locale7  sz   
 AFFE);;:.(*>@.(*>@.(*>@ ++66o>M>M8O P
 (2$#* 23$$]3	Wi(('74H*II'74H*II'74H*II 	-):;)>? 	)>?)>?r   N)(__name__
__module____qualname____doc__r   r   r   rT   r,   r.   rA   rE   rO   rQ   rZ   r`   rc   rm   rr   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	      s   .', TZZ"#TZZ%&@ ' $@&:9"+FZ995"--.&	B
H;
>E>.>.
.
 TZZ%&
D '
D TZZ%&I 'I  TZZ%&@ '@& TZZ%&E 'E" TZZ%&TZZ()"4 * '"4H TZZ%&TZZ"<TZZ()%2 * = '%2N TZZ%&E 'E4 TZZ%&N 'N, TZZ%&E 'E( TZZ%&E 'E4 TZZ%&E 'E( TZZ"#TZZ%&*@ ' $*@r   r	   c                       e Zd Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Zy)TranslateMsgidTestr   c                 @   t        j                         }||_        t        j                         }d|_        ||_        ||_        t
        j                  j                  dddd      }| j                  d|       |j                  dt
        j                  z   dz          y )	N
translatedcontextr   domainTFr  has_contextual_formhas_plural_formr  r   )r   Mockr%   rV   rU   r   r   _translate_msgidr   r   CONTEXT_SEPARATORr   r&   langrW   r?   s        r   test_contextualz"TranslateMsgidTest.test_contextualh  s    yy{#' 		)!!22" $!	 3 
 	v.  222Y>	
r   c                 D   dt         j                  z   dz   }t        j                         }||_        t        j                         }||_        ||_        ||_        t         j                  j                  dddd      }| j                  d|       |j                  |       y )Nr  r   r  r  TFr  )r   r  r   r  r%   rV   rU   r   r  r   r   )r   r&   msg_with_contextr  rW   r?   s         r   test_contextual_untranslatablez1TranslateMsgidTest.test_contextual_untranslatable{  s    $x'A'AAIMyy{#' 		-!!22" $!	 3 
 	F+  !12r   c                    t        j                         }||_        t        j                         }d|_        ||_        ||_        t
        j                  j                  dddd      }| j                  d|       |j                  ddd	       y )
Nr
  )singlepluralr  FTr  r  r  r  )
r   r  r%   ngettext	ungettextr   r   r  r   r   r  s        r   test_pluralzTranslateMsgidTest.test_plural  s    yy{#' 		)!!22$ % 	 3 
 	v.  h	
r   c                 j    | j                  t        t        j                  j                  dddd       y )Nnothingr  Tr  )r   
ValueErrorr   r   r  )r   r&   s     r   test_contextual_and_pluralz-TranslateMsgidTest.test_contextual_and_plural  s3    -- $  	 	
r   N)	r  r  r  r   rT   r  r  r   r$  r  r   r   r  r  f  s    TZZ%&
 '
$ TZZ%&3 '3" TZZ%&
 '
$ TZZ%&
 '
r   r  )loggingunittestr   r   oslotestr   	test_baser\   	oslo_i18nr   oslo_i18n.testsr   r   	getLoggerr  LOGBaseTestCaser	   r  r  r   r   <module>r.     s\   "    &   ! !g!D	@i,, D	@NC
// C
r   