a
    ze                     @   sv   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 dZG dd dejZedkrre  dS )    N)temp_cwduse_old_parser)assert_python_failurezglobal variablec                   @   sN  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	
e ddd Ze	
e d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d0d1 Zd2d3 Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"d<d= Z#d>d? Z$d@dA Z%dBdC Z&dDdE Z'dFdG Z(dHdI Z)dJdK Z*dLdM Z+dNdO Z,dPdQ Z-dRdS Z.dTdU Z/dVdW Z0dXdY Z1dZd[ Z2d\d] Z3d^d_ Z4d`da Z5dbdc Z6ddde Z7dfdg Z8dhdi Z9djdk Z:dldm Z;dndo Z<dpdq Z=e	
e drdsdt Z>dudv Z?dwdx Z@dydz ZAd{d| ZBd}d~ ZCdd ZDdd ZEdd ZFdd ZGdd ZHdS )TestCasec              
   C   sn   |D ]d}| j |dD | || t| W d    n1 s@0    Y  W d    q1 s^0    Y  qd S )Nstr)ZsubTestassertRaisesRegexeval)selfZexception_typeZregexZerror_stringsr    r   '/usr/lib/python3.9/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   <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__A   s    z%TestCase.test_ast.<locals>.X.__init__c                 S   s
   d| _ dS )NT   r#   r%   r   r   r   __call__C   s    z%TestCase.test_ast.<locals>.X.__call__N)r   r   r   r&   r(   r   r   r   r   r   @   s   r   
a = 10
f'{a * x()}'r   exec)astparsecompileZassertFalser$   r*   Z
assertTrue)r
   r   r    exprtcr   r   r   test_ast>   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 )Nr)      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_numbersV   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 jt | t|jd jjd t j | t|jd jjd t j | t|jd jjd jt | 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()}'r2   r   r3   r'   r4               )r+   r,   r   r   r6   r7   r8   r;   r<   r=   r:   r>   Constantr   r?   r@   rA   rB   rC   rD   rE   rF   rG   ZAdd)r
   r.   r/   Zbinop1Zbinop2r   r   r   .test_ast_line_numbers_multiple_formattedvaluesu   sX    
      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 j
t | t|jjd t j | t|jjd t j | t|jjd j
t | |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()}-"}'r2   r   r3   r4   r5      )r+   r,   r   r   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rG   rO   r   rF   )r
   r.   r/   rI   callr   r   r   test_ast_line_numbers_nested   sJ    
 z%TestCase.test_ast_line_numbers_nestedz8The old parser gets the offsets incorrectly for fstringsc                 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 j
t | t|jd j
jd t j | t|jd j
jd t j | t|jd j
jd j
t | 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 )Nz)
a = 10
f'{a * x()} {a * x()} {a * x()}'
r2   r   r3      r4   r'   r5         rM   rN   )r+   r,   r   r   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rO   r   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   r   r   *test_ast_line_numbers_duplicate_expression   sp    
       z3TestCase.test_ast_line_numbers_duplicate_expressionc                 C   sD  t d}| t|jd | |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j
\}}}|j}| t|t j | |jd | |jd | |jd | |jd d S )Nz%f"Here is that pesky {xxx:.3f} again"r3   r   r4   r2         )r+   r,   r   r7   r8   r:   r   r;   r<   r=   r>   rO   r?   rB   
end_linenorG   end_col_offset)r
   r/   _r.   namer   r   r   (test_ast_numbers_fstring_with_formatting  s     
   z1TestCase.test_ast_numbers_fstring_with_formattingc                 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 j
t | t|jd j
jd t j | t|jd j
jd t j | t|jd j
jd j
t | |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
'''
r2   r   r3   r4   r'      r5   )r+   r,   r   r   r6   r7   r8   r9   r:   r;   r<   r=   r>   rO   r   r?   rG   r@   rA   rB   rC   rD   rE   rF   rH   r   r   r   'test_ast_line_numbers_multiline_fstring1  sF    	
     z0TestCase.test_ast_line_numbers_multiline_fstringc                 C   s  d}t |}| t|t j | t|jd |jd jjd j}| t|t j	 | |j
d | |jd | |jd | |jd d}t |}| t|t j | t|jd |jd jjd }| t|t j | t|jd |j\}}}| t|t j | |j
d | |jd	 | |jd
 | |jd |j}| t|t j	 | |j
t rzdnd | |jt rdnd | |jt rdnd | |jt rdnd | t|t j | |j
d | |jd	 | |jd
 | |jd d S )Nz
x = (
    f" {test(t)}"
)r3   r   r4   rK      zv
x = (
        'PERL_MM_OPT', (
            f'wat'
            f'some_string={f(x)} '
            f'wat'
        ),
)
r'   r_   rL      rT   rU   rN   rV      )r+   r,   r   r   r6   r7   r8   r<   r>   rF   r:   rZ   rG   r[   eltsr=   rO   r   )r
   r.   r/   rR   ZfstringZwat1ZmiddleZwat2r   r   r   &test_ast_line_numbers_with_parenthesesc  sD    
	
z/TestCase.test_ast_line_numbers_with_parenthesesc                 C   s,   dd }|  |j dd }|  |j d S )Nc                   S   s   d d S NzNot a docstringr   r   r   r   r   f  s    z"TestCase.test_docstring.<locals>.fc                   S   s   d d S rf   r   r   r   r   r   g  s    z"TestCase.test_docstring.<locals>.g)ZassertIsNone__doc__)r
   rg   rh   r   r   r   test_docstring  s    zTestCase.test_docstringc                 C   s:   |  td td W d    n1 s,0    Y  d S )Nzmalformed node or stringzf'x')r   
ValueErrorr+   Zliteral_evalr%   r   r   r   test_literal_eval  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/   r0   r   r   r   test_ast_compile_time_concat  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   SyntaxErrorr%   r   r   r   test_compile_time_concat_errors  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g d d S )Nzf-string: unterminated string)zf'{"x'zf'{"x}'zf'{("x'zf'{("x}'rn   r%   r   r   r   test_unterminated_string  s    z!TestCase.test_unterminated_stringc                 C   sb   |  tddg |  tddg |  tddg |  tddg |  tdd	g | ttd
 d S )NzJf-string: closing parenthesis '\}' does not match opening parenthesis '\('zf'{((}'zJf-string: closing parenthesis '\)' does not match opening parenthesis '\['z	f'{a[4)}'zJf-string: closing parenthesis '\]' does not match opening parenthesis '\('z	f'{a(4]}'zJf-string: closing parenthesis '\}' does not match opening parenthesis '\['zf'{a[4}'zf'{a(4}'a  f'{((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((}')r   ro   assertRaisesr	   r%   r   r   r   test_mismatched_parens  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   	TypeErrorr%   r   r   r   test_double_braces  s8    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   f-string: expecting '}'z
f'{3' f'}'r   r   ro   r
   r    r   r   r   test_compile_time_concat  s8    z!TestCase.test_compile_time_concatc                 C   sN   ddi}|  d d |  |d  d | tdg d | tddg d S )N#hashz+f-string expression part cannot include '#')zf'{1#}'z	f'{3(#)}'zf'{#}'f-string: unmatched '\)'zf'{)#}'r   r
   dr   r   r   test_comments  s    zTestCase.test_commentsc                 C   s   ddd}d}d}t ddD ] }| t|||d |  q| 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_fstr0  s    z2TestCase.test_many_expressions.<locals>.build_fstrr   r3      i  rr         i      z{x:{width}}    zf'{1}' 'x' 'y'i   A   1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy)r   )ranger   r	   )r
   r   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 rrdnd}| t|dg | tddg | tddg d S )Nrz   r'   z12.34567zresult: .zresult:      12.350r   r3   r   r   0xz
       0xar    ir   z
      -0xar4   rT   r   zf'{"s"!r{":10"}}'invalid syntaxf-string: invalid syntaxzf'{4:{/5}}'z'f-string: expressions nested too deeplyz,f'result: {value:{width:{0}}.{precision:1}}'&f-string: invalid conversion characterzf'{"s"!{"r"}}')decimalZDecimalr   r   ro   r   )r
   r   Z	precisionr<   err_msgr   r   r   !test_format_specifier_expressionsD  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&   l  s    z3TestCase.test_side_effect_order.<locals>.X.__init__c                 S   s   |  j d7  _ t| j S )Nr3   )r   r   r   r   r   r   r   n  s    z5TestCase.test_side_effect_order.<locals>.X.__format__N)r   r   r   r&   r   r   r   r   r   r   k  s   r   rr   z1 2rs   )r
   r   r    r   r   r   test_side_effect_orderj  s    zTestCase.test_side_effect_orderc                 C   s(   |  tdg d |  tdddg d S )Nz&f-string: empty expression not allowed)z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 non-printable character U\+00A0u   f'''{ }'''    rn   r%   r   r   r   test_missing_expressionu  s    "z TestCase.test_missing_expressionc                 C   sR   |  d d t rdnd}| t|ddg | tddg | tdd	g d S )
N)r4   z(3,)r   r   zf'{,}'r   z
f'{3)+(4}'z!EOL while scanning string literalzf'{
}'r   r   r   ro   r
   r   r   r   r   test_parens_in_expressions  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    n1 s00    Y  |  |d |  dd d |  dd d d}|  dd |  d| d |  d| d |  dd d S )N	z\tr2   z2	r4   z2	3z	3u   Δz\u0394u   2Δu   2Δ3u   Δ3z
\U00000394rr   z\x20z2 z2 3z 3z	f'\{6*7}'z\42\*   Zspam&z\Nz\Nspamz\&)r   ZassertWarnsDeprecationWarningr	   )r
   r<   Z	AMPERSANDr   r   r   test_backslashes_in_string_part  sX    (z(TestCase.test_backslashes_in_string_partc                 C   s   |  tdg d d S )Nzi\(unicode error\) 'unicodeescape' codec can't decode bytes in position .*: malformed \\N character escape)
zf'\N'zf'\N 'zf'\N  'zf'\N{'z f'\N{GREEK CAPITAL LETTER DELTA'z'\N'z'\N 'z'\N  'z'\N{'z'\N{GREEK CAPITAL LETTER DELTA'rn   r%   r   r   r   %test_misformed_unicode_character_name  s    z.TestCase.test_misformed_unicode_character_namec                 C   s   |  tdg d d S )Nz3f-string expression part cannot include a backslash)z
f'{\'a\'}'zf'{\t3}'zf'{\}'zrf'{\'a\'}'z	rf'{\t3}'zrf'{\}'zrf'{"\N{LEFT CURLY BRACKET}"}'zf'{\n}'rn   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+1Nrs   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   r5   7rs   r%   r   r   r   test_newlines_in_expressions  s    z%TestCase.test_newlines_in_expressionsc                    sx   d |   fdddd |   fddddd |   fd	dddd
 t r`dnd}| t|dg d S )NrT   c                    s    |  S Nr   r!   r    r   r   r     r   z&TestCase.test_lambda.<locals>.<lambda>8z'88888'c                    s    |  S r   r   r   r   r   r   r     r   10z
'88888'   c                    s    |  S r   r   r   r   r   r   r     r   z
88888     r   r   zf'{lambda x:x}'r   r   r   r   r   test_lambda  s    zTestCase.test_lambdac                 C   s4   dd }|d}|  t|d |  t|d  d S )Nc                 s   s   d| d V   d V   d S )Nzy:r2   r   r   r   r   r   fn'  s    zTestCase.test_yield.<locals>.fnr'   rK   )r   next)r
   r   rh   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 )Nx:c                    s    |  S r   r   r   r   r   r   r   1  r   z6TestCase.test_yield_send.<locals>.fn.<locals>.<lambda>r   r   r   r   r   r   0  s    z$TestCase.test_yield_send.<locals>.fnrz   r'   (   stringzx:string)r   r   send)r
   r   rh   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"syrs   r%   r   r   r   +test_expressions_with_triple_quoted_strings8  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   r~   Z98abcr   ZX98abcZ98XabcZ98abcXYZX98YabcZX98abcYZ98XabcYZZX98YabcZrs   )r
   r    r!   r   r   r   test_multiple_varsD  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 )Nr   r   r   r   r   r   innerU  s    z3TestCase.test_closure.<locals>.outer.<locals>.innerr   )r    r   r   r   r   outerT  s    z$TestCase.test_closure.<locals>.outerZ987zx:987r5   zx:7rs   )r
   r   r   r   r   test_closureS  s    zTestCase.test_closurec                    s<   d  fdd}|  |ddd d}|  |ddd d S )	Nr2   c                    s   d|   | S Nx=r   )r    r   r   r   r   rg   ^  s    z"TestCase.test_arguments.<locals>.ffoorz   zx=foofoo    barzx=        20rs   )r
   rg   r    r   r   r   test_arguments\  s
    zTestCase.test_argumentsc                 C   s   d}|  d| d d S )N{   v:zv:123rs   )r
   r<   r   r   r   test_localse  s    zTestCase.test_localsc                 C   s8   |  t dt  W d    n1 s*0    Y  d S )Nr   )rv   	NameErrorr<   r%   r   r   r   test_missing_variablei  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   o  s    z7TestCase.test_missing_format_spec.<locals>.O.__format__Nr   r   r   r   r   On  s   r   r    r   r4   3rs   )r
   r   r   r   r   test_missing_format_specm  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 )	Ng:zg:global variablezg:'global variable'local variable 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 localr   zg:really a localzg:'really a local'r   r   z!g:really a local l:local variablez#g:really a local l:'local variable'rs   )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 r   r   r   r   r   r   r     s    zTestCase.test_call.<locals>.foorz   zx=10rs   )r
   r   r   r   r   	test_call  s    zTestCase.test_callc                 C   s0   d}|  d d  d |  | d  d d S )NrT   r   r4   Z000Z555rs   )r
   r!   r   r   r   test_nested_fstrings  s    zTestCase.test_nested_fstringsc                 C   s:   g d}dd |D }t  r dnd}| t|||  d S )N)z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''c                 S   s   g | ]}| d dqS )r   ")replace).0Zcaser   r   r   
<listcomp>  r   z9TestCase.test_invalid_string_prefixes.<locals>.<listcomp>r   zunexpected EOF while parsing)r   r   ro   )r
   Zsingle_quote_casesZdouble_quote_cases	error_msgr   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 )	Nr4   r   zexpr=c                 S   s   i | ]\}}||qS r   r   r   r    r!   r   r   r   
<dictcomp>  r   z9TestCase.test_leading_trailing_spaces.<locals>.<dictcomp>))r3   r2   zexpr={1: 2}c                 S   s   i | ]\}}||qS r   r   r   r   r   r   r     r   rs   r%   r   r   r   test_leading_trailing_spaces  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 )Nr4   r'   Truez.3ZTrurs   r%   r   r   r   test_not_equal  s    zTestCase.test_not_equalc                 C   s   |  ddk d d S )Nr   r3   Falsers   r%   r   r   r   test_equal_equal  s    zTestCase.test_equal_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
g d | tdg d d S )NgQ	@z10.10z
      3.14z
3.14      rq   z'a'za!rz!<10.10z
3.14!!!!!!r   )z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}'r   )zf'{x!s{y}}'z	f'{3!ss}'z
f'{3!ss:}'zf'{3!ss:s}'r   r%   r   r   r   test_conversions  s    
zTestCase.test_conversionsc                 C   s   |  tdg d d S )Nr   )zf'' = 3z
f'{0}' = xz
f'{x}' = xrn   r%   r   r   r   test_assignment  s    zTestCase.test_assignmentc                 C   s   |  tdddg d S )Nr   zdel f''z
del '' f''rn   r%   r   r   r   test_del  s
    zTestCase.test_delc                 C   sp   |  tdg d |  tdg d | d d | d d | dd dd	 | d
d dd d S )Nz#f-string: single '}' is not allowed)zf'{{}'zf'{{}}}'zf'}'zf'x}'zf'x}x'z
f'\u007b}'zf'{3:}>10}'zf'{3:}}>10}'r   )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'{'zf'x{<'zf'x{>'rx   ry   r4   z>10z
}}}}}}}}}3r2   z
{{{{{{{{{2)r   ro   r   r%   r   r   r   test_mismatched_braces
  s    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   r3   r2   rs   r    Zexpectedflagr%   r   r   test_fstring6  s
    z2TestCase.test_if_conditional.<locals>.test_fstringc                    s$   d}|  rd}nd}  || d S r   rs   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   rr   r3   r2   rs   r   r%   r   r   test_concat_non_emptyF  s
    
z;TestCase.test_if_conditional.<locals>.test_concat_non_emptyr   r2   rr   r3   r   )r
   r   r   r   r   r%   r   test_if_conditional1  s    




zTestCase.test_if_conditionalc                 C   sF   d}|  | d |  | d |  | d |  | d d S )Ntestz'test'rs   r   r   r   r   test_empty_format_specifierW  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   Zinteger)rq   r   r   rq   z{d[a]})r   z{d[0]})r   r   )r
   r   rq   r   r   r   test_str_format_differences^  s    z$TestCase.test_str_format_differencesc                 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   r{   rk   r%   r   r   r   test_errorsi  s    zTestCase.test_errorsz6The old parser only supports <fstring> as the filenamec              	   C   s   t  d}tj|d}t|d}|d W d    n1 s@0    Y  t|dd\}}}W d    n1 sp0    Y  | |dd| d S )Nzt.pywzf"{a b}"ascii)ZPYTHONIOENCODINGbackslashreplace)	r   ospathjoinopenwriter   r   encode)r
   cwdZ	file_pathrg   r\   stderrr   r   r   test_filename_in_syntaxerrort  s    (*z%TestCase.test_filename_in_syntaxerrorc                 C   s,   t dD ]}| d| dt|  q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   )r   r   r   r   r   r   rs   r   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_charc                    s  d |  d dt   |  d dt   |  d dt   |  d dt   |  d dt   d |  d ddt d  |  d  dt d  |  d ddtt d  |  d ddtt d  |  d ddt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k d  |  ddk d! |  ddk d! |  ddk d  |  d"   d" |   d" |  d#   d" |   d# |  d$ d$ d% |   d&d'  fd(d)}d |  |d*d+ d, |   d* |  |d-d+ d* |   d- G d.d/ d/}|  d0| d1 |  d0| d1 |  d0|  d2 |  d0| d3d4 |  d0| d5d6 |  d0| dd7 | ttd8 d9 |  d: d;d:t  d;  |  d< d;d<t  d;  |  d= d;d=t  d;  |  d> d;d>t  d;  d S )?NzA stringr   zx =g	@z.2fr   z^20	   z3*x+15=r4   ra   z	3*x+15=42gffffff?@u   tenπ=u   tenπ=31.40u   "Σ"=u   Σu	   "Σ"='Σ'z3.1415=go!	@z.1fz*^20z*****3.1415=3.1*****u   πu   alpha α pi=u	    ω omegau   alpha α pi='π' ω omegaz
3
=z
3
=3r   r3   r   r   5rT   =   =10
        20c                    s    }|  |S r   r   )rq   Zoldxr   r   r   rg     s    z)TestCase.test_debug_conversion.<locals>.fz3=)rq   r   r'   c                   @   s   e Zd Zdd Zdd ZdS )z)TestCase.test_debug_conversion.<locals>.Cc                 S   s
   d| S )NzFORMAT-r   )r
   r   r   r   r   r     s    z4TestCase.test_debug_conversion.<locals>.C.__format__c                 S   s   dS )NZREPRr   r%   r   r   r   __repr__  s    z2TestCase.test_debug_conversion.<locals>.C.__repr__N)r   r   r   r   r  r   r   r   r   C  s   r  zC()=zC()=REPRzC()=FORMAT-rr   zC()=FORMAT- r    zC()=FORMAT-xzC()=********REPR********zf'{C=]'r   zXx=r   zXx  =zXx=  zXx  =  )r   reprr   r  r   rv   ro   r	   )r
   t   tenπpirg   r  r   r   r   test_debug_conversion  sn    """   zTestCase.test_debug_conversionc                 C   s6   d}|  |dd |  d } d |  |d d S )Nr  r  r  rz   r   rs   r   r   r   r   test_walrus  s    zTestCase.test_walrusc                 C   sJ   t  r
dnd}| t| tddd W d    n1 s<0    Y  d S )Nr   r   z
f'{a $ b}'?r*   )r   r   ro   r-   r   r   r   r   !test_invalid_syntax_error_message  s    z*TestCase.test_invalid_syntax_error_messagec                 C   sB   t d}| t| dd W d    n1 s40    Y  d S )NzCannot specify ',' with ','.r3   z,,reescaper   rk   r
   r   r   r   r   (test_with_two_commas_in_format_specifier  s    
z1TestCase.test_with_two_commas_in_format_specifierc                 C   sB   t d}| t| dd W d    n1 s40    Y  d S )NzCannot specify '_' with '_'.r3   __r  r!  r   r   r   ,test_with_two_underscore_in_format_specifier  s    
z5TestCase.test_with_two_underscore_in_format_specifierc                 C   sB   t d}| t| dd W d    n1 s40    Y  d S )N Cannot specify both ',' and '_'.r3   z,_r  r!  r   r   r   8test_with_a_commas_and_an_underscore_in_format_specifier  s    
zATestCase.test_with_a_commas_and_an_underscore_in_format_specifierc                 C   sB   t d}| t| dd W d    n1 s40    Y  d S )Nr%  r3   z_,r  r!  r   r   r   7test_with_an_underscore_and_a_comma_in_format_specifier  s    
z@TestCase.test_with_an_underscore_and_a_comma_in_format_specifierN)Ir   r   r   r   r"   r1   rJ   rP   rS   r   ZskipIfr   rW   r^   r`   re   rj   rl   rm   rp   rt   ru   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  r  r  r  r"  r$  r&  r'  r   r   r   r   r      s   4-
B
25		#&(7
			 
!'&

h
r   __main__)r+   r  r  r   r   r   Ztest.supportr   r   Ztest.support.script_helperr   r   r   r   mainr   r   r   r   <module>
   s*   	          