3
s«Y]î   ã               @   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jƒ  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& | j||ƒ t|ƒ W d Q R X W d Q R X qW d S )N)Ústr)ZsubTestÚassertRaisesRegexÚeval)ÚselfZexception_typeZregexZerror_stringsr   © r   ú"lib/python3.6/test/test_fstring.pyÚassertAllRaise   s    
zTestCase.assertAllRaisec             C   s¸   G dd„ dƒ}|ƒ }|ƒ }t jdd„ |ƒ|_| j|› t|ƒƒ | j|› dƒ | jt|ƒt|ƒƒ | j|jdƒdƒ | j|jdƒdƒ | jt|ƒj|dƒdƒ | jt|ƒj|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>!   s    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 j|ƒ}t|ddƒ}| j|jƒ t|ƒ | j|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ÚcompileZassertFalser   r    Z
assertTrue)r   r   r   ÚexprÚtÚcr   r   r   Útest_ast1   s    
zTestCase.test_astc             C   sÒ  d}t j|ƒ}| jt|ƒt jƒ | jt|jƒdƒ | jt|jd ƒt jƒ | j|jd jdƒ | jt|jd ƒt j	ƒ | jt|jd j
ƒt jƒ | jt|jd j
jƒdƒ | jt|jd j
jd ƒt jƒ | j|jd jdƒ | j|jd j
jdƒ | j|jd j
jd jdƒ |jd j
jd j
}| jt|ƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | j|jdƒ | j|jjdƒ | j|jjdƒ | j|jdƒ | j|jjdƒ | j|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 j|ƒ}| jt|ƒt jƒ | jt|jƒdƒ | jt|jd ƒt jƒ | jt|jd jƒt j	ƒ | j|jd j
dƒ | jt|jd ƒt jƒ | jt|jd jƒt j	ƒ | jt|jd jjƒdƒ | jt|jd jjd ƒt jƒ | jt|jd jjd ƒt jƒ | jt|jd jjd ƒt jƒ | jt|jd jjd ƒt jƒ | j|jd j
dƒ | j|jd jj
dƒ | j|jd jjd j
dƒ | j|jd jjd j
dƒ | j|jd jjd j
dƒ | j|jd jjd j
dƒ |jd jjd j}| jt|ƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | j|j
dƒ | j|jj
dƒ | j|jj
dƒ | j|jdƒ | j|jjdƒ | j|jjdƒ |jd jjd j}| jt|ƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | j|j
dƒ | j|jj
dƒ | j|jj
dƒ | j|jd	ƒ | j|jjd	ƒ | j|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   r,   r-   r.   r1   r2   r3   r0   r4   ÚStrr5   r6   r7   r8   r9   r:   r;   r<   r=   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 j|ƒ}| jt|ƒt jƒ | jt|jƒdƒ | jt|jd ƒt jƒ | j|jd jdƒ | jt|jd ƒt j	ƒ | jt|jd j
ƒt jƒ | jt|jd j
jƒdƒ | jt|jd j
jd ƒt jƒ | j|jd jdƒ | j|jd j
jdƒ | j|jd j
jd jdƒ |jd j
jd j
}| jt|ƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | j|jdƒ | j|jjdƒ | j|jjdƒ | j|jdƒ | j|jjdƒ | j|jjdƒ | jt|jjƒdƒ | jt|jjd ƒt jƒ | jt|jjd ƒt jƒ | jt|jjd ƒt jƒ | j|jjd jdƒ | j|jjd jdƒ | j|jjd jdƒ |jjd j
}| jt|ƒt jƒ | j|jdƒ | j|jdƒ d S )Nz
a = 10
f'{a * f"-{x()}-"}'r(   r   r)   r*   r+   é   )r!   r"   r   r   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r=   rD   r<   )r   r$   r%   r>   Zcallr   r   r   Útest_ast_line_numbers_nestedš   sF    
 z%TestCase.test_ast_line_numbers_nestedc             C   s>  d}t j|ƒ}| jt|ƒt jƒ | jt|jƒdƒ | jt|jd ƒt jƒ | j|jd jdƒ | jt|jd ƒt j	ƒ | jt|jd j
ƒt jƒ | jt|jd j
jƒdƒ | jt|jd j
jd ƒt jƒ | jt|jd j
jd ƒt jƒ | jt|jd j
jd ƒt jƒ | jt|jd j
jd ƒt jƒ | jt|jd j
jd ƒt jƒ | j|jd jdƒ | j|jd j
jdƒ | j|jd j
jd jdƒ | j|jd j
jd jdƒ | j|jd j
jd jdƒ | j|jd j
jd jdƒ | j|jd j
jd jdƒ |jd j
jd j
}| jt|ƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | j|jdƒ | j|jjdƒ | j|jjdƒ | j|jdƒ | j|jjdƒ | j|jjdƒ |jd j
jd j
}| jt|ƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | j|jdƒ | j|jjdƒ | j|jjdƒ | j|jdƒ | j|jjdƒ | j|jjdƒ |jd j
jd j
}| jt|ƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | j|jdƒ | j|jjdƒ | j|jjdƒ | j|jdƒ | j|jjdƒ | j|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   r+   N)r!   r"   r   r   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   rD   r6   r7   r8   r9   r:   r;   r<   r=   )r   r$   r%   r>   r   r   r   Ú*test_ast_line_numbers_duplicate_expressionÅ   sl    	
     z3TestCase.test_ast_line_numbers_duplicate_expressionc             C   sÈ  d}t j|ƒ}| jt|ƒt jƒ | jt|jƒdƒ | jt|jd ƒt jƒ | j|jd jdƒ | jt|jd ƒt j	ƒ | jt|jd j
ƒt jƒ | jt|jd j
jƒdƒ | jt|jd j
jd ƒt jƒ | jt|jd j
jd ƒt jƒ | jt|jd j
jd ƒt jƒ | j|jd jdƒ | j|jd j
jdƒ | j|jd j
jd jdƒ | j|jd j
jd jdƒ | j|jd j
jd jdƒ | j|jd jd
ƒ | j|jd j
jdƒ | j|jd j
jd jdƒ | j|jd j
jd jdƒ | j|jd j
jd jdƒ |jd j
jd j
}| jt|ƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | jt|jƒt jƒ | j|jdƒ | j|jjdƒ | j|jjdƒ | j|jdƒ | j|jjdƒ | j|jjd	ƒ d S )Nz?
a = 10
f'''
  {a
     *
       x()}
non-important content
'''
r(   r   r)   r*   r@   r   é   r+   éÿÿÿÿrK   rK   rK   rK   )r!   r"   r   r   r,   r-   r.   r/   r0   r1   r2   r3   r4   rD   r5   r=   r6   r7   r8   r9   r:   r;   r<   )r   r$   r%   r>   r   r   r   Ú'test_ast_line_numbers_multiline_fstring
  sB    
   z0TestCase.test_ast_line_numbers_multiline_fstringc             C   s,   dd„ }| j |jƒ dd„ }| j |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)ZassertIsNoneÚ__doc__)r   rM   rN   r   r   r   Útest_docstring@  s    zTestCase.test_docstringc          	   C   s&   | j tdƒ tjdƒ W d Q R X d S )Nzmalformed node or stringzf'x')r   Ú
ValueErrorr!   Zliteral_eval)r   r   r   r   Útest_literal_evalI  s    zTestCase.test_literal_evalc             C   s<   dg}d}t j|ƒ}t|ddƒ}t|ƒ | j|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   | j 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(   | j  dƒ | j ddƒ | j ddƒ d S )Nr   Úaú )r   )r   r   r   r   Útest_literal]  s    zTestCase.test_literalc             C   s   | j 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	   rT   )r   r   r   r   Útest_unterminated_stringb  s
    z!TestCase.test_unterminated_stringc             C   s   | j tddgƒ d S )Nzf-string: mismatchedzf'{((}')r	   rT   )r   r   r   r   Útest_mismatched_parensj  s    zTestCase.test_mismatched_parensc             C   sr  | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j d	d	ƒ | j d
d
ƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j dd› dƒ | j dd› dƒ | j dd› dƒ | j dd› dƒ | j d› ddƒ | j d› ddƒ | j d› ddƒ | j d› ddƒ | j d› dƒ | j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}| j d|› ddƒ | j d|› ddƒ | j d|› d|d›dƒ | j d	|› d
ƒ | j d|› dƒ | j d	|› d
ƒ | j d|› dƒ | j d|› dƒ | j d|› dƒ | j |› ddƒ | j |› dƒ | j |› dƒ | j |› dƒ | j |› ddƒ | j d|› ddƒ | j d|› dƒ | j |› d|› dƒ | j  dƒ | j  dƒ | j  dƒ | j  dƒ | j  dƒ | j  dƒ | j  dƒ | j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	   rT   )r   r   r   r   r   Útest_compile_time_concat’  s6    z!TestCase.test_compile_time_concatc             C   sB   ddi}| j d› dƒ | j |d › dƒ | j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	   rT   )r   Údr   r   r   Útest_comments±  s    zTestCase.test_commentsc             C   s¤   ddd„}d}d}x.t ddƒD ] }| jt||ƒƒ|d | ƒ qW | jt|d	ƒd
 ƒ|d d ƒ |ddƒ}| jt|ƒ|d d ƒ dd }| jt|ƒdd ƒ d S )Nr   c             S   s   dd|   | d S )Nzf'z{x} ú'r   )ÚnZextrar   r   r   Ú
build_fstrÄ  s    z2TestCase.test_many_expressions.<locals>.build_fstrr   r)   éú   i  rW   éÿ   é   éý   z{x:{width}} éþ   zf'{1}' 'x' 'y'i   Z1xy)r   i ÿ  )Úranger   r   )r   rm   r   ÚwidthÚiÚsr   r   r   Útest_many_expressions¿  s    
  
zTestCase.test_many_expressionsc             C   sš  d}d}t jdƒ}| jd||› d|› ›dƒ | jd||›d|› ›dƒ | jd||d›d|d››dƒ | jd|d	› d
d›d|d››dƒ | jd|d	› d
d›d|d››dƒ | jddd	› d›dƒ | jdd› dd
› d› ›dƒ | jddd› dd
› d›dƒ | jdd› dd	› dd› ›dƒ | jdddddikoH|› d›dƒ | jtddgƒ | jtddgƒ | jtddgƒ | jtddgƒ d S )Nr]   r   z12.34567zresult: Ú.zresult:      12.35Ú0rd   r)   r   rg   Z0xz
       0xar   re   z
      -0xar*   rH   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"}}'iöÿÿÿiöÿÿÿ)ÚdecimalZDecimalr   r	   rT   )r   rt   Z	precisionr2   r   r   r   Ú!test_format_specifier_expressionsØ  s*    
"&& &z*TestCase.test_format_specifier_expressionsc             C   s.   G dd„ dƒ}|ƒ }| j |› 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   )ru   )r   r   r   r   r   ÿ  s    z3TestCase.test_side_effect_order.<locals>.X.__init__c             S   s   |  j d7  _ t| j ƒS )Nr)   )ru   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   rW   z1 2)r   )r   r   r   r   r   r   Útest_side_effect_orderý  s    zTestCase.test_side_effect_orderc             C   sJ   | j tddddddddd	d
ddddddddddgƒ | j 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	   rT   )r   r   r   r   Útest_missing_expression  s.    z TestCase.test_missing_expressionc             C   sD   | j d	› dƒ | jtdddgƒ | jtddgƒ | jtddgƒ d S )
Nr*   z(3,)zinvalid syntaxzf'{,}'zf-string: expecting '}'z
f'{3)+(4}'z!EOL while scanning string literalzf'{
}')r*   )r   r	   rT   )r   r   r   r   Útest_parens_in_expressions0  s    z#TestCase.test_parens_in_expressionsc             C   s˜  | j ddƒ | j ddƒ | j ddƒ | j d› ddƒ | j d› dd› dƒ | j dd› dƒ | j ddƒ | j d	d	ƒ | j d	d	ƒ | j d› dd
ƒ | j d› dd› dƒ | j dd› dƒ | j ddƒ | j ddƒ | j ddƒ | j d› dd
ƒ | j d› dd› dƒ | j dd› dƒ | j ddƒ | j d› dd
ƒ | j d› dd› dƒ | j dd› dƒ | j d
d
ƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j ddƒ | j d› ddƒ | j d› dd› dƒ | j dd› dƒ | j ddƒ | j ddƒ | j ddƒ | jtƒ tdƒ}W d Q R X | j |dƒ | j dd› dƒ | j dd› dƒ d}| j ddƒ | j d|› dƒ | j d|› dƒ | j ddƒ d S )Nú	z\tr(   z2	r*   z2	3z	3u   Î”z\u0394u   2Î”u   2Î”3u   Î”3z
\U00000394rW   z\x20z2 z2 3z 3z	f'\{6*7}'z\42ú\rJ   r+   Zspamú&z\Nz\Nspamz\&é*   rƒ   )r   ZassertWarnsÚDeprecationWarningr   )r   r2   Z	AMPERSANDr   r   r   Útest_backslashes_in_string_partD  sX    z(TestCase.test_backslashes_in_string_partc          	   C   s   | j 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	   rT   )r   r   r   r   Ú%test_misformed_unicode_character_name{  s    z.TestCase.test_misformed_unicode_character_namec             C   s"   | j 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	   rT   )r   r   r   r   Ú&test_no_backslashes_in_expression_partŠ  s    z/TestCase.test_no_backslashes_in_expression_partc             C   s4   | j ddƒ | j ddƒ | j ddƒ | j 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    | j d› dƒ | j d› dƒ d S )Nr   ry   r*   r   Ú7r+   )r   )r   r   r   r   Útest_newlines_in_expressions   s    z%TestCase.test_newlines_in_expressionsc                sj   d‰ | j ‡ fdd„dƒ›dƒ | j ‡ fdd„dƒd›dƒ | j ‡ fd	d„dƒd›d
ƒ | jtddgƒ d S )NrH   c                s   ˆ |  S )Nr   )r   )r   r   r   r   §  s    z&TestCase.test_lambda.<locals>.<lambda>Ú8z'88888'c                s   ˆ |  S )Nr   )r   )r   r   r   r   ¨  s    Z10z
'88888'   c                s   ˆ |  S )Nr   )r   )r   r   r   r   ©  s    z
88888     zunexpected EOF while parsingzf'{lambda x:x}')r   r	   rT   )r   r   )r   r   Útest_lambda¥  s    zTestCase.test_lambdac             C   s$   dd„ }|dƒ}| j 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   r@   )r   Únext)r   r   rN   r   r   r   Ú
test_yield±  s    zTestCase.test_yieldc             C   s>   dd„ }|dƒ}t |ƒ}| j|dƒdƒ | j|jdƒdƒ d S )Nc             3   s   d‡ fdd„V › V  d S )Nzx:c                s   ˆ |  S )Nr   )ru   )r   r   r   r   ¼  s    z6TestCase.test_yield_send.<locals>.fn.<locals>.<lambda>r   )r   r   )r   r   r   »  s    z$TestCase.test_yield_send.<locals>.fnr]   r   é(   Ústringzx:string)rŽ   r   Úsend)r   r   rN   Z
the_lambdar   r   r   Útest_yield_sendº  s
    zTestCase.test_yield_sendc             C   st   | j d› dƒ | j d› dƒ | j d› dƒ | j d› dƒ | j d› dƒ | j d› dƒ | j d› dƒ | j 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}| j |› |› dƒ | j d|› |› dƒ | j |› d|› dƒ | j |› |› ddƒ | j d|› d|› d	ƒ | j d|› |› dd
ƒ | j |› d|› ddƒ | j d|› d|› ddƒ d S )Néb   ra   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„ }| j |dƒƒ dƒ | j |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:987r+   zx:7)r   )r   rš   r   r   r   Útest_closureÞ  s    zTestCase.test_closurec                s<   d‰ ‡ fdd„}| j |ddƒdƒ d}| j |ddƒdƒ d S )	Nr(   c                s   d| ˆ  |› ›S )Nzx=r   )r   rt   )r   r   r   rM   é  s    z"TestCase.test_arguments.<locals>.fÚfoor]   zx=foofoo    Úbarzx=        20)r   )r   rM   r   r   )r   r   Útest_argumentsç  s
    zTestCase.test_argumentsc             C   s   d}| j d|› dƒ d S )Né{   zv:zv:123)r   )r   r2   r   r   r   Útest_localsð  s    zTestCase.test_localsc          	   C   s$   | j tƒ dt›  W d Q R X d S )Nzv:)ZassertRaisesÚ	NameErrorr2   )r   r   r   r   Útest_missing_variableô  s    zTestCase.test_missing_variablec             C   sf   G dd„ dƒ}| j |ƒ d›dƒ | j |ƒ › dƒ | j |ƒ  ›dƒ | j d ›dƒ | j 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|   | j dt› dƒ | j dt›dƒ d}| j dt› d|› dƒ | j dt›dƒ | j dt› d|›dƒ | j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_globalZassertInÚunittest)r   Úa_localr   r   r   Útest_global  s    zTestCase.test_globalc             C   sr   d}| j d|› dƒ | j d|›dƒ d}| j d|› d|› dƒ | j d|›dƒ | j 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„ }| j |dƒ› dƒ d S )Nc             S   s   dt | ƒ S )Nzx=)r   )r   r   r   r   rœ   "  s    zTestCase.test_call.<locals>.foor]   zx=10)r   )r   rœ   r   r   r   Ú	test_call!  s    zTestCase.test_callc             C   s0   d}| j d› d › dƒ | j |› d › dƒ d S )NrH   r   r*   Z000Z555)r   )r   r   r   r   r   Útest_nested_fstrings'  s    zTestCase.test_nested_fstringsc             C   s>   | j 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	   rT   )r   r   r   r   Útest_invalid_string_prefixes,  s.    z%TestCase.test_invalid_string_prefixesc             C   st   | j d› dƒ | j d› dƒ | j d› dƒ | j d› dƒ | j ddd„ dD ƒ› dƒ | j 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(   )r²   )r   )r   r   r   r   Útest_leading_trailing_spacesF  s    z%TestCase.test_leading_trailing_spacesc             C   sP   | j ddk› dƒ | j ddk ›dƒ | j ddk›dƒ | j 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¾   | j dd›dƒ | j dd›dƒ | j dd›dƒ | j dd›dƒ | j d› dƒ | j d›dƒ | j d›dƒ | j d› dƒ | j dd›d	ƒ | jtd
dddddddgƒ | jtdddddgƒ d S )Ng…ëQ¸	@z10.10z
      3.14z
3.14      rV   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	   rT   )r   r   r   r   Útest_conversions[  s,    zTestCase.test_conversionsc             C   s   | j tddddgƒ d S )Nzinvalid syntaxzf'' = 3z
f'{0}' = xz
f'{x}' = x)r	   rT   )r   r   r   r   Útest_assignment|  s    zTestCase.test_assignmentc             C   s   | j tdddgƒ d S )Nzinvalid syntaxzdel f''z
del '' f'')r	   rT   )r   r   r   r   Útest_delƒ  s    zTestCase.test_delc             C   s”   | j tddddddddd	gƒ | j td
ddddddddddddddgƒ | jd› dƒ | jd› dƒ | jdd› d›dƒ | j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'{'r[   r\   r*   z>10z
}}}}}}}}}3r(   z
{{{{{{{{{2)r	   rT   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}ˆ j ||ƒ 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}ˆ j ||ƒ 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}ˆ j ||ƒ d S )Nr   rW   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(   rW   r)   r   )r   r¼   r½   r¾   r   )r   r   Útest_if_conditional®  s    




zTestCase.test_if_conditionalc             C   sF   d}| j |› dƒ | j | ›dƒ | j | ›dƒ | j | ›dƒ d S )NZ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}| j |d › dƒ | j |d › dƒ | j || › dƒ | j dj|ddƒ | j dj|ddƒ d S )	Nr‘   Zinteger)rV   r   r   rV   z{d[a]})ri   z{d[0]})r   r   )r   ri   rV   r   r   r   Útest_str_format_differencesÛ  s    z$TestCase.test_str_format_differencesc             C   s   | j tdddgƒ d S )Nzinvalid syntaxz	f'{a[4)}'z	f'{a(4]}')r	   rT   )r   r   r   r   Útest_invalid_expressionsæ  s    z!TestCase.test_invalid_expressionsc             C   s(   | j tdddgƒ | j 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	   r^   rQ   )r   r   r   r   Útest_errorsì  s    zTestCase.test_errorsc             C   s0   x*t dƒD ]}| jd|› dt|ƒ ƒ q
W d S )Niè  zi:)rs   r   r   )r   ru   r   r   r   Ú	test_loop÷  s    zTestCase.test_loopc             C   sX   ddddœ}| j |d › dƒ | j |d › dƒ | j |d › dƒ | j |d › dƒ d S )NZdquoteZsquoter   )ú"rk   rœ   rk   rÅ   rœ   )r   )r   ri   r   r   r   Ú	test_dictû  s    zTestCase.test_dictc             C   s$   | j tdƒdƒ | j 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'   r?   rE   rG   rI   rL   rP   rR   rS   rU   rX   rY   rZ   r_   rf   rj   rw   r{   r|   r~   r   r…   r†   r‡   rˆ   rŠ   rŒ   r   r“   r”   r˜   r›   rž   r    r¢   r¦   rª   r«   r¬   r­   r®   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   rz   r¨   r§   r   r   Úmainr   r   r   r   Ú<module>   s   	        