a ze3@sddlZddlZddlZddlmZddlmZddlZddlZddl Z e dZ ddZ Gdddej ZGd d d ej Zed kredS) N)support)dedentz\((\S+).py, line (\d+)cCstt|}|ddS)N)rxsearchstrgroup)msgmor D/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_future.pyget_error_locationsrc@seZdZd#ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"S)$ FutureTestrcCsR|d||ft||tj|j|d||j|||j|dS)Nz%s.py, line %dz.py) ZassertInr assertEqualospathbasenamefilenamelinenooffset)selferrrrrr r r check_syntax_errorszFutureTest.check_syntax_errorcCsHtd*ddlm}||jdWdn1s:0YdS)N future_test1r)r)r CleanImporttestrrresult)rrr r r test_future1s  zFutureTest.test_future1cCsHtd*ddlm}||jdWdn1s:0YdS)N future_test2r)r r)rrrr rr)rr r r r test_future2s  zFutureTest.test_future2cCs:tdddlm}Wdn1s,0YdS)N test_future3r)r")rrrr")rr"r r r r"$s zFutureTest.test_future3cCsJ|t}ddlm}Wdn1s,0Y||jdddS)Nr)badsyntax_future3r#) assertRaises SyntaxErrorrr#r exception)rcmr#r r r test_badfuture3(s *zFutureTest.test_badfuture3cCsJ|t}ddlm}Wdn1s,0Y||jdddS)Nr)badsyntax_future4r*r$)r%r&rr*rr')rr(r*r r r test_badfuture4-s *zFutureTest.test_badfuture4cCsJ|t}ddlm}Wdn1s,0Y||jdddS)Nr)badsyntax_future5r,)r%r&rr,rr')rr(r,r r r test_badfuture52s *zFutureTest.test_badfuture5cCsJ|t}ddlm}Wdn1s,0Y||jdddS)Nr)badsyntax_future6r/r$)r%r&rr/rr')rr(r/r r r test_badfuture67s *zFutureTest.test_badfuture6cCsL|t}ddlm}Wdn1s,0Y||jddddS)Nr)badsyntax_future7r1r$5)r%r&rr1rr')rr(r1r r r test_badfuture7<s *zFutureTest.test_badfuture7cCsJ|t}ddlm}Wdn1s,0Y||jdddS)Nr)badsyntax_future8r4r$)r%r&rr4rr')rr(r4r r r test_badfuture8As *zFutureTest.test_badfuture8cCsJ|t}ddlm}Wdn1s,0Y||jdddS)Nr)badsyntax_future9r6r$)r%r&rr6rr')rr(r6r r r test_badfuture9Fs *zFutureTest.test_badfuture9cCsJ|t}ddlm}Wdn1s,0Y||jdddS)Nr)badsyntax_future10r8r$)r%r&rr8rr')rr(r8r r r test_badfuture10Ks *zFutureTest.test_badfuture10cCsBddtjD}|ddttDO}|t||dS)NcSs$i|]}d|tt|jqS)Z CO_FUTURE_)uppergetattr __future__Z compiler_flag).0futurer r r Tsz;FutureTest.test_ensure_flags_dont_clash..cSs"i|]}|dr|tt|qS)ZPyCF_) startswithr;ast)r=flagr r r r?Ys )r<Zall_feature_namesdirrAZassertCountEqualsetvalues)rflagsr r r test_ensure_flags_dont_clashPsz'FutureTest.test_ensure_flags_dont_clashcCsXz tdWntyYn 0|dz tdWntyHYn 0|ddS)Nz.from __future__ import print_function; print 0zsyntax error didn't occurz0from __future__ import (print_function); print 0)execr&Zfailrr r r test_parserhack_s     zFutureTest.test_parserhackcCs:tdddlm}Wdn1s,0YdS)Nztest.test_future5r) test_future5)rrrrK)rrKr r r test_multiple_featuresss z!FutureTest.test_multiple_featurescCs$i}tdi|||dtdS)Nz/from __future__ import unicode_literals; x = ''x)rHZassertIsInstancer)rscoper r r test_unicode_literals_execws z%FutureTest.test_unicode_literals_execN)r)__name__ __module__ __qualname__rrr!r"r)r+r.r0r3r5r7r9rGrJrLrOr r r r rs  rc@s>eZdZedZddZdddZdd Zd d Zd d Z dS)AnnotationsFutureTestCasea* from __future__ import annotations def f() -> {ann}: ... def g(arg: {ann}) -> None: ... async def f2() -> {ann}: ... async def g2(arg: {ann}) -> None: ... var: {ann} var2: {ann} = None c Csi}t|jj|di||djd}|djd}|djd}|djd}|dd }|dd }||||||||||||||||S) N)annfreturngargf2Zg2__annotations__varZvar2)rHtemplateformatrZr) r annotationrNZ func_ret_annZ func_arg_annZasync_func_ret_annZasync_func_arg_annZvar_ann1Zvar_ann2r r r getActuals       z#AnnotationsFutureTestCase.getActualNFcCsZ||}|dur&|s|n |dd}|rJ||||dddd}|||dS)Nr())r_ZassertNotEqualreplacer)rr^expectedZ drop_parensZis_tupleactualr r r assertAnnotationEquals  z/AnnotationsFutureTestCase.assertAnnotationEqualcCs|j}|d|d|d|d|d|d|d|d|d |d |d |d |d |d|d|d|d|d|d|d|d|d|d|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|d9|d:|d;|d<|d=|d>|d?|d@|dA|dB|dC|dD|dE|dF|dG|dH|dI|dJ|dK|dL|dM|dN|dO|dP|dQ|dR|dS|dT|dU|dV|dW|dX|dY|dZ|d[|d\|d]|d^|d_|d`|da|db|dc|dd|de|df|dg|dh|di|dj|dk|dl|dm|dn|do|dp|dq|dr|ds|dt|du|dv|dw|dx|dy|dz|d{|d||d}|d~|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|dd|ddE|d|d|ddS)Nz...z 'some_string'zu'some_string'zb'\xa3'NameNoneTrueFalse1z1.0Z1jz True or FalsezTrue or False or NonezTrue and FalsezTrue and False and NonezName1 and Name2 or Name3zName1 and (Name2 or Name3)zName1 or Name2 and Name3z(Name1 or Name2) and Name3z"Name1 and Name2 or Name3 and Name4z!Name1 or Name2 and Name3 or Name4za + b + (c + d)za * b * (c * d)z(a ** b) ** c ** dzv1 << 2z1 >> v2z 1 % finishedz"1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8z not greatz not not greatz~greatz+valuez++valuez-1z!~int and not v1 ^ 123 + v2 | Truez a + (not b)z lambda: Nonezlambda arg: Nonezlambda a=True: azlambda a, b, c=True: az-lambda a, b, c=True, *, d=1 << v2, e='str': az9lambda a, b, c=True, *vararg, d, e='str', **kwargs: a + bzlambda x=1, y=2, z=3, /, w=4, *, l, l2: x + y + z + w + l + l2zHlambda x=1, y=2, z=3, /, w=4, *, l, l2, **kwargs: x + y + z + w + l + l2z!lambda x, /, y=1, *, z: x + y + zzlambda x: lambda y: x + yz1 if True else 2z4str or None if int or True else str or bytes or Nonez;str or None if (1 if True else 2) else str or bytes or Nonez"0 if not x else 1 if x > 0 else -1z (1 if x > 0 else -1) if x else 0z+{'2.7': dead, '3.7': long_live or die_hard}z@{'2.7': dead, '3.7': long_live or die_hard, **{'3.6': verygood}}z{**a, **b, **c}zC{'2.7', '3.6', '3.7', '3.8', '3.9', '4.0' if gilectomy else '3.10'}z {*a, *b, *c}z?({'a': 'b'}, True or False, +value, 'string', b'bytes') or Nonez()z(a,)z(a, b)z (a, b, c)z (*a, *b, *c)z[]z6[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]z [*a, *b, *c]z{i for i in (1, 2, 3)}z{i ** 2 for i in (1, 2, 3)}z3{i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))}z2{i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3)}z[i for i in (1, 2, 3)]z ** 2 for i in (1, 2, 3)]z3[i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))]z2[i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3)]z(i for i in (1, 2, 3))z(i ** 2 for i in (1, 2, 3))z3(i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c')))z2(i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3))z{i: 0 for i in (1, 2, 3)}z1{i: j for i, j in ((1, 'a'), (2, 'b'), (3, 'c'))}z[(x, y) for x, y in (a, b)]z[(x,) for x, in (a,)]zPython3 > Python2 > COBOLz Life is Lifezcall()z call(arg)zcall(kwarg='hey')zcall(arg, kwarg='hey')z&call(arg, *args, another, kwarg='hey')z6call(arg, another, kwarg='hey', **kwargs, kwarg2='ho')zlukasz.langa.plzcall.me(maybe)z1 .realz1.0.realz ....__class__z list[str]zdict[str, int]z set[str,]ztuple[str, ...]ztuple[(str, *types)]ztuple[str, int, (str, int)]z#tuple[(*int, str, str, (str, int))]z&tuple[str, int, float, dict[str, int]]zslice[0]z slice[0:1]z slice[0:1:2]zslice[:]z slice[:-1]z slice[1:]z slice[::-1]z slice[:,]z slice[1:2,]z slice[1:2:3,]z slice[1:2, 1]zslice[1:2, 2, 3]z slice[()]zslice[a, b:c, d:e:f]zslice[(x for x in a)]zCstr or None if sys.version_info[0] > (3,) else str or bytes or Nonez5f'f-string without formatted values is just a string'zf'{{NOT a formatted value}}'z:f'some f-string with {a} {few():.2f} {formatted.values!r}'zf"{f'{nested} inner'} outer"z:f'space between opening braces: { {a for a in (1, 2, 3)}}'zf'{(lambda x: x)}'z!f'{(None if a else lambda x: x)}'zf'{x}'zf'{x!r}'zf'{x!a}'z!(yield from outside_of_generator)z(yield)z (yield a + b)zs   j_