B
    2*™\…  ã               @   sÈ   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 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edkrÄe ¡  dS )é    N)Úsupport)Úassert_python_failurec               @   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"dAS )BÚRoundtripLegalSyntaxTestCasec          
   C   sl   ||ƒ}|  ¡ }yt |¡}W n6 tjk
rT } z|  d||f ¡ W d d }~X Y nX |  ||  ¡ 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Úst2Zwhy© r   ú;C:\ALexclude\prg\programme\Python37\Lib\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 )N)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_statement,   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 42)r   )r   r   r   r   Útest_await_statementC   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: pass)r   )r   r   r   r   Útest_async_with_statementK   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 (): pass)r   )r   r   r   r   Útest_async_for_statementO   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_statementS   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 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]z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	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_expressions]   sP    






































z-RoundtripLegalSyntaxTestCase.test_expressionsc             C   s   |   d¡ d S )NÚa)r   )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 = e)r   )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 Q R X |  t¡ tdi i ƒ W d Q R X |  t¡ tdi i ƒ W d Q R X |  t¡ tdi i ƒ W d Q R X |  t¡ tdi i ƒ W d Q R X |  t¡ tdi i ƒ W d Q R X |  t¡ tdi i ƒ W d Q R X |  t¡ tdi i ƒ W d Q R X |  t¡ tdi i ƒ W d Q R X |  t¡ tdi i ƒ W d Q R X 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t: tuple = 1, 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 **= b)r   )r   r   r   r   Ú!test_simple_augmented_assignments¶   s    










z>RoundtripLegalSyntaxTestCase.test_simple_augmented_assignmentsc             C   sl  |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d	¡ |   d
¡ |   d¡ |   d¡ |   d¡ |   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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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: 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: pass)r   )r   r   r   r   Útest_function_defsÄ   sH    


































z/RoundtripLegalSyntaxTestCase.test_function_defsc             C   s6   |   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():pass)r   )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 x)r   )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_math)r   )r   r   r   r   Útest_basic_import_statement  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 name)r   )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_pep263+  s    z(RoundtripLegalSyntaxTestCase.test_pep263c             C   s   |   d¡ d S )Nzassert alo < ahi and blo < bhi
)r   )r   r   r   r   Útest_assert/  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_with2  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_stmt7  s    




z*RoundtripLegalSyntaxTestCase.test_try_stmtc                s@  d}t  |¡}‡ fdd„‰ dddddd	d
dddddddddg}|  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   sX   | d }| d }t |ttfƒrNx4| dd … D ]}xˆ |ƒD ]
}|V  q:W q,W n| V  d S )Nr   é   )Ú
isinstanceÚtupleÚlist)ÚtreeZ	node_typeÚnextZeltr   )Úwalkr   r   r:   G  s    z8RoundtripLegalSyntaxTestCase.test_position.<locals>.walk)r4   Údefr4   r   )r4   r   r4   é   )é   ú(r4   é   )r4   r   r4   é   )é   ú)r4   r=   )é   ú:r4   rA   )r<   Ú r4   é	   )r?   rE   é   éÿÿÿÿ)r4   ÚreturnrG   r<   )r4   r   rG   rC   )é   ú+rG   é   )rG   Ú1rG   é   )r<   rE   rG   é   )r@   rE   rG   rH   )r<   rE   rG   rH   )r   rE   rG   rH   T)Ú	line_infoÚcol_infoc             S   s   g | ]\}}}}||f‘qS r   r   )Ú.0r   ÚnÚlÚcr   r   r   ú
<listcomp>g  s    z>RoundtripLegalSyntaxTestCase.test_position.<locals>.<listcomp>)rP   c             S   s   g | ]\}}}}|||f‘qS r   r   )rR   r   rS   rT   rU   r   r   r   rV   i  s    )rQ   c             S   s   g | ]\}}}}|||f‘qS r   r   )rR   r   rS   rT   rU   r   r   r   rV   k  s    c             S   s   g | ]}t |ƒ‘qS r   )r7   )rR   r   r   r   r   rV   m  s    c             S   s   g | ]}t |ƒ‘qS r   )r7   )rR   r   r   r   r   rV   s  s    )r   r   r
   r7   r   ÚtolistZst2tupleZst2list)r   r   ÚstZexpectedr   )r:   r   Útest_positionA  sF    


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: pass)r   )r   r   r   r   Útest_extended_unpackingu  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_comprehensionsN)#Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r    r!   r"   r#   r%   r&   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   rY   rZ   r[   r\   r]   r^   r_   r`   ra   r   r   r   r   r      s@   	
*'0
4	r   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d„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚIllegalSyntaxTestCasec             C   s8   yt  |¡ W n t jk
r$   Y nX |  d| ¡ d S )Nz"did not detect invalid tree for %r)r   r   r   r	   )r   r8   Zlabelr   r   r   Úcheck_bad_tree°  s
    z$IllegalSyntaxTestCase.check_bad_treec             C   s   |   dd¡ d S )N)r4   rG   é   z<junk>)rf   )r   r   r   r   Ú	test_junk¸  s    zIllegalSyntaxTestCase.test_junkc             C   sD   d}|   |d¡ d}|   |d¡ d}|   |d¡ d}|   |d¡ d S )	N)i  )i  )i  )i  )i  )r4   )r<   rE   )r<   rE   )r   rE   z too small items in terminal node)i  )i  )i  )i  )i  )r4   s   pass)r<   rE   )r<   rE   )r   rE   z'non-string second item in terminal node)i  )i  )i  )i  )i  )r4   ÚpassÚ0r   )r<   rE   )r<   rE   )r   rE   z'non-integer third item in terminal node)i  )i  )i  )i  )i  )r4   ri   r   r   )r<   rE   )r<   rE   )r   rE   ztoo many items in terminal node)rf   )r   r8   r   r   r   Útest_illegal_terminal¼  s    				z+IllegalSyntaxTestCase.test_illegal_terminalc             C   s   d}|   |d¡ d S )N)i  )i  )i  )i  )r4   r;   )r4   r   )i  )r=   r>   )rA   rB   )rC   rD   )i#  )r<   rE   )r?   rE   )i  )i	  )i
  )i  )i  )r4   rI   )i9  )i$  )i%  )i&  )i'  )i)  )i*  )i+  )i,  )i-  )i.  )i/  )i0  )i1  )rG   rM   )i  )i	  )i
  )i  )i  )r4   Úyield)i9  )i$  )i%  )i&  )i'  )i)  )i*  )i+  )i,  )i-  )i.  )i/  )i0  )i1  )rG   rM   )r<   rE   )r@   rE   )r<   rE   )r   rE   zdef f():
  return 1
  yield 1)rf   )r   r8   r   r   r   Útest_illegal_yield_1ê  s    2z*IllegalSyntaxTestCase.test_illegal_yield_1c             C   s   d}|   |d¡ d S )N)i  )i  )i	  )i
  )i  )r4   Úfrom)i  )r4   Z
__future__)r4   Úimport)i  )r4   Z
generators)r<   rE   )i  )i  )i  )r4   r;   )r4   r   )i  )r=   r>   )rA   rB   )rC   rD   )i#  )r<   rE   )r?   rE   )i  )i	  )i
  )i  )i  )r4   rI   )i9  )i$  )i%  )i&  )i'  )i)  )i*  )i+  )i,  )i-  )i.  )i/  )i0  )i1  )rG   rM   )i  )i	  )i
  )i  )i  )r4   rl   )i9  )i$  )i%  )i&  )i'  )i)  )i*  )i+  )i,  )i-  )i.  )i/  )i0  )i1  )rG   rM   )r<   rE   )r@   rE   )r<   rE   )r   rE   zdef f():
  return 1
  yield 1)rf   )r   r8   r   r   r   Útest_illegal_yield_2!  s    ;z*IllegalSyntaxTestCase.test_illegal_yield_2c             C   s   d}|   |d¡ d S )N)i  )i7  )i"  )i#  )i$  )i%  )i'  )i(  )i)  )i*  )i+  )i,  )i-  )i.  )i/  )r4   r$   )é   ú,)rq   rr   )i"  )i#  )i$  )i%  )i'  )i(  )i)  )i*  )i+  )i,  )i-  )i.  )i/  )r4   rU   )r<   rE   )r   rE   za,,c)rf   )r   r8   r   r   r   Útest_a_comma_comma_ca  s    z*IllegalSyntaxTestCase.test_a_comma_comma_cc             C   s   d}|   |d¡ d S )N)i  )i  )i	  )i
  )i  )i8  )i#  )i$  )i%  )i&  )i(  )i)  )i*  )i+  )i,  )i-  )i.  )i/  )i0  )r4   r$   )i  )é%   z$=)i8  )i#  )i$  )i%  )i&  )i(  )i)  )i*  )i+  )i,  )i-  )i.  )i/  )i0  )r4   Úb)r<   rE   )r   rE   za $= b)rf   )r   r8   r   r   r   Útest_illegal_operator|  s    z+IllegalSyntaxTestCase.test_illegal_operatorc             C   s   d}|   |d¡ d S )N)i  )i  )i	  )i
  )i  )r4   Zfoo)r<   rE   )r<   rE   )r   rE   zmalformed global ast)rf   )r   r8   r   r   r   Útest_malformed_global  s    z+IllegalSyntaxTestCase.test_malformed_globalc             C   s   d}|   |d¡ d S )N)i  )i  )i  )i  )i  )i  )r4   rn   )r4   ro   )i  )i  )r4   Zfred)r<   rE   )r<   rE   )r   rE   zfrom import fred)rf   )r   r8   r   r   r   Útest_missing_import_source¨  s    	z0IllegalSyntaxTestCase.test_missing_import_sourcec          	   C   sH   d}|   |d¡ d}|   |d¡ d}|  t¡ t |¡ W d Q R X d S )N)iT  )i  )r   rE   zmissed encoding)iT  )i  )r   rE   s
   iso-8859-1znon-string encoding)iT  )i  )r   rE   u   í³¿)rf   r'   ÚUnicodeEncodeErrorr   r   )r   r8   r   r   r   Útest_illegal_encoding¶  s    z+IllegalSyntaxTestCase.test_illegal_encodingN)rb   rc   rd   rf   rh   rk   rm   rp   rs   rv   rw   rx   rz   r   r   r   r   re   ®  s   .7@!re   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 )Nz2 + 3r?   )r   r   Ú	compilestr
   Úeval)r   rX   r   r   r   r   Útest_compile_exprÍ  s    

z!CompileTestCase.test_compile_exprc             C   s6   t  d¡}t  |¡}i }t||ƒ |  |d d¡ d S )Nzx = 2; y = x + 3Úyr?   )r   r   r|   r   r
   )r   rX   r   Zglobsr   r   r   Útest_compile_suiteÒ  s
    


z"CompileTestCase.test_compile_suitec             C   s   t  d¡}|  tt j|¡ d S )Nz	1 = 3 + 4)r   r   r'   r(   r|   )r   rX   r   r   r   Útest_compile_errorÙ  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|   )r   rX   r   r   r   Útest_compile_badunicodeÝ  s    

z'CompileTestCase.test_compile_badunicodec             C   sB   t  d¡}t  |¡}|  t|ƒd¡ t  |¡}|  t|ƒd¡ d S )Nz-3éýÿÿÿ)r   r   r|   r
   r}   )r   rX   Úcode1Úcode2r   r   r   Útest_issue_9011ã  s
    


zCompileTestCase.test_issue_9011c          
   C   s  t  d¡}t  |¡}|  |jd¡ | ¡ }|  |jd¡ x>dD ]6}t  ||¡}|  |jd¡ | |¡}|  |jd¡ q>W xvtdƒtdƒfD ]b}|  t	¡ t  ||¡}W d Q R X |  |jd¡ |  t	¡ | |¡}W d Q R X |  |jd¡ qŠW |  
tt j|tdƒ¡ |  
t|jtdƒ¡ d S )Nza + 5z<syntax-tree>)zfile.pys   file.pyzfile.pys   file.py)r   r   r|   r
   Úco_filenamer   Ú	bytearrayÚ
memoryviewZassertWarnsÚDeprecationWarningr'   Ú	TypeErrorr7   )r   rX   r   Úfilenamer   r   r   Útest_compile_filenameí  s&    



z%CompileTestCase.test_compile_filenameN)	rb   rc   rd   r~   r€   r   r‚   r†   r   r   r   r   r   r{   É  s   
r{   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚParserStackLimitTestCasec             C   s   d| d|  S )Nú[ú]r   )r   Úlevelr   r   r   Ú_nested_expression  s    z+ParserStackLimitTestCase._nested_expressionc             C   s    |   d¡}t |¡}| ¡  d S )Né]   )r’   r   r   r   )r   ÚerX   r   r   r   Útest_deeply_nested_list
  s    

z0ParserStackLimitTestCase.test_deeply_nested_listc             C   s6   |   d¡}td|ƒ\}}}|  d|¡ |  d|¡ d S )Néd   z-cs   s_push: parser stack overflows   MemoryError)r’   r   ZassertIn)r   r”   ZrcÚoutÚerrr   r   r   Útest_trigger_memory_error  s    
z2ParserStackLimitTestCase.test_trigger_memory_errorN)rb   rc   rd   r’   r•   r™   r   r   r   r   rŽ     s   rŽ   c               @   s0   e Zd Zdd„ Zdd„ ZejZejdd„ ƒZdS )ÚSTObjectTestCasec       
      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 )Nz2 + 3zx = 2; y = x + 3zlist(x**3 for x in range(20))TFr4   g¹ëhÒ˜@zspanish armadai  s   waterloo)r   r   r   r
   ÚminÚmaxÚsortedZ
assertTruer'   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}x†|D ]~}t |¡}|  | ¡ | ¡ ¡ t |¡}|  | ¡ | ¡ ¡ x<ttj	d ƒD ]*}t 
t ||¡¡}|  | ¡ | ¡ ¡ qrW q"W d S )Nz2 + 3zx = 2; y = x + 3zlist(x**3 for x in range(20))r4   )r   r   r   Úcopyr
   r   ZdeepcopyÚrangeÚpickleZHIGHEST_PROTOCOLÚloadsÚdumps)r   ZstsrX   Zst_copyÚprotor   r   r   Útest_copy_pickleX  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 )Nr4   é€   rg   éüÿÿÿ)Ú
bit_length)rS   r   r   r   Ú
XXXROUNDUPk  s
    z0STObjectTestCase.test_sizeof.<locals>.XXXROUNDUPZPiiZhP3iP0hc                s”   | d k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 }x|D ]}|ˆ|ƒ7 }q|W |S )Nr   r4   rH   )Úlenr5   r   )ZnodeÚresÚhasstrZchildrenZchild)r¯   ÚnodesizeÚsizeofchildrenr   r   r´   t  s    
z4STObjectTestCase.test_sizeof.<locals>.sizeofchildrenc                s    ˆ  | ˆ ˆ ˆ|  ¡ ƒ ¡ d S )N)Úcheck_sizeofr   )rX   )Úbasesizer³   r   r´   r   r   Úcheck_st_sizeof‚  s    z5STObjectTestCase.test_sizeof.<locals>.check_st_sizeofz2 + 3z	2 + 3 + 4z	x = 2 + 3rE   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_sizeofi  s    

zSTObjectTestCase.test_sizeofN)	rb   rc   rd   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 Q R X d S )Nr$   ru   )r'   r‹   r   r   )r   r   r   r   Útest_two_args_to_expr’  s    z%OtherParserCase.test_two_args_to_exprN)rb   rc   rd   r¼   r   r   r   r   r»     s   r»   Ú__main__)r¥   r   r§   Zunittestrž   r¸   Ztestr   Ztest.support.script_helperr   ZTestCaser   re   r{   rŽ   rš   r»   rb   Úmainr   r   r   r   Ú<module>   s(      !  :x