a
    äze8—  ã                   @   s&  d dl Z d dlZe ¡ & e dde¡ d dlZW d  ƒ n1 sD0    Y  d dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZ d dlmZ G dd„ dejƒZG d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZedkr"e ¡  dS )é    NÚignorezThe parser module is deprecated)Úsupport)Úassert_python_failure)Úassert_python_okc                   @   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$dES )FÚRoundtripLegalSyntaxTestCasec              
   C   sn   ||ƒ}|  ¡ }zt |¡}W n8 tjyV } z|  d||f ¡ W Y d }~n
d }~0 0 |  ||  ¡ d¡ d S )Nzcould not roundtrip %r: %sz!could not re-generate syntax tree)ÚtotupleÚparserÚsequence2stÚParserErrorÚfailÚassertEqual)ÚselfÚfÚsÚst1ÚtÚst2Úwhy© r   ú&/usr/lib/python3.9/test/test_parser.pyÚ	roundtrip   s    (ÿz&RoundtripLegalSyntaxTestCase.roundtripc                 C   s   |   tj|¡ d S ©N)r   r   Úexpr©r   r   r   r   r   Ú
check_expr"   s    z'RoundtripLegalSyntaxTestCase.check_exprc                 C   s6   t  d¡}| ¡ }i }t|i |ƒ |  |d t¡ d S )Nz/from __future__ import unicode_literals; x = ''Úx)r   ÚsuiteÚcompileÚexecZassertIsInstanceÚstr)r   r   ÚcodeZscoper   r   r   Útest_flags_passed%   s
    
z.RoundtripLegalSyntaxTestCase.test_flags_passedc                 C   s   |   tj|¡ d S r   )r   r   r   r   r   r   r   Úcheck_suite.   s    z(RoundtripLegalSyntaxTestCase.check_suitec                 C   s®   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d	¡ |   d
¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nzdef f(): yield 1zdef f(): yieldzdef f(): x += yieldzdef f(): x = yield 1zdef f(): x = y = yield 1zdef f(): x = yieldzdef f(): x = y = yieldzdef f(): 1 + (yield)*2zdef f(): (yield 1)*2zdef f(): return; yield 1zdef f(): yield 1; returnzdef f(): yield from 1zdef f(): x = yield from 1zdef f(): f((yield from 1))zdef f(): yield 1; return 1z1def f():
    for x in range(30):
        yield x
z)def f():
    if (yield):
        yield x
©r"   ©r   r   r   r   Útest_yield_statement1   s"    















z1RoundtripLegalSyntaxTestCase.test_yield_statementc                 C   s@   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nzasync def f():
 await smth()z"async def f():
 foo = await smth()z'async def f():
 foo, bar = await smth()zasync def f():
 (await smth())z#async def f():
 foo((await smth()))z&async def f():
 await foo(); return 42r#   r$   r   r   r   Útest_await_statementH   s    




z1RoundtripLegalSyntaxTestCase.test_await_statementc                 C   s   |   d¡ |   d¡ d S )Nz"async def f():
 async with 1: passz/async def f():
 async with a as b, c as d: passr#   r$   r   r   r   Útest_async_with_statementP   s    
z6RoundtripLegalSyntaxTestCase.test_async_with_statementc                 C   s   |   d¡ |   d¡ d S )Nz'async def f():
 async for i in (): passz*async def f():
 async for i, b in (): passr#   r$   r   r   r   Útest_async_for_statementT   s    
z5RoundtripLegalSyntaxTestCase.test_async_for_statementc                 C   s   |   d¡ |   d¡ d S )Nz3def f():
    x = 0
    def g():
        nonlocal x
z:def f():
    x = y = 0
    def g():
        nonlocal x, y
r#   r$   r   r   r   Útest_nonlocal_statementX   s    
z4RoundtripLegalSyntaxTestCase.test_nonlocal_statementc                 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 S )*Nzfoo(1)z	[1, 2, 3]z[x**3 for x in range(20)]z"[x**3 for x in range(20) if x % 3]z+[x**3 for x in range(20) if x % 2 if x % 3]úlist(x**3 for x in range(20))z&list(x**3 for x in range(20) if x % 3)z/list(x**3 for x in range(20) if x % 2 if x % 3)z
foo(*args)zfoo(*args, **kw)z	foo(**kw)zfoo(key=value)zfoo(key=value, *args)zfoo(key=value, *args, **kw)zfoo(key=value, **kw)zfoo(a, b, c, *args)zfoo(a, b, c, *args, **kw)zfoo(a, b, c, **kw)zfoo(a, *args, keyword=23)z	foo + barz	foo - barz	foo * barz	foo / barz
foo // barz
(foo := 1)z	lambda: 0zlambda x: 0zlambda *y: 0zlambda *y, **z: 0zlambda **z: 0zlambda x, y: 0zlambda foo=bar: 0z"lambda foo=bar, spaz=nifty+spit: 0zlambda foo=bar, **z: 0z#lambda foo=bar, blaz=blat+2, **z: 0z'lambda foo=bar, blaz=blat+2, *y, **z: 0zlambda x, *y, **z: 0z(x for x in range(10))zfoo(x for x in range(10))z...za[...]©r   r$   r   r   r   Útest_expressionsb   sR    







































z-RoundtripLegalSyntaxTestCase.test_expressionsc                 C   s   |   d¡ d S )NÚar#   r$   r   r   r   Útest_simple_expression   s    z3RoundtripLegalSyntaxTestCase.test_simple_expressionc                 C   s   |   d¡ |   d¡ d S )Nza = bza = b = c = d = er#   r$   r   r   r   Útest_simple_assignments‘   s    
z4RoundtripLegalSyntaxTestCase.test_simple_assignmentsc                 C   s’  |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d	¡ |   d
¡ |  t¡ tdi i ƒ W d   ƒ n1 s0    Y  |  t¡ tdi i ƒ W d   ƒ n1 sÆ0    Y  |  t¡ tdi i ƒ W d   ƒ n1 sü0    Y  |  t¡ tdi i ƒ W d   ƒ n1 s40    Y  |  t¡ tdi i ƒ W d   ƒ n1 sl0    Y  |  t¡ tdi i ƒ W d   ƒ n1 s¤0    Y  |  t¡ tdi i ƒ W d   ƒ n1 sÜ0    Y  |  t¡ tdi i ƒ W d   ƒ n1 s0    Y  |  t¡ tdi i ƒ W d   ƒ n1 sL0    Y  |  t¡ tdi i ƒ W d   ƒ n1 s„0    Y  d S )Nz
x: int = 5z"y: List[T] = []; z: [list] = fun()zx: tuple = (1, 2)zd[f()]: int = 42zf(d[x]): str = 'abc'zx.y.z.w: complex = 42jzx: intz#def f():
    x: str
    y: int = 5
z#class C:
    x: str
    y: int = 5
zIclass C:
    def __init__(self, x: int) -> None:
        self.x: int = x
z2+2: intz[]: int = 5zx, *y, z: int = range(5)zx: int = 1, y = 2z
u = v: intz
False: intzx.False: intz	x.y,: intz[0]: intzf(): int)r"   ÚassertRaisesÚSyntaxErrorr   r$   r   r   r   Útest_var_annot•   s<    









***,,,,,,z+RoundtripLegalSyntaxTestCase.test_var_annotc                 C   s|   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d	¡ |   d
¡ |   d¡ |   d¡ d S )Nza += bza -= bza *= bza /= bza //= bza %= bza &= bza |= bza ^= bza <<= bza >>= bza **= br#   r$   r   r   r   Ú!test_simple_augmented_assignments¼   s    










z>RoundtripLegalSyntaxTestCase.test_simple_augmented_assignmentsc                 C   s4  |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d	¡ |   d
¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d ¡ |   d!¡ |   d"¡ |   d#¡ |   d$¡ |   d%¡ |   d&¡ |   d'¡ |   d(¡ |   d)¡ |   d*¡ |   d+¡ |   d,¡ |   d-¡ |   d.¡ |   d/¡ |   d0¡ |   d1¡ |   d2¡ |   d3¡ |   d4¡ |   d5¡ |   d6¡ |   d7¡ |   d8¡ d S )9Nzdef f(): passzdef f(*args): passzdef f(*args, **kw): passzdef f(**kw): passzdef f(foo=bar): passzdef f(foo=bar, *args): passz!def f(foo=bar, *args, **kw): passzdef f(foo=bar, **kw): passzdef f(a, b): passzdef f(a, b, *args): passzdef f(a, b, *args, **kw): passzdef f(a, b, **kw): passzdef f(a, b, foo=bar): passz!def f(a, b, foo=bar, *args): passz'def f(a, b, foo=bar, *args, **kw): passz def f(a, b, foo=bar, **kw): passz@staticmethod
def f(): passz,@staticmethod
@funcattrs(x, y)
def f(): passz@funcattrs()
def f(): passz@False or x
def f(): passz@d := x
def f(): passz@lambda f: x(f)
def f(): passz@[..., x, ...][1]
def f(): passz@x(x)(x)
def f(): passz@(x, x)
def f(): passz@...
def f(): passz@None
def f(): passz@w @(x @y) @(z)
def f(): passz@w[x].y.z
def f(): passzdef f(*, a): passzdef f(*, a = 5): passzdef f(*, a = 5, b): passzdef f(*, a, b = 5): passz def f(*, a, b = 5, **kwds): passzdef f(*args, a): passzdef f(*args, a = 5): passzdef f(*args, a = 5, b): passzdef f(*args, a, b = 5): passz$def f(*args, a, b = 5, **kwds): passzdef f(a, /): passzdef f(a, /,): passzdef f(a, b, /): passzdef f(a, b, /, c): passzdef f(a, b, /, c = 6): passzdef f(a, b, /, c, *, d): passz!def f(a, b, /, c = 1, *, d): passz!def f(a, b, /, c, *, d = 1): passz%def f(a, b=1, /, c=2, *, d = 3): passz'def f(a=0, b=1, /, c=2, *, d = 3): passzdef f(a: int): passzdef f(a: int = 5): passzdef f(*args: list): passzdef f(**kwds: dict): passzdef f(*, a: int): passzdef f(*, a: int = 5): passzdef f() -> int: passr#   r$   r   r   r   Útest_function_defsÊ   sp    






















































z/RoundtripLegalSyntaxTestCase.test_function_defsc                 C   sš   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d	¡ |   d
¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nzclass foo():passzclass foo(object):passz!@class_decorator
class foo():passz&@class_decorator(arg)
class foo():passz(@decorator1
@decorator2
class foo():passz@False or x
class C: passz@d := x
class C: passz@lambda f: x(f)
class C: passz@[..., x, ...][1]
class C: passz@x(x)(x)
class C: passz@(x, x)
class C: passz@...
class C: passz@None
class C: passz@w @(x @y) @(z)
class C: passz@w[x].y.z
class C: passr#   r$   r   r   r   Útest_class_defs  s    













z,RoundtripLegalSyntaxTestCase.test_class_defsc                 C   s®   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d	¡ |   d
¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nzfrom sys.path import *zfrom sys.path import dirnamezfrom sys.path import (dirname)zfrom sys.path import (dirname,)z*from sys.path import dirname as my_dirnamez,from sys.path import (dirname as my_dirname)z-from sys.path import (dirname as my_dirname,)z&from sys.path import dirname, basenamez(from sys.path import (dirname, basename)z)from sys.path import (dirname, basename,)z4from sys.path import dirname as my_dirname, basenamez6from sys.path import (dirname as my_dirname, basename)z7from sys.path import (dirname as my_dirname, basename,)z5from sys.path import dirname, basename as my_basenamez7from sys.path import (dirname, basename as my_basename)z8from sys.path import (dirname, basename as my_basename,)zfrom .bogus import xr#   r$   r   r   r   Útest_import_from_statement;  s:    









ÿÿÿÿÿÿz7RoundtripLegalSyntaxTestCase.test_import_from_statementc                 C   s6   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nz
import syszimport sys as systemzimport sys, mathzimport sys as system, mathzimport sys, math as my_mathr#   r$   r   r   r   Útest_basic_import_statementT  s
    



z8RoundtripLegalSyntaxTestCase.test_basic_import_statementc                 C   sT   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )	Nzfrom . import namezfrom .. import namezfrom ... import namezfrom .... import namezfrom .pkg import namezfrom ..pkg import namezfrom ...pkg import namezfrom ....pkg import namer#   r$   r   r   r   Útest_relative_imports[  s    






z2RoundtripLegalSyntaxTestCase.test_relative_importsc                 C   s   |   d¡ d S )Nz"# -*- coding: iso-8859-1 -*-
pass
r#   r$   r   r   r   Útest_pep263g  s    z(RoundtripLegalSyntaxTestCase.test_pep263c                 C   s   |   d¡ d S )Nzassert alo < ahi and blo < bhi
r#   r$   r   r   r   Útest_assertk  s    z(RoundtripLegalSyntaxTestCase.test_assertc                 C   s"   |   d¡ |   d¡ |   d¡ d S )Nzwith open('x'): pass
zwith open('x') as f: pass
z*with open('x') as f, open('y') as g: pass
r#   r$   r   r   r   Ú	test_withn  s    

z&RoundtripLegalSyntaxTestCase.test_withc                 C   s@   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nztry: pass
except: pass
ztry: pass
finally: pass
z'try: pass
except A: pass
finally: pass
z4try: pass
except A: pass
except: pass
finally: pass
z"try: pass
except: pass
else: pass
z0try: pass
except: pass
else: pass
finally: pass
r#   r$   r   r   r   Útest_try_stmts  s    




z*RoundtripLegalSyntaxTestCase.test_try_stmtc                 C   s   |   d¡ |   d¡ d S )Nzif True:
  pass
else:
  pass
z/if True:
  pass
elif True:
  pass
else:
  pass
r#   r$   r   r   r   Útest_if_stmt}  s    
z)RoundtripLegalSyntaxTestCase.test_if_stmtc              	      s$  d}t  |¡}‡ fdd„‰ g d¢}|  tˆ |jdddƒƒ|¡ |  tˆ | ¡ ƒƒdd„ |D ƒ¡ |  tˆ |jdd	ƒƒd
d„ |D ƒ¡ |  tˆ |jddƒƒdd„ |D ƒ¡ |  tˆ |jdddƒƒdd„ |D ƒ¡ |  tˆ t j|dddƒƒ|¡ |  tˆ t j|dddƒƒdd„ |D ƒ¡ d S )Nzdef f(x):
    return x + 1c                 3   sP   | d }| d }t |ttfƒrF| dd … D ]}ˆ |ƒD ]
}|V  q6q*n| V  d S )Nr   é   )Ú
isinstanceÚtupleÚlist)ÚtreeZ	node_typeÚnextÚeltr   ©Úwalkr   r   rF   ‡  s    z8RoundtripLegalSyntaxTestCase.test_position.<locals>.walk))r>   Údefr>   r   )r>   r   r>   é   )é   ú(r>   é   )r>   r   r>   é   )é   ú)r>   rI   )é   ú:r>   rM   )rH   Ú r>   é	   )rK   rQ   é   éÿÿÿÿ)r>   ÚreturnrS   rH   )r>   r   rS   rO   )é   ú+rS   é   )rS   Ú1rS   é   )rH   rQ   rS   é   )rL   rQ   rS   rT   )rH   rQ   rS   rT   )r   rQ   rS   rT   T)Ú	line_infoÚcol_infoc                 S   s   g | ]\}}}}||f‘qS r   r   ©Ú.0r   ÚnÚlÚcr   r   r   Ú
<listcomp>§  ó    z>RoundtripLegalSyntaxTestCase.test_position.<locals>.<listcomp>)r\   c                 S   s   g | ]\}}}}|||f‘qS r   r   r^   r   r   r   rc   ©  rd   )r]   c                 S   s   g | ]\}}}}|||f‘qS r   r   r^   r   r   r   rc   «  rd   c                 S   s   g | ]}t |ƒ‘qS r   ©rA   ©r_   r   r   r   r   rc   ­  rd   c                 S   s   g | ]}t |ƒ‘qS r   re   rf   r   r   r   rc   ³  rd   )r   r   r   rA   r   ÚtolistZst2tupleZst2list)r   r    ÚstZexpectedr   rE   r   Útest_position  s:    

ÿÿÿÿÿÿþÿþz*RoundtripLegalSyntaxTestCase.test_positionc                 C   s,   |   d¡ |   d¡ |   d¡ |   d¡ d S )Nz*a = yz
x, *b, = mz[*a, *b] = yzfor [*x, b] in x: passr#   r$   r   r   r   Útest_extended_unpackingµ  s    


z4RoundtripLegalSyntaxTestCase.test_extended_unpackingc                 C   s"   |   d¡ |   d¡ |   d¡ d S )Nzraise
zraise e
zBtry:
    suite
except Exception as e:
    raise ValueError from e
r#   r$   r   r   r   Útest_raise_statement»  s    

z1RoundtripLegalSyntaxTestCase.test_raise_statementc                 C   s   |   d¡ |   d¡ d S )Nz[]z[*{2}, 3, *[4]]r+   r$   r   r   r   Útest_list_displaysÃ  s    
z/RoundtripLegalSyntaxTestCase.test_list_displaysc                 C   s6   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nz{*{2}, 3, *[4]}z{2}z{2,}z{2, 3}z{2, 3,}r+   r$   r   r   r   Útest_set_displaysÇ  s
    



z.RoundtripLegalSyntaxTestCase.test_set_displaysc                 C   sJ   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nz{}z{a:b}z{a:b,}z
{a:b, c:d}z{a:b, c:d,}z{**{}}z{**{}, 3:4, **{5:6, 7:8}}r+   r$   r   r   r   Útest_dict_displaysÎ  s    





z/RoundtripLegalSyntaxTestCase.test_dict_displaysc                 C   s6   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nz
f(*a, **b)zf(a, *b, *c, *d)zf(**a, **b)zf(2, *a, *b, **b, **c, **d)z0f(*b, *() or () and (), **{} and {}, **() or {})r+   r$   r   r   r   Útest_argument_unpacking×  s
    



z4RoundtripLegalSyntaxTestCase.test_argument_unpackingc                 C   s"   |   d¡ |   d¡ |   d¡ d S )Nz{x for x in seq}z{f(x) for x in seq}z#{f(x) for x in seq if condition(x)}r+   r$   r   r   r   Útest_set_comprehensionsÞ  s    

z4RoundtripLegalSyntaxTestCase.test_set_comprehensionsc                 C   s"   |   d¡ |   d¡ |   d¡ d S )Nz{x:x for x in seq}z({x**2:x[3] for x in seq if condition(x)}z4{x:x for x in seq1 for y in seq2 if condition(x, y)}r+   r$   r   r   r   Útest_dict_comprehensionsã  s    

z5RoundtripLegalSyntaxTestCase.test_dict_comprehensionsc                 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 S )Nz(a := 1)z(a := a)z0if (match := pattern.search(data)) is None: passz-while match := pattern.search(f.read()): passz[y := f(x), y**2, y**3]z8filtered_data = [y for x in data if (y := f(x)) is None]z(y := f(x))zy0 = (y1 := f(x))zfoo(x=(y := f(x)))zdef foo(answer=(p := 42)): passz$def foo(answer: (p := 42) = 5): passzlambda: (x := 1)z(x := lambda: 1)z(x := lambda: (y := 1))z:lambda line: (m := re.match(pattern, line)) and m.group(1)zx = (y := 0)z(z:=(y:=(x:=0)))z(info := (name, phone, *rest))z(x:=1,2)z(total := total + tax)zlen(lines := f.readlines())zfoo(x := 3, cat='vector')zfoo(cat=(category := 'vector'))zAif any(len(longline := l) >= 100 for l in lines): print(longline)zFif env_base := os.environ.get('PYTHONUSERBASE', None): return env_basezNif self._is_special and (ans := self._check_nans(context=context)): return anszfoo(b := 2, a=1)zfoo((b := 2), a=1)zfoo(c=(b := 2), a=1)z{(x := C(i)).q: x for i in y}r#   r$   r   r   r   Útest_named_expressionsè  sF    























ÿÿ



z3RoundtripLegalSyntaxTestCase.test_named_expressionsN)%Ú__name__Ú
__module__Ú__qualname__r   r   r!   r"   r%   r&   r'   r(   r)   r,   r.   r/   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   r   r   r   r   r      sD   	
+'Q 
4	r   c                   @   sl   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S )ÚIllegalSyntaxTestCasec                 C   s6   zt  |¡ W n t jy"   Y n0 |  d| ¡ d S )Nz"did not detect invalid tree for %r)r   r	   r
   r   )r   rB   Zlabelr   r   r   Úcheck_bad_tree  s
    z$IllegalSyntaxTestCase.check_bad_treec                 C   s   |   dd¡ d S )N)r>   rS   é   z<junk>©rw   r$   r   r   r   Ú	test_junk  s    zIllegalSyntaxTestCase.test_junkc                 C   sD   d}|   |d¡ d}|   |d¡ d}|   |d¡ d}|   |d¡ d S )	N)é  )é  )é  )é  )é  )r>   ©rH   rQ   r€   ©r   rQ   z too small items in terminal node)r{   )r|   )r}   )r~   )r   )r>   s   passr€   r€   r   z'non-string second item in terminal node)r{   )r|   )r}   )r~   )r   )r>   ÚpassÚ0r   r€   r€   r   z'non-integer third item in terminal node)r{   )r|   )r}   )r~   )r   )r>   r‚   r   r   r€   r€   r   ztoo many items in terminal nodery   ©r   rB   r   r   r   Útest_illegal_terminal!  s    ÿ
ÿ
ÿ
ÿ
z+IllegalSyntaxTestCase.test_illegal_terminalc                 C   s   d}|   |d¡ d S )N)r{   ©é  )é  )i  )r>   rG   )r>   r   )i  )rI   rJ   )rM   rN   )rO   rP   )é#  r€   )rK   rQ   )r‡   )é	  )é
  )é  )i  )r>   rU   ©i9  )é$  )é%  )é&  )é'  )é)  )é*  )é+  )é,  )é-  )é.  )é/  )é0  )i1  )rS   rY   )r‡   )rŠ   )r‹   )rŒ   )i  )r>   Úyieldr   r€   )rL   rQ   r€   r   údef f():
  return 1
  yield 1ry   r„   r   r   r   Útest_illegal_yield_1O  s    ÿ3z*IllegalSyntaxTestCase.test_illegal_yield_1c                 C   s   d}|   |d¡ d S )N)r{   )r‡   )rŠ   )r‹   )i  ©r>   Úfrom)i  )r>   Z
__future__©r>   Úimport)i  )r>   Ú
generatorsr€   r†   r›   ry   r„   r   r   r   Útest_illegal_yield_2†  s    ÿ<z*IllegalSyntaxTestCase.test_illegal_yield_2c                 C   s   d}|   |d¡ d S )N)i  )i7  )é"  )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>   rb   r€   r   za,,cry   r„   r   r   r   Útest_a_comma_comma_cÆ  s    ÿz*IllegalSyntaxTestCase.test_a_comma_comma_cc                 C   s   d}|   |d¡ d S )N)r{   )r‡   )rŠ   )r‹   )i  )é8  )r‰   )rŽ   )r   )r   )r¤   )r’   )r“   )r”   )r•   )r–   )r—   )r˜   )r™   r¥   )é  )é%   z$=)rª   )r‰   )rŽ   )r   )r   )r¤   )r’   )r“   )r”   )r•   )r–   )r—   )r˜   )r™   )r>   Úbr€   r   za $= bry   r„   r   r   r   Útest_illegal_operatorá  s    ÿz+IllegalSyntaxTestCase.test_illegal_operatorc                 C   s   d}|   |d¡ d S )N)r{   )r‡   )rŠ   )r‹   )é  )r>   Zfoor€   r€   r   zmalformed global astry   r„   r   r   r   Útest_malformed_global  s    z+IllegalSyntaxTestCase.test_malformed_globalc                 C   s   d}|   |d¡ d S )N)r{   )r«   )r|   )r}   )r¯   )i  r   rŸ   )i  )rˆ   )r>   Zfredr€   r€   r   zfrom import fredry   r„   r   r   r   Útest_missing_import_source  s    ÿ
z0IllegalSyntaxTestCase.test_missing_import_sourcec                 C   s\   d}|   |d¡ d}|   |d¡ d}|  t¡ t |¡ W d   ƒ n1 sN0    Y  d S )N)éU  ©r{   r   zmissed encoding)r²   r³   s
   iso-8859-1znon-string encoding)r²   r³   u   í³¿)rw   r0   ÚUnicodeEncodeErrorr   r	   r„   r   r   r   Útest_illegal_encoding  s    ÿÿÿz+IllegalSyntaxTestCase.test_illegal_encodingc                 C   s4   d}|   |d¡ d}|   |d¡ d}|   |d¡ d S )N)r{   )r|   )iùÿÿÿrQ   znegative node id)r{   )r|   )éc   rQ   zinvalid token id)r{   )r|   )i'  r   zinvalid symbol idry   r„   r   r   r   Útest_invalid_node_id-  s    z*IllegalSyntaxTestCase.test_invalid_node_idc              
   C   sZ   zt  d¡ W nF t jyT } z,|  dt|ƒ¡ |  dt|ƒ¡ W Y d }~n
d }~0 0 d S )N)r{   )r|   r³   Zcompound_stmtZ
file_input)r   r	   r
   ÚassertInr   )r   r   r   r   r   Útest_ParserError_message5  s
    z.IllegalSyntaxTestCase.test_ParserError_messageN)rs   rt   ru   rw   rz   r…   rœ   r¢   r©   r®   r°   r±   rµ   r·   r¹   r   r   r   r   rv     s   .7@!rv   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚCompileTestCasec                 C   s(   t  d¡}t  |¡}|  t|ƒd¡ d S )Nú2 + 3rK   ©r   r   Ú	compilestr   Úeval)r   rh   r    r   r   r   Útest_compile_exprB  s    

z!CompileTestCase.test_compile_exprc                 C   s6   t  d¡}t  |¡}i }t||ƒ |  |d d¡ d S )Núx = 2; y = x + 3ÚyrK   )r   r   r½   r   r   )r   rh   r    Zglobsr   r   r   Útest_compile_suiteG  s
    


z"CompileTestCase.test_compile_suitec                 C   s   t  d¡}|  tt j|¡ d S )Nz	1 = 3 + 4©r   r   r0   r1   r½   ©r   rh   r   r   r   Útest_compile_errorN  s    
z"CompileTestCase.test_compile_errorc                 C   s8   t  d¡}|  tt j|¡ t  d¡}|  tt j|¡ d S )Nza = "\U12345678"z	a = "\u1"rÃ   rÄ   r   r   r   Útest_compile_badunicodeR  s    

z'CompileTestCase.test_compile_badunicodec                 C   sB   t  d¡}t  |¡}|  t|ƒd¡ t  |¡}|  t|ƒd¡ d S )Nz-3éýÿÿÿr¼   )r   rh   Úcode1Úcode2r   r   r   Útest_issue_9011X  s
    


zCompileTestCase.test_issue_9011c              	   C   s>  t  d¡}t  |¡}|  |jd¡ | ¡ }|  |jd¡ dD ]6}t  ||¡}|  |jd¡ | |¡}|  |jd¡ q<tdƒtdƒfD ]Š}|  t	¡ t  ||¡}W d   ƒ n1 s´0    Y  |  |jd¡ |  t	¡ | |¡}W d   ƒ n1 sö0    Y  |  |jd¡ q„|  
tt j|tdƒ¡ |  
t|jtdƒ¡ d S )Nza + 5z<syntax-tree>)úfile.pyó   file.pyrË   rÌ   )r   r   r½   r   Úco_filenamer   Ú	bytearrayÚ
memoryviewZassertWarnsÚDeprecationWarningr0   Ú	TypeErrorrA   )r   rh   r    Úfilenamer   r   r   Útest_compile_filenameb  s&    


*(z%CompileTestCase.test_compile_filenameN)	rs   rt   ru   r¿   rÂ   rÅ   rÆ   rÊ   rÓ   r   r   r   r   rº   >  s   
rº   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚParserStackLimitTestCasezitry to push the parser to/over its limits.
    see http://bugs.python.org/issue1881 for a discussion
    c                 C   s   d| d|  S )Nú[ú]r   )r   Úlevelr   r   r   Ú_nested_expression|  s    z+ParserStackLimitTestCase._nested_expressionc                 C   s    |   d¡}t |¡}| ¡  d S )Nr¶   )rØ   r   r   r   )r   Úerh   r   r   r   Útest_deeply_nested_list  s    

z0ParserStackLimitTestCase.test_deeply_nested_listc                 C   s8   |   d¡}tdd|ƒ\}}}|  d|¡ |  d|¡ d S )Néd   z-Xoldparserú-cs   s_push: parser stack overflows   MemoryError)rØ   r   r¸   )r   rÙ   ÚrcÚoutÚerrr   r   r   Útest_trigger_memory_error†  s    
z2ParserStackLimitTestCase.test_trigger_memory_errorN)rs   rt   ru   Ú__doc__rØ   rÚ   rà   r   r   r   r   rÔ   x  s   rÔ   c                   @   s4   e Zd ZdZdd„ Zdd„ ZejZejdd„ ƒZ	dS )	ÚSTObjectTestCasez(Test operations on ST objects themselvesc           
      C   s  t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}|  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||¡ |  ||¡ |  ||¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||kd¡ |  ||k ||k ¡ |  ||k ||k ¡ |  ||k ||k ¡ |  ||k ||k¡ |  ||k ||k¡ |  ||k ||k¡ |  ||k||k¡ |  ||k||k¡ |  ||k||k¡ t|||ƒ}t|||ƒ}t|||gƒd }	|  ||	k ¡ |  ||k ¡ |  |	|k ¡ |  ||	k¡ |  ||k¡ |  |	|k¡ |  ||k¡ |  |	|	k¡ |  ||k¡ |  |dkd¡ |  d|kd¡ |  t	t
j|d ¡ |  t	t
jd|¡ |  t	t
j|d	¡ |  t	t
jd
|¡ d S )Nr»   rÀ   r*   TFr>   g¹ëhÒ˜@zspanish armadai  s   waterloo)r   r   r   r   ÚminÚmaxÚsortedZ
assertTruer0   rÑ   ÚoperatorÚgeÚleÚltÚgt)
r   r   r   Zst3Zst1_copyZst2_copyZst3_copyZbottomÚtopZmidr   r   r   Útest_comparisons‘  sf    





z!STObjectTestCase.test_comparisonsc                 C   s    t  d¡t  d¡t  d¡g}|D ]z}t |¡}|  | ¡ | ¡ ¡ t |¡}|  | ¡ | ¡ ¡ ttj	d ƒD ]*}t 
t ||¡¡}|  | ¡ | ¡ ¡ qnq d S )Nr»   rÀ   r*   r>   )r   r   r   Úcopyr   r   ÚdeepcopyÚrangeÚpickleÚHIGHEST_PROTOCOLÚloadsÚdumps)r   Ústsrh   Zst_copyÚprotor   r   r   Útest_copy_pickleÎ  s    ý

z!STObjectTestCase.test_copy_picklec                    s–   dd„ ‰ t  d¡‰t d¡‰‡ ‡‡fdd„‰‡‡‡‡fdd„}|t d	¡ƒ |t d
¡ƒ |t d¡ƒ |t d¡ƒ |t d¡ƒ |t d¡ƒ d S )Nc                 S   s0   | dkr| S | dkr | d d@ S d| d   ¡ > S )Nr>   é€   rx   éüÿÿÿ)Ú
bit_length)r`   r   r   r   Ú
XXXROUNDUPá  s
    z0STObjectTestCase.test_sizeof.<locals>.XXXROUNDUPZPiiiZ	hP3iP0h2ic                    s   | d u rdS d}t | ƒdko(t| d tƒ}|rB|t | d ƒd 7 }|rR| dd… n
| dd … }|rŒ|ˆ t |ƒƒˆ 7 }|D ]}|ˆ|ƒ7 }qz|S )Nr   r>   rT   )Úlenr?   r   )ZnodeÚresÚhasstrZchildrenÚchild)rú   ÚnodesizeÚsizeofchildrenr   r   r   ê  s    z4STObjectTestCase.test_sizeof.<locals>.sizeofchildrenc                    s    ˆ  | ˆ ˆ ˆ|  ¡ ƒ ¡ d S r   )Úcheck_sizeofr   )rh   )Úbasesizerÿ   r   r   r   r   Úcheck_st_sizeofø  s    
ÿz5STObjectTestCase.test_sizeof.<locals>.check_st_sizeofr»   z	2 + 3 + 4z	x = 2 + 3rQ   z# -*- coding: utf-8 -*-aÒ  [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,])r   ZcalcobjsizeÚstructÚcalcsizer   r   r   )r   r  r   )rú   r  rÿ   r   r   r   Útest_sizeofß  s    

zSTObjectTestCase.test_sizeofN)
rs   rt   ru   rá   rì   rö   r   r  Zcpython_onlyr  r   r   r   r   râ   Ž  s   =râ   c                   @   s   e Zd Zdd„ ZdS )ÚOtherParserCasec                 C   s:   |   t¡ t dd¡ W d   ƒ n1 s,0    Y  d S )Nr-   r­   )r0   rÑ   r   r   r$   r   r   r   Útest_two_args_to_expr  s    z%OtherParserCase.test_two_args_to_exprN)rs   rt   ru   r  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd„ ZdS )ÚTestDeprecationc                 C   s$   d}t d|ƒ\}}}|  d|¡ d S )Nzdef f():
  import parser

f()rÜ   s   <string>:2: DeprecationWarning)r   r¸   )r   r    rÝ   rÞ   rß   r   r   r   Útest_deprecation_message  s    z(TestDeprecation.test_deprecation_messageN)rs   rt   ru   r
  r   r   r   r   r	    s   r	  Ú__main__)rí   ÚwarningsÚcatch_warningsÚfilterwarningsrÐ   r   rð   Zunittestræ   r  Útestr   Ztest.support.script_helperr   r   ZTestCaser   rv   rº   rÔ   râ   r  r	  rs   Úmainr   r   r   r   Ú<module>   s8   
ÿ&      -:x
