B
    18\                 @   sJ   d dl Z d dlZd dlZd dlZdZG dd dejZedkrFe  dS )    Nzglobal variablec               @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsS )tTestCasec             C   sJ   xD|D ]<}| j |d& | || t| W d Q R X W d Q R X qW d S )N)str)subTestassertRaisesRegexeval)selfZexception_typeregexZerror_stringsr    r	   U/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_fstring.pyassertAllRaise   s    
zTestCase.assertAllRaisec             C   s   G dd d}| }| }t dd ||_| | t| | | d | t|t| | |dd | |dd | t||dd | t||dd d S )Nc               @   s   e Zd Zdd ZdS )z(TestCase.test__format__lookup.<locals>.Xc             S   s   dS )Nclassr	   )r   specr	   r	   r
   
__format__   s    z3TestCase.test__format__lookup.<locals>.X.__format__N)__name__
__module____qualname__r   r	   r	   r	   r
   X   s   r   c             S   s   dS )Ninstancer	   )r   r   r	   r	   r
   <lambda>!       z/TestCase.test__format__lookup.<locals>.<lambda>r    r   )types
MethodTyper   assertEqualformattype)r   r   xyr	   r	   r
   test__format__lookup   s    zTestCase.test__format__lookupc             C   sR   G dd d}| }d}t |}t|dd}| |j t| | |j d S )Nc               @   s   e Zd Zdd Zdd ZdS )zTestCase.test_ast.<locals>.Xc             S   s
   d| _ d S )NF)called)r   r	   r	   r
   __init__4   s    z%TestCase.test_ast.<locals>.X.__init__c             S   s
   d| _ dS )NT   )r   )r   r	   r	   r
   __call__6   s    z%TestCase.test_ast.<locals>.X.__call__N)r   r   r   r    r"   r	   r	   r	   r
   r   3   s   r   z
a = 10
f'{a * x()}'r   exec)astparsecompileassertFalser   r#   
assertTrue)r   r   r   exprtcr	   r	   r
   test_ast1   s    
zTestCase.test_astc             C   s  d}t |}| t|t j | t|jd | t|jd t j | |jd jd | t|jd t j	 | t|jd j
t j | t|jd j
jd | t|jd j
jd t j | |jd jd | |jd j
jd | |jd j
jd jd |jd j
jd j
}| t|t j | t|jt j | t|jt j | t|jt j | |jd | |jjd | |jjd | |jd | |jjd | |jjd d S )Nz
a = 10
f'{a * x()}'   r            )r$   r%   r   r   ModulelenbodyAssignlinenoExprvalue	JoinedStrvaluesFormattedValueBinOpleftNameopMultrightCall
col_offset)r   r)   r*   binopr	   r	   r
   test_ast_line_numbersI   s0    
 zTestCase.test_ast_line_numbersc             C   s^  d}t |}| t|t j | t|jd | t|jd t j | t|jd jt j	 | |jd j
d | t|jd t j | t|jd jt j	 | t|jd jjd | t|jd jjd t j | t|jd jjd t j | t|jd jjd t j | t|jd jjd t j | |jd j
d | |jd jj
d | |jd jjd j
d | |jd jjd j
d | |jd jjd j
d | |jd jjd j
d |jd jjd j}| t|t j | t|jt j | t|jt j | t|jt j | |j
d | |jj
d | |jj
d | |jd | |jjd | |jjd |jd jjd j}| t|t j | t|jt j | t|jt j | t|jt j | |j
d | |jj
d | |jj
d | |jd	 | |jjd	 | |jjd
 d S )Nz8
f'no formatted values'
f'eggs {a * x()} spam {b + y()}'r-   r   r.   r!   r/               )r$   r%   r   r   r1   r2   r3   r6   r7   r8   r5   r9   Strr:   r;   r<   r=   r>   r?   r@   rA   rB   ZAdd)r   r)   r*   Zbinop1Zbinop2r	   r	   r
   .test_ast_line_numbers_multiple_formattedvaluesh   sT    
    z7TestCase.test_ast_line_numbers_multiple_formattedvaluesc             C   s  d}t |}| t|t j | t|jd | t|jd t j | |jd jd | t|jd t j	 | t|jd j
t j | t|jd j
jd | t|jd j
jd t j | |jd jd | |jd j
jd | |jd j
jd jd |jd j
jd j
}| t|t j | t|jt j | t|jt j | t|jt j | |jd | |jjd | |jjd | |jd | |jjd | |jjd | t|jjd | t|jjd t j | t|jjd t j | t|jjd t j | |jjd jd | |jjd jd | |jjd jd |jjd j
}| t|t j | |jd | |jd d S )Nz
a = 10
f'{a * f"-{x()}-"}'r-   r   r.   r/   r0      )r$   r%   r   r   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rB   rI   rA   )r   r)   r*   rC   callr	   r	   r
   test_ast_line_numbers_nested   sF    
 z%TestCase.test_ast_line_numbers_nestedc             C   s>  d}t |}| t|t j | t|jd | t|jd t j | |jd jd | t|jd t j	 | t|jd j
t j | t|jd j
jd | t|jd j
jd t j | t|jd j
jd t j | t|jd j
jd t j | t|jd j
jd t j | t|jd j
jd t j | |jd jd | |jd j
jd | |jd j
jd jd | |jd j
jd jd | |jd j
jd jd | |jd j
jd jd | |jd j
jd jd |jd j
jd j
}| t|t j | t|jt j | t|jt j | t|jt j | |jd | |jjd | |jjd | |jd | |jjd | |jjd |jd j
jd j
}| t|t j | t|jt j | t|jt j | t|jt j | |jd | |jjd | |jjd | |jd | |jjd | |jjd |jd j
jd j
}| t|t j | t|jt j | t|jt j | t|jt j | |jd | |jjd | |jjd | |jd | |jjd | |jjd d	S )
z|Duplicate expression

        NOTE: this is currently broken, always sets location of the first
        expression.
        z)
a = 10
f'{a * x()} {a * x()} {a * x()}'
r-   r   r.      r/   r!   r0   N)r$   r%   r   r   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   rI   r;   r<   r=   r>   r?   r@   rA   rB   )r   r)   r*   rC   r	   r	   r
   *test_ast_line_numbers_duplicate_expression   sl    	
     z3TestCase.test_ast_line_numbers_duplicate_expressionc             C   s  d}t |}| t|t j | t|jd | t|jd t j | |jd jd | t|jd t j	 | t|jd j
t j | t|jd j
jd | t|jd j
jd t j | t|jd j
jd t j | t|jd j
jd t j | |jd jd | |jd j
jd | |jd j
jd jd | |jd j
jd jd | |jd j
jd jd | |jd jd | |jd j
jd | |jd j
jd jd | |jd j
jd jd | |jd j
jd jd |jd j
jd j
}| t|t j | t|jt j | t|jt j | t|jt j | |jd | |jjd | |jjd	 | |jd | |jjd | |jjd
 d S )Nz?
a = 10
f'''
  {a
     *
       x()}
non-important content
'''
r-   r   r.   r/   rE   r!      r0   )r$   r%   r   r   r1   r2   r3   r4   r5   r6   r7   r8   r9   rI   r:   rB   r;   r<   r=   r>   r?   r@   rA   )r   r)   r*   rC   r	   r	   r
   'test_ast_line_numbers_multiline_fstring
  sB    
   z0TestCase.test_ast_line_numbers_multiline_fstringc             C   s,   dd }|  |j dd }|  |j d S )Nc               S   s   d d S )NzNot a docstringr	   r	   r	   r	   r
   fA  s    z"TestCase.test_docstring.<locals>.fc               S   s   d d S )NzNot a docstringr	   r	   r	   r	   r
   gD  s    z"TestCase.test_docstring.<locals>.g)assertIsNone__doc__)r   rS   rT   r	   r	   r
   test_docstring@  s    zTestCase.test_docstringc          	   C   s&   |  td td W d Q R X d S )Nzmalformed node or stringzf'x')r   
ValueErrorr$   literal_eval)r   r	   r	   r
   test_literal_evalI  s    zTestCase.test_literal_evalc             C   s<   dg}d}t |}t|dd}t| | |d d d S )Nr   zx[0] = 'foo' f'{3}'r#   r   Zfoo3)r$   r%   r&   r#   r   )r   r   r)   r*   r+   r	   r	   r
   test_ast_compile_time_concatM  s    
z%TestCase.test_ast_compile_time_concatc             C   s   |  tdddg d S )Nz&cannot mix bytes and nonbytes literalszf'' b''zb'' f'')r   SyntaxError)r   r	   r	   r
   test_compile_time_concat_errorsV  s    z(TestCase.test_compile_time_concat_errorsc             C   s(   |   d |  dd |  dd d S )Nr   a )r   )r   r	   r	   r
   test_literal]  s    zTestCase.test_literalc             C   s   |  tdddddg d S )Nzf-string: unterminated stringzf'{"x'zf'{"x}'zf'{("x'zf'{("x}')r   r\   )r   r	   r	   r
   test_unterminated_stringb  s
    z!TestCase.test_unterminated_stringc             C   s   |  tddg d S )Nzf-string: mismatchedzf'{((}')r   r\   )r   r	   r	   r
   test_mismatched_parensj  s    zTestCase.test_mismatched_parensc             C   sr  |  dd |  dd |  dd |  dd |  dd |  dd |  dd |  dd |  d	d	 |  d
d
 |  dd |  dd |  dd |  dd |  dd |  dd |  dd d |  dd d |  dd d |  dd d |  d dd |  d dd |  d dd |  d dd |  d d | tddg d S ) N{za{z{bza{b}za}z}bza}bz{}za{}z{b}z{}cza{b}za{}cz{b}cza{b}c
   z{10z}10z}{z}{10z}a{z}a{10z10{z10}z10}{z}a{}z10}a{}z{{}}zunhashable typezf'{ {{}} }')r   r   	TypeError)r   r	   r	   r
   test_double_braceso  s6    zTestCase.test_double_bracesc             C   s  d}|  d| dd |  d| dd |  d| d|dd |  d	| d
 |  d| d |  d	| d
 |  d| d |  d| d |  d| d |  | dd |  | d |  | d |  | d |  | dd |  d| dd |  d| d |  | d| d |   d |   d |   d |   d |   d |   d |   d | tddg d S )Ndefzabc## Zghizabc## defghiabcZ	abcdefghi4zabcdefghidef z{x}z{x}defz{xz{xdefz{{x}}z{{x}}defz{{xz{{xdefzx}}zx}}defzdefx}}2Zdef21Z1def2Z1def-zdef-defr   zf-string: expecting '}'z
f'{3' f'}')r   r   r\   )r   r   r	   r	   r
   test_compile_time_concat  s6    z!TestCase.test_compile_time_concatc             C   sB   ddi}|  d d |  |d  d | tdddddg d S )N#hashz+f-string expression part cannot include '#'zf'{1#}'z	f'{3(#)}'zf'{#}'zf'{)#}')r   r   r\   )r   dr	   r	   r
   test_comments  s    zTestCase.test_commentsc             C   s   ddd}d}d}x.t ddD ] }| t|||d |  qW | t|d	d
 |d d  |dd}| t||d d  dd }| t|d d S )Nr   c             S   s   dd|   | d S )Nzf'z{x} 'r	   )nextrar	   r	   r
   
build_fstr  s    z2TestCase.test_many_expressions.<locals>.build_fstrr   r.      i  r_         i      z{x:{width}}    zf'{1}' 'x' 'y'i   A   1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy)r   )ranger   r   )r   rv   r   widthisr	   r	   r
   test_many_expressions  s    
  
zTestCase.test_many_expressionsc          	   C   s  d}d}t d}| d|| d| d | d||d| d | d||dd|dd | d|d	 d
dd|dd | d|d	 d
dd|dd | ddd	 dd | dd dd
 d d | ddd dd
 dd | dd dd	 dd d | dddddikoH| dd | tddg | tddg | tddg | tddg d S )Nre   r!   z12.34567zresult: .zresult:      12.350rl   r.   r   ro   0xz
       0xar   irm   z
      -0xar/   rN   zf-string: expecting '}'zf'{"s"!r{":10"}}'zinvalid syntaxzf'{4:{/5}}'z'f-string: expressions nested too deeplyz,f'result: {value:{width:{0}}.{precision:1}}'z&f-string: invalid conversion characterzf'{"s"!{"r"}}')decimalZDecimalr   r   r\   )r   r}   Z	precisionr7   r	   r	   r
   !test_format_specifier_expressions  s*    
"&& &z*TestCase.test_format_specifier_expressionsc             C   s.   G dd d}| }|  | d| d d S )Nc               @   s   e Zd Zdd Zdd ZdS )z*TestCase.test_side_effect_order.<locals>.Xc             S   s
   d| _ d S )Nr   )r~   )r   r	   r	   r
   r      s    z3TestCase.test_side_effect_order.<locals>.X.__init__c             S   s   |  j d7  _ t| j S )Nr.   )r~   r   )r   r   r	   r	   r
   r     s    z5TestCase.test_side_effect_order.<locals>.X.__format__N)r   r   r   r    r   r	   r	   r	   r
   r     s   r   r_   z1 2)r   )r   r   r   r	   r	   r
   test_side_effect_order  s    zTestCase.test_side_effect_orderc             C   sJ   |  tddddddddd	d
ddddddddddg |  tdddg d S )Nz&f-string: empty expression not allowedzf'{}'zf'{ }'f' {} 'zf'{!r}'zf'{ !r}'zf'{10:{ }}'zf' { } 'zf'''{	
}'''zf'{!x}'z	f'{ !xr}'zf'{!x:}'z	f'{!x:a}'z
f'{ !xr:}'zf'{ !xr:a}'zf'{!}'zf'{:}'zf'{!'zf'{!s:'zf'{:'zf'{:x'zinvalid character in identifieru   f'''{ }'''    )r   r\   )r   r	   r	   r
   test_missing_expression  s.    z TestCase.test_missing_expressionc             C   sD   |  d d | tdddg | tddg | tddg d S )	N)r/   z(3,)zinvalid syntaxzf'{,}'zf-string: expecting '}'z
f'{3)+(4}'z!EOL while scanning string literalzf'{
}')r   r   r\   )r   r	   r	   r
   test_parens_in_expressions0  s    z#TestCase.test_parens_in_expressionsc          	   C   s  |  dd |  dd |  dd |  d dd |  d dd d |  dd d |  dd |  d	d	 |  d	d	 |  d dd
 |  d dd d |  dd d |  dd |  dd |  dd |  d dd
 |  d dd d |  dd d |  dd |  d dd
 |  d dd d |  dd d |  d
d
 |  dd |  dd |  dd |  dd |  dd |  d dd |  d dd d |  dd d |  dd |  dd |  dd | t td}W d Q R X |  |d |  dd d |  dd d d}|  dd |  d| d |  d| d |  dd d S )N	z\tr-   z2	r/   z2	3z	3u   Δz\u0394u   2Δu   2Δ3u   Δ3z
\U00000394r_   z\x20z2 z2 3z 3z	f'\{6*7}'z\42\*   Zspam&z\Nz\Nspamz\&)r   assertWarnsDeprecationWarningr   )r   r7   Z	AMPERSANDr	   r	   r
   test_backslashes_in_string_partD  sX    z(TestCase.test_backslashes_in_string_partc          
   C   s   |  tdddddddg d S )Nzi\(unicode error\) 'unicodeescape' codec can't decode bytes in position .*: malformed \\N character escapezf'\N'zf'\N{'z f'\N{GREEK CAPITAL LETTER DELTA'z'\N'z'\N{'z'\N{GREEK CAPITAL LETTER DELTA')r   r\   )r   r	   r	   r
   %test_misformed_unicode_character_name{  s    z.TestCase.test_misformed_unicode_character_namec             C   s"   |  tddddddddd	g d S )
Nz3f-string expression part cannot include a backslashz
f'{\'a\'}'zf'{\t3}'zf'{\}'zrf'{\'a\'}'z	rf'{\t3}'zrf'{\}'zrf'{"\N{LEFT CURLY BRACKET}"}'zf'{\n}')r   r\   )r   r	   r	   r
   &test_no_backslashes_in_expression_part  s    z/TestCase.test_no_backslashes_in_expression_partc             C   s4   |  dd |  dd |  dd |  dd dS )z@
        Only literal curly braces begin an expression.
        z{1+1}z{1+1N)r   )r   r	   r	   r
   test_no_escapes_for_braces  s    z#TestCase.test_no_escapes_for_bracesc             C   s    |  d d |  d d d S )Nr   r   r0   7)r   )r   r	   r	   r
   test_newlines_in_expressions  s    z%TestCase.test_newlines_in_expressionsc                sj   d |   fdddd |   fddddd |   fd	dddd
 | tddg d S )NrN   c                s    |  S )Nr	   )r   )r   r	   r
   r     r   z&TestCase.test_lambda.<locals>.<lambda>8z'88888'c                s    |  S )Nr	   )r   )r   r	   r
   r     r   10z
'88888'   c                s    |  S )Nr	   )r   )r   r	   r
   r     r   z
88888     zunexpected EOF while parsingzf'{lambda x:x}')r   r   r\   )r   r	   )r   r
   test_lambda  s    zTestCase.test_lambdac             C   s$   dd }|d}|  t|d d S )Nc             s   s   d| d V   d S )Nzy:r-   r	   )r   r	   r	   r
   fn  s    zTestCase.test_yield.<locals>.fnr!   rE   )r   next)r   r   rT   r	   r	   r
   
test_yield  s    zTestCase.test_yieldc             C   s>   dd }|d}t |}| |dd | |dd d S )Nc             3   s   d fddV  V  d S )Nzx:c                s    |  S )Nr	   )r~   )r   r	   r
   r     r   z6TestCase.test_yield_send.<locals>.fn.<locals>.<lambda>r	   )r   r	   )r   r
   r     s    z$TestCase.test_yield_send.<locals>.fnre   r!   (   stringzx:string)r   r   send)r   r   rT   Z
the_lambdar	   r	   r
   test_yield_send  s
    zTestCase.test_yield_sendc             C   st   |  d d |  d d |  d d |  d d |  d d |  d d |  d d |  d d d S )Nr   zeric'szxeric"syzxeric"szeric"sy)r   )r   r	   r	   r
   +test_expressions_with_triple_quoted_strings  s    z4TestCase.test_expressions_with_triple_quoted_stringsc             C   s   d}d}|  | | d |  d| | d |  | d| d |  | | dd |  d| d| d	 |  d| | dd
 |  | d| dd |  d| d| dd d S )Nb   ri   Z98abcr   ZX98abcZ98XabcZ98abcXYZX98YabcZX98abcYZ98XabcYZZX98YabcZ)r   )r   r   r   r	   r	   r
   test_multiple_vars  s    zTestCase.test_multiple_varsc             C   s0   dd }|  |d d |  |d d d S )Nc                s    fdd}|S )Nc                  s
   d  S )Nzx:r	   r	   )r   r	   r
   inner  s    z3TestCase.test_closure.<locals>.outer.<locals>.innerr	   )r   r   r	   )r   r
   outer  s    z$TestCase.test_closure.<locals>.outerZ987zx:987r0   zx:7)r   )r   r   r	   r	   r
   test_closure  s    zTestCase.test_closurec                s<   d  fdd}|  |ddd d}|  |ddd d S )	Nr-   c                s   d|   | S )Nzx=r	   )r   r}   )r   r	   r
   rS     s    z"TestCase.test_arguments.<locals>.ffoore   zx=foofoo    barzx=        20)r   )r   rS   r   r	   )r   r
   test_arguments  s
    zTestCase.test_argumentsc             C   s   d}|  d| d d S )N{   zv:zv:123)r   )r   r7   r	   r	   r
   test_locals  s    zTestCase.test_localsc          	   C   s$   |  t dt  W d Q R X d S )Nzv:)assertRaises	NameErrorr7   )r   r	   r	   r
   test_missing_variable  s    zTestCase.test_missing_variablec             C   sf   G dd d}|  | dd |  |  d |  |  d |  d d |  d d d S )Nc               @   s   e Zd Zdd ZdS )z,TestCase.test_missing_format_spec.<locals>.Oc             S   s   |sdS |S )N*r	   )r   r   r	   r	   r
   r     s    z7TestCase.test_missing_format_spec.<locals>.O.__format__N)r   r   r   r   r	   r	   r	   r
   O  s   r   r   r   r/   3)r   )r   r   r	   r	   r
   test_missing_format_spec  s    z!TestCase.test_missing_format_specc             C   s|   |  dt d |  dtd d}|  dt d| d |  dtd |  dt d|d | dt  d S )	Nzg:zg:global variablezg:'global variable'zlocal variablez l:z"g:global variable l:local variablez$g:global variable l:'local variable'zmodule 'unittest' from)r   a_globalassertInunittest)r   a_localr	   r	   r
   test_global  s    zTestCase.test_globalc             C   sr   d}|  d| d |  d|d d}|  d| d| d |  d|d |  d| d|d d S )	Nzreally a localzg:zg:really a localzg:'really a local'zlocal variablez l:z!g:really a local l:local variablez#g:really a local l:'local variable')r   )r   r   r   r	   r	   r
   test_shadowed_global  s    zTestCase.test_shadowed_globalc             C   s   dd }|  |d d d S )Nc             S   s   dt |  S )Nzx=)r   )r   r	   r	   r
   r   "  s    zTestCase.test_call.<locals>.foore   zx=10)r   )r   r   r	   r	   r
   	test_call!  s    zTestCase.test_callc             C   s0   d}|  d d  d |  | d  d d S )NrN   r   r/   Z000Z555)r   )r   r   r	   r	   r
   test_nested_fstrings'  s    zTestCase.test_nested_fstringsc             C   s>   |  tddddddddd	d
dddddddddddddg d S )Nzunexpected EOF while parsingzfu''zuf''zFu''zfU''zUf''zuF''zufr''zurf''zfur''zfru''zrfu''zruf''zFUR''zFur''zfb''zfB''zFb''zFB''zbf''zbF''zBf''zBF'')r   r\   )r   r	   r	   r
   test_invalid_string_prefixes,  s.    z%TestCase.test_invalid_string_prefixesc             C   st   |  d d |  d d |  d d |  d d |  ddd dD  d |  ddd dD  d d S )	Nr/   r   zexpr=c             S   s   i | ]\}}||qS r	   r	   ).0r   r   r	   r	   r
   
<dictcomp>L  s    z9TestCase.test_leading_trailing_spaces.<locals>.<dictcomp>))r.   r-   zexpr={1: 2}c             S   s   i | ]\}}||qS r	   r	   )r   r   r   r	   r	   r
   r   N  s    )r   )r   r	   r	   r
   test_leading_trailing_spacesF  s    z%TestCase.test_leading_trailing_spacesc             C   sP   |  ddk d |  ddk d |  ddkd |  ddkdd d S )Nr/   r!   Truez.3ZTru)r   )r   r	   r	   r
   test_not_equalQ  s    zTestCase.test_not_equalc             C   s   |  ddd |  ddd |  ddd |  ddd |  d d |  dd |  dd |  d d |  ddd	 | td
dddddddg | tdddddg d S )NgQ	@z10.10z
      3.14z
3.14      r^   z'a'za!rz!<10.10z
3.14!!!!!!z&f-string: invalid conversion characterzf'{3!g}'zf'{3!A}'zf'{3!3}'zf'{3!G}'zf'{3!!}'zf'{3!:}'z	f'{3! s}'zf-string: expecting '}'zf'{x!s{y}}'z	f'{3!ss}'z
f'{3!ss:}'zf'{3!ss:s}')r   r   r\   )r   r	   r	   r
   test_conversions[  s,    zTestCase.test_conversionsc             C   s   |  tddddg d S )Nzinvalid syntaxzf'' = 3z
f'{0}' = xz
f'{x}' = x)r   r\   )r   r	   r	   r
   test_assignment|  s    zTestCase.test_assignmentc             C   s   |  tdddg d S )Nzinvalid syntaxzdel f''z
del '' f'')r   r\   )r   r	   r	   r
   test_del  s    zTestCase.test_delc             C   s   |  tddddddddd	g |  td
ddddddddddddddg | d d | d d | dd dd | dd dd d S ) Nz#f-string: single '}' is not allowedzf'{{}'zf'{{}}}'zf'}'zf'x}'zf'x}x'z
f'\u007b}'zf'{3:}>10}'zf'{3:}}>10}'zf-string: expecting '}'zf'{3:{{>10}'zf'{3'zf'{3!'zf'{3:'zf'{3!s'zf'{3!s:'z	f'{3!s:3'zf'x{'zf'x{x'zf'{x'zf'{3:s'zf'{{{'zf'{{}}{'zf'{'rc   rd   r/   z>10z
}}}}}}}}}3r-   z
{{{{{{{{{2)r   r\   r   )r   r	   r	   r
   test_mismatched_braces  s8    zTestCase.test_mismatched_bracesc                sd    fdd} fdd} fdd}|dd |d	d
 |dd |d	d
 |dd
 |d	d
 d S )Nc                s$   d}|  rd}nd}  || d S )Nr   r.   r-   )r   )r   expectedflag)r   r	   r
   test_fstring  s
    z2TestCase.test_if_conditional.<locals>.test_fstringc                s$   d}|  rd}nd}  || d S )Nr   r.   r-   )r   )r   r   r   )r   r	   r
   test_concat_empty  s
    z7TestCase.test_if_conditional.<locals>.test_concat_emptyc                s(   d}d|  rd}nd}  || d S )Nr   r_   r.   r-   )r   )r   r   r   )r   r	   r
   test_concat_non_empty  s
    
z;TestCase.test_if_conditional.<locals>.test_concat_non_emptyr   r-   r_   r.   r	   )r   r   r   r   r	   )r   r
   test_if_conditional  s    




zTestCase.test_if_conditionalc             C   sF   d}|  | d |  | d |  | d |  | d d S )Ntestz'test')r   )r   r   r	   r	   r
   test_empty_format_specifier  s
    z$TestCase.test_empty_format_specifierc             C   sp   ddd}d}|  |d  d |  |d  d |  ||  d |  dj|dd |  dj|dd d S )	Nr   integer)r^   r   r   r^   z{d[a]})rq   z{d[0]})r   r   )r   rq   r^   r	   r	   r
   test_str_format_differences  s    z$TestCase.test_str_format_differencesc             C   s   |  tdddg d S )Nzinvalid syntaxz	f'{a[4)}'z	f'{a(4]}')r   r\   )r   r	   r	   r
   test_invalid_expressions  s    z!TestCase.test_invalid_expressionsc             C   s(   |  tdddg |  tdddg d S )NZunsupportedzf'{(lambda: 0):x}'zf'{(0,):x}'zUnknown format codezf'{1000:j}')r   rf   rX   )r   r	   r	   r
   test_errors  s    zTestCase.test_errorsc             C   s0   x*t dD ]}| d| dt|  q
W d S )Ni  zi:)r|   r   r   )r   r~   r	   r	   r
   	test_loop  s    zTestCase.test_loopc             C   sX   dddd}|  |d  d |  |d  d |  |d  d |  |d  d d S )NZdquoteZsquoter   )"rs   r   rs   r   r   )r   )r   rq   r	   r	   r
   	test_dict  s    zTestCase.test_dictc             C   s$   |  tdd |  tdd d S )Nzf"\
"r   zf"\")r   r   )r   r	   r	   r
   test_backslash_char  s    zTestCase.test_backslash_charN)<r   r   r   r   r   r,   rD   rJ   rM   rO   rR   rW   rZ   r[   r]   r`   ra   rb   rg   rn   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r      sr   2+E6		#%(7
				
!%&r   __main__)r$   r   r   r   r   r   r   mainr	   r	   r	   r
   <module>   s   	        