a zex@svddlZddlZddlZddlZddlZddlZddlmZmZddl m Z dZ Gdddej Z e dkrredS)N)temp_cwduse_old_parser)assert_python_failurezglobal variablec@sNeZdZddZddZddZddZd d Zd d Ze e d ddZ e e d ddZ ddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Z d8d9Z!d:d;Z"dd?Z$d@dAZ%dBdCZ&dDdEZ'dFdGZ(dHdIZ)dJdKZ*dLdMZ+dNdOZ,dPdQZ-dRdSZ.dTdUZ/dVdWZ0dXdYZ1dZd[Z2d\d]Z3d^d_Z4d`daZ5dbdcZ6dddeZ7dfdgZ8dhdiZ9djdkZ:dldmZ;dndoZdudvZ?dwdxZ@dydzZAd{d|ZBd}d~ZCddZDddZEddZFddZGddZHdS)TestCasec Csn|D]d}|j|dD|||t|Wdn1s@0YWdq1s^0YqdS)Nstr)ZsubTestassertRaisesRegexeval)selfZexception_typeZregexZ error_stringsrr E/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_fstring.pyassertAllRaiseszTestCase.assertAllRaisecCsGddd}|}|}tdd||_||t|||d|t|t|||dd||dd|t||dd|t||dddS)Nc@seZdZddZdS)z(TestCase.test__format__lookup..XcSsdS)Nclassr r specr r r __format__&sz3TestCase.test__format__lookup..X.__format__N__name__ __module__ __qualname__rr r r r X%srcSsdS)Ninstancer rr r r .z/TestCase.test__format__lookup..rr)types MethodTyper assertEqualformattype)r rxyr r r test__format__lookup#szTestCase.test__format__lookupcCsRGddd}|}d}t|}t|dd}||jt|||jdS)Nc@seZdZddZddZdS)zTestCase.test_ast..XcSs d|_dS)NFcalledr r r r __init__Asz%TestCase.test_ast..X.__init__cSs d|_dS)NTr#r%r r r __call__Csz%TestCase.test_ast..X.__call__N)rrrr&r(r r r r r@sr a = 10 f'{a * x()}'rexec)astparsecompileZ assertFalser$r*Z assertTrue)r rr exprtcr r r test_ast>s   zTestCase.test_astcCsd}t|}|t|tj|t|jd|t|jdtj||jdjd|t|jdtj |t|jdj tj |t|jdj j d|t|jdj j dtj ||jdjd||jdj jd||jdj j djd|jdj j dj }|t|tj|t|jtj|t|jtj|t|jtj||jd||jjd||jjd||jd||jjd||jjddS)Nr)r)r+r,rrModulelenbodyAssignlinenoExprvalue JoinedStrvaluesFormattedValueBinOpleftNameopMultrightCall col_offsetr r.r/binopr r r test_ast_line_numbersVs0  zTestCase.test_ast_line_numberscCsd}t|}|t|tj|t|jd|t|jdtj|t|jdjtj ||jdj d|t|jdtj|t|jdjtj |t|jdjj d|t|jdjj dtj |t|jdjj djt |t|jdjj dtj|t|jdjj dtj |t|jdjj djt |t|jdjj dtj||jdj d||jdjj d||jdjj dj d||jdjj dj d||jdjj dj d||jdjj dj d|jdjj dj}|t|tj|t|jtj|t|jtj|t|jtj||j d||jj d||jj d||jd||jjd||jjd|jdjj dj}|t|tj|t|jtj|t|jtj|t|jtj||j d||jj d||jj d||jd ||jjd ||jjd dS) Nz8 f'no formatted values' f'eggs {a * x()} spam {b + y()}'r2rr3r'r4 )r+r,rrr6r7r8r;r<r=r:r>Constantrr?r@rArBrCrDrErFrGZAdd)r r.r/Zbinop1Zbinop2r r r .test_ast_line_numbers_multiple_formattedvaluesusX       z7TestCase.test_ast_line_numbers_multiple_formattedvaluescCsd}t|}|t|tj|t|jd|t|jdtj||jdjd|t|jdtj |t|jdj tj |t|jdj j d|t|jdj j dtj ||jdjd||jdj jd||jdj j djd|jdj j dj }|t|tj|t|jtj|t|jtj|t|jtj ||jd||jjd||jjd||jd||jjd||jjd|t|jj d|t|jj dtj|t|jj dj t|t|jj dtj |t|jj dtj|t|jj dj t||jj djd||jj djd||jj djd|jj dj }|t|tj||jd||jddS)Nz a = 10 f'{a * f"-{x()}-"}'r2rr3r4r5 )r+r,rrr6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErGrOrrF)r r.r/rIcallr r r test_ast_line_numbers_nestedsJ  z%TestCase.test_ast_line_numbers_nestedz8The old parser gets the offsets incorrectly for fstringscCs~d}t|}|t|tj|t|jd|t|jdtj||jdjd|t|jdtj |t|jdj tj |t|jdj j d|t|jdj j dtj |t|jdj j dtj|t|jdj j dj t|t|jdj j dtj |t|jdj j dtj|t|jdj j dj t|t|jdj j dtj ||jdjd||jdj jd||jdj j djd||jdj j djd||jdj j djd||jdj j djd||jdj j djd|jdj j dj }|t|tj|t|jtj|t|jtj|t|jtj||jd||jjd||jjd||jd||jjd||jjd|jdj j dj }|t|tj|t|jtj|t|jtj|t|jtj||jd||jjd||jjd||jd ||jjd ||jjd |jdj j dj }|t|tj|t|jtj|t|jtj|t|jtj||jd||jjd||jjd||jd ||jjd ||jjd dS) Nz) a = 10 f'{a * x()} {a * x()} {a * x()}' r2rr3r4r'r5 rMrN)r+r,rrr6r7r8r9r:r;r<r=r>r?rOrr@rArBrCrDrErFrGrHr r r *test_ast_line_numbers_duplicate_expressionsp        z3TestCase.test_ast_line_numbers_duplicate_expressioncCsDtd}|t|jd||jdjd|t|jdtj|t|jdjtj |t|jdjj d|t|jdjj dtj |t|jdjj dtj |t|jdjj dtj |jdjj \}}}|j}|t|tj ||jd||jd||jd||jddS)Nz%f"Here is that pesky {xxx:.3f} again"r3rr4r2)r+r,rr7r8r:rr;r<r=r>rOr?rB end_linenorGend_col_offset)r r/_r.namer r r (test_ast_numbers_fstring_with_formattings     z1TestCase.test_ast_numbers_fstring_with_formattingcCsd}t|}|t|tj|t|jd|t|jdtj||jdjd|t|jdtj |t|jdj tj |t|jdj j d|t|jdj j dtj |t|jdj j dj t|t|jdj j dtj|t|jdj j dtj |t|jdj j dj t||jdjd||jdj jd||jdj j djd||jdj j djd||jdj j djd||jdjd||jdj jd||jdj j djd||jdj j djd||jdj j djd|jdj j dj }|t|tj|t|jtj|t|jtj|t|jtj||jd||jjd||jjd||jd||jjd||jjddS) Nz? a = 10 f''' {a * x()} non-important content ''' r2rr3r4r'r5)r+r,rrr6r7r8r9r:r;r<r=r>rOrr?rGr@rArBrCrDrErFrHr r r 'test_ast_line_numbers_multiline_fstring1sF      z0TestCase.test_ast_line_numbers_multiline_fstringcCsd}t|}|t|tj|t|jd|jdjjdj}|t|tj ||j d||j d||j d||j dd}t|}|t|tj|t|jd|jdjjd}|t|tj|t|jd|j\}}}|t|tj||j d||j d ||j d ||j d |j}|t|tj ||j trzdnd ||j trdnd ||j trd nd||j trdnd|t|tj||j d||j d ||j d ||j d dS)Nz x = ( f" {test(t)}" )r3rr4rKzv x = ( 'PERL_MM_OPT', ( f'wat' f'some_string={f(x)} ' f'wat' ), ) r'r_rLrTrUrNrV)r+r,rrr6r7r8r<r>rFr:rZrGr[eltsr=rOr)r r.r/rRZfstringZwat1ZmiddleZwat2r r r &test_ast_line_numbers_with_parenthesescsD   z/TestCase.test_ast_line_numbers_with_parenthesescCs,dd}||jdd}||jdS)NcSsddSNzNot a docstringr r r r r fsz"TestCase.test_docstring..fcSsddSrfr r r r r gsz"TestCase.test_docstring..g)Z assertIsNone__doc__)r rgrhr r r test_docstrings zTestCase.test_docstringcCs:|tdtdWdn1s,0YdS)Nzmalformed node or stringzf'x')r ValueErrorr+Z literal_evalr%r r r test_literal_evalszTestCase.test_literal_evalcCs<dg}d}t|}t|dd}t|||dddS)Nrzx[0] = 'foo' f'{3}'r*rZfoo3)r+r,r-r*r)r r r.r/r0r r r test_ast_compile_time_concats   z%TestCase.test_ast_compile_time_concatcCs|tdddgdS)Nz&cannot mix bytes and nonbytes literalszf'' b''zb'' f''r SyntaxErrorr%r r r test_compile_time_concat_errorss z(TestCase.test_compile_time_concat_errorscCs(|d|dd|dddS)Nra rr%r r r test_literals  zTestCase.test_literalcCs|tdgddS)Nzf-string: unterminated string)zf'{"x'zf'{"x}'zf'{("x'zf'{("x}'rnr%r r r test_unterminated_stringsz!TestCase.test_unterminated_stringcCsb|tddg|tddg|tddg|tddg|tdd g|ttd dS) NzJf-string: closing parenthesis '\}' does not match opening parenthesis '\('zf'{((}'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 '\['zf'{a[4}'zf'{a(4}'af'{((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((}')r ro assertRaisesr r%r r r test_mismatched_parenss zTestCase.test_mismatched_parenscCsr|dd|dd|dd|dd|dd|dd|dd|dd|d d |d d |d d |d d |d d |dd|dd|dd|ddd|ddd|ddd|ddd|ddd|ddd|ddd|ddd|dd|tddgdS) N{za{z{bza{b}za}z}bza}bz{}za{}z{b}z{}cza{b}za{}cz{b}cza{b}c z{10z}10z}{z}{10z}a{z}a{10z10{z10}z10}{z}a{}z10}a{}z{{}}zunhashable typez f'{ {{}} }')rr TypeErrorr%r r r test_double_bracess8                zTestCase.test_double_bracescCsd}|d|dd|d|dd|d|d|dd|d |d |d |d |d |d |d |d|d|d|d|d||dd||d||d||d||dd|d|dd|d|d||d|d|d|d|d|d|d|d|d|tddgdS)Ndefzabc## Zghiz abc## defghiabcZ abcdefghi4z abcdefghidef z{x}z{x}defz{xz{xdefz{{x}}z{{x}}defz{{xz{{xdefzx}}zx}}defzdefx}}2Zdef21Z1def2Z1def-zdef-defrf-string: expecting '}'z f'{3' f'}'rr ror r r r r test_compile_time_concats8       z!TestCase.test_compile_time_concatcCsNddi}|dd||dd|tdgd|tddgdS)N#hashz+f-string expression part cannot include '#')zf'{1#}'z f'{3(#)}'zf'{#}'f-string: unmatched '\)'zf'{)#}'rr dr r r test_commentsszTestCase.test_commentscCsddd}d}d}tddD] }|t|||d|q|t|d d |dd |d d }|t||dddd}|t|ddS)NrcSsdd||dS)Nzf'z{x} 'r )nextrar r r build_fstr0sz2TestCase.test_many_expressions..build_fstrrr3irriz {x:{width}} zf'{1}' 'x' 'y'iA 1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy1xy)r)rangerr )r rr widthisr r r test_many_expressions+s   zTestCase.test_many_expressionsc Csd}d}td}|d||d|d|d||d|d|d||dd|dd|d|d d dd|dd|d|d d dd|dd|dd d d d |dd dd dd |ddd dd dd|ddd d ddd|dd dddikoH|dd |tddgtrrdnd}|t|dg|tddg|tddgdS)Nrzr'z12.34567zresult: .zresult: 12.350rr3rr0xz 0xar irz -0xar4rTrzf'{"s"!r{":10"}}'invalid syntaxf-string: invalid syntaxz f'{4:{/5}}'z'f-string: expressions nested too deeplyz,f'result: {value:{width:{0}}.{precision:1}}'&f-string: invalid conversion characterzf'{"s"!{"r"}}')decimalZDecimalrr ror)r rZ precisionr<err_msgr r r !test_format_specifier_expressionsDs: "&& &z*TestCase.test_format_specifier_expressionscCs.Gddd}|}||d|ddS)Nc@seZdZddZddZdS)z*TestCase.test_side_effect_order..XcSs d|_dS)Nrrr%r r r r&lsz3TestCase.test_side_effect_order..X.__init__cSs|jd7_t|jS)Nr3)rrrr r r rnsz5TestCase.test_side_effect_order..X.__format__N)rrrr&rr r r r rksrrrz1 2rs)r rr r r r test_side_effect_orderjszTestCase.test_side_effect_ordercCs(|tdgd|tdddgdS)Nz&f-string: empty expression not allowed)zf'{}'z f'{ }'f' {} 'zf'{!r}'zf'{ !r}'z f'{10:{ }}'zf' { } 'z f'''{ }'''zf'{!x}'z f'{ !xr}'zf'{!x:}'z f'{!x:a}'z f'{ !xr:}'z f'{ !xr:a}'zf'{!}'zf'{:}'zf'{!'zf'{!s:'zf'{:'zf'{:x'z'invalid non-printable character U\+00A0u f'''{ }''' rnr%r r r test_missing_expressionus"z TestCase.test_missing_expressioncCsR|ddtrdnd}|t|ddg|tddg|tdd gdS) N)r4z(3,)rrzf'{,}'rz f'{3)+(4}'z!EOL while scanning string literalzf'{ }'rrr ror rr r r test_parens_in_expressionssz#TestCase.test_parens_in_expressionscCs|dd|dd|dd|ddd|dddd|ddd|dd|d d |d d |ddd |dddd |ddd |dd|d d |d d |ddd |dddd |ddd |dd|ddd |dddd |ddd |d d |d d |d d |dd|dd|dd|ddd|dddd|ddd|dd|dd|dd|ttd}Wdn1s00Y||d|ddd|dddd}|dd|d|d|d|d|dddS)N z\tr2z2 r4z2 3z 3uΔz\u0394u2Δu2Δ3uΔ3z \U00000394rrz\x20z2 z2 3z 3z f'\{6*7}'z\42\*Zspam&z\Nz\Nspamz\&)rZ assertWarnsDeprecationWarningr )r r<Z AMPERSANDr r r test_backslashes_in_string_partsX                    (  z(TestCase.test_backslashes_in_string_partcCs|tdgddS)Nzi\(unicode error\) 'unicodeescape' codec can't decode bytes in position .*: malformed \\N character escape)zf'\N'zf'\N{'z f'\N{GREEK CAPITAL LETTER DELTA'z'\N'z'\N{'z'\N{GREEK CAPITAL LETTER DELTA'rnr%r r r %test_misformed_unicode_character_namesz.TestCase.test_misformed_unicode_character_namecCs|tdgddS)Nz3f-string expression part cannot include a backslash)z f'{\'a\'}'zf'{\t3}'zf'{\}'z rf'{\'a\'}'z rf'{\t3}'zrf'{\}'zrf'{"\N{LEFT CURLY BRACKET}"}'zf'{\n}'rnr%r r r &test_no_backslashes_in_expression_partsz/TestCase.test_no_backslashes_in_expression_partcCs4|dd|dd|dd|dddS)Nz{1+1}z{1+1rsr%r r r test_no_escapes_for_bracess   z#TestCase.test_no_escapes_for_bracescCs |dd|dddS)Nrrr57rsr%r r r test_newlines_in_expressionssz%TestCase.test_newlines_in_expressionscsxd|fdddd|fddddd|fd dddd tr`d nd }|t|d gdS)NrTcs|SNr r!r r r rrz&TestCase.test_lambda..8z'88888'cs|Srr rrr r rr10z '88888' cs|Srr rrr r rrz 88888 rrzf'{lambda x:x}'rrr rr test_lambdaszTestCase.test_lambdacCs4dd}|d}|t|d|t|ddS)Ncssd|dVdVdS)Nzy:r2r rr r r fn#szTestCase.test_yield..fnr'rK)rnext)r rrhr r r test_yield szTestCase.test_yieldcCs>dd}|d}t|}||dd||dddS)Nc3sdfddVVdS)Nx:cs|Srr rrr r r-rz6TestCase.test_yield_send..fn..r rr rr r,sz$TestCase.test_yield_send..fnrzr'(stringzx:string)rrsend)r rrhZ the_lambdar r r test_yield_send+s zTestCase.test_yield_sendcCst|dd|dd|dd|dd|dd|dd|dd|dddS)Nr zeric'szxeric"syzxeric"szeric"syrsr%r r r +test_expressions_with_triple_quoted_strings4sz4TestCase.test_expressions_with_triple_quoted_stringscCsd}d}|||d|d||d||d|d|||dd|d|d|d |d||dd ||d|dd |d|d|d d dS)Nbr~Z98abcrZX98abcZ98XabcZ98abcXYZX98YabcZX98abcYZ98XabcYZZX98YabcZrs)r r r!r r r test_multiple_vars@szTestCase.test_multiple_varscCs0dd}||dd||dddS)Ncsfdd}|S)Ncs dS)Nrr r rr r innerQsz3TestCase.test_closure..outer..innerr )r rr rr outerPs z$TestCase.test_closure..outerZ987zx:987r5zx:7rs)r rr r r test_closureOszTestCase.test_closurecs<dfdd}||dddd}||ddddS) Nr2csd||SNx=r )r rrr r rgZsz"TestCase.test_arguments..ffoorzz x=foofoo barz x= 20rs)r rgr r rr test_argumentsXs  zTestCase.test_argumentscCsd}|d|ddS)N{v:zv:123rs)r r<r r r test_localsaszTestCase.test_localscCs8|tdtWdn1s*0YdS)Nr)rv NameErrorr<r%r r r test_missing_variablees zTestCase.test_missing_variablecCsfGddd}||dd||d||d|dd|dddS)Nc@seZdZddZdS)z,TestCase.test_missing_format_spec..OcSs |sdS|S)N*r rr r r rksz7TestCase.test_missing_format_spec..O.__format__Nrr r r r Ojsrr rr43rs)r rr r r test_missing_format_specis z!TestCase.test_missing_format_speccCs||dtd|dtdd}|dtd|d|dtd|dtd|d|dtdS) Ng:zg:global variablezg:'global variable'local variable l:z"g:global variable l:local variablez$g:global variable l:'local variable'zmodule 'unittest' from)ra_globalassertInunittest)r a_localr r r test_globalws zTestCase.test_globalcCsrd}|d|d|d|dd}|d|d|d|d|d|d|d|ddS) Nzreally a localrzg:really a localzg:'really a local'rrz!g:really a local l:local variablez#g:really a local l:'local variable'rs)r rrr r r test_shadowed_globals zTestCase.test_shadowed_globalcCsdd}||dddS)NcSs dt|Srrrr r r rszTestCase.test_call..foorzzx=10rs)r rr r r test_callszTestCase.test_callcCs0d}|ddd||dddS)NrTrr4Z000Z555rs)r r!r r r test_nested_fstringsszTestCase.test_nested_fstringscCs:gd}dd|D}tr dnd}|t|||dS)N)zfu''zuf''zFu''zfU''zUf''zuF''zufr''zurf''zfur''zfru''zrfu''zruf''zFUR''zFur''zfb''zfB''zFb''zFB''zbf''zbF''zBf''zBF''cSsg|]}|ddqS)r")replace).0Zcaser r r rz9TestCase.test_invalid_string_prefixes..rzunexpected EOF while parsing)rr ro)r Zsingle_quote_casesZdouble_quote_cases error_msgr r r test_invalid_string_prefixessz%TestCase.test_invalid_string_prefixescCst|dd|dd|dd|dd|ddddDd|ddddDddS) Nr4rzexpr=cSsi|]\}}||qSr r rr r!r r r rz9TestCase.test_leading_trailing_spaces..))r3r2z expr={1: 2}cSsi|]\}}||qSr r rr r r rrrsr%r r r test_leading_trailing_spacessz%TestCase.test_leading_trailing_spacescCsP|ddkd|ddkd|ddkd|ddkdddS)Nr4r'Truez.3ZTrursr%r r r test_not_equalszTestCase.test_not_equalcCs|ddkddS)Nrr3Falsersr%r r r test_equal_equalszTestCase.test_equal_equalcCs|ddd|ddd|ddd|ddd|dd|dd|dd|dd|ddd |td gd |td gd dS)NgQ @z10.10z 3.14z 3.14 rqz'a'za!rz!<10.10z 3.14!!!!!!r)zf'{3!g}'zf'{3!A}'zf'{3!3}'zf'{3!G}'zf'{3!!}'zf'{3!:}'z f'{3! s}'r)z f'{x!s{y}}'z f'{3!ss}'z f'{3!ss:}'z f'{3!ss:s}'rr%r r r test_conversionss zTestCase.test_conversionscCs|tdgddS)Nr)zf'' = 3z f'{0}' = xz f'{x}' = xrnr%r r r test_assignmentszTestCase.test_assignmentcCs|tdddgdS)Nrzdel f''z del '' f''rnr%r r r test_dels zTestCase.test_delcCsp|tdgd|tdgd|dd|dd|dddd |d ddd dS) Nz#f-string: single '}' is not allowed)zf'{{}'zf'{{}}}'zf'}'zf'x}'zf'x}x'z f'\u007b}'z f'{3:}>10}'z f'{3:}}>10}'r)z f'{3:{{>10}'zf'{3'zf'{3!'zf'{3:'zf'{3!s'zf'{3!s:'z f'{3!s:3'zf'x{'zf'x{x'zf'{x'zf'{3:s'zf'{{{'zf'{{}}{'zf'{'rxryr4z>10z }}}}}}}}}3r2z {{{{{{{{{2)r rorr%r r r test_mismatched_bracess zTestCase.test_mismatched_bracescsdfdd}fdd}fdd}|dd|d d |dd|d d |dd |d d dS) Ncs$d}|rd}nd}||dSNrr3r2rsr Zexpectedflagr%r r test_fstring0s z2TestCase.test_if_conditional..test_fstringcs$d}|rd}nd}||dSrrsrr%r r test_concat_empty8s z7TestCase.test_if_conditional..test_concat_emptycs(d}d|rd}nd}||dS)Nrrrr3r2rsrr%r r test_concat_non_empty@s  z;TestCase.test_if_conditional..test_concat_non_emptyrr2rrr3r )r rrrr r%r test_if_conditional+s        zTestCase.test_if_conditionalcCsFd}||d||d||d||ddS)Ntestz'test'rsrr r r test_empty_format_specifierQs z$TestCase.test_empty_format_specifiercCspddd}d}||dd||dd|||d|dj|dd|dj|dddS) NrZinteger)rqrrrqz{d[a]})rz{d[0]})rr)r rrqr r r test_str_format_differencesXsz$TestCase.test_str_format_differencescCs(|tdddg|tdddgdS)NZ unsupportedzf'{(lambda: 0):x}'z f'{(0,):x}'zUnknown format codez f'{1000:j}')r r{rkr%r r r test_errorscszTestCase.test_errorsz6The old parser only supports as the filenamec Cstd}tj|d}t|d}|dWdn1s@0Yt|dd\}}}Wdn1sp0Y||dd|dS)Nzt.pywzf"{a b}"ascii)ZPYTHONIOENCODINGbackslashreplace) rospathjoinopenwriterrencode)r cwdZ file_pathrgr\stderrr r r test_filename_in_syntaxerrorns (*z%TestCase.test_filename_in_syntaxerrorcCs,tdD]}|d|dt|qdS)Nizi:)rrr)r rr r r test_loopys zTestCase.test_loopcCsXdddd}||dd||dd||dd||dddS)NZdquoteZsquoter)rrrrrrrsrr r r test_dict}szTestCase.test_dictcCs$|tdd|tdddS)Nzf"\ "rzf"\ ")rr r%r r r test_backslash_charszTestCase.test_backslash_charcsd|ddt|ddt|ddt|ddt|ddtd|dddtd|ddtd|dddttd|dddttd|dddttdd|d d d d d }|d|dd|ddd|dddddd}|d|dd|dd d|ddkd |ddkd!|ddkd!|ddkd |d"d"|d"|d#d"|d#|d$d$d%|d&d'fd(d)}d||d*d+d,|d*||d-d+d*|d-Gd.d/d/}|d0|d1|d0|d1|d0|d2|d0|d3d4|d0|d5d6|d0|dd7|ttd8d9|d:d;d:td;|d<d;dd;d>td;dS)?NzA stringrzx =g @z.2frz^20 z3*x+15=r4raz 3*x+15=42gffffff?@utenπ=u tenπ=31.40u"Σ"=uΣu "Σ"='Σ'z3.1415=go! @z.1fz*^20z*****3.1415=3.1*****uπu alpha α pi=u ω omegaualpha α pi='π' ω omegaz 3 =z 3 =3rr3rr5rT==10 20cs }||Srr )rqZoldxrr r rgsz)TestCase.test_debug_conversion..fz3=)rqrr'c@seZdZddZddZdS)z)TestCase.test_debug_conversion..CcSs d|S)NzFORMAT-r )r rr r r rsz4TestCase.test_debug_conversion..C.__format__cSsdS)NZREPRr r%r r r __repr__sz2TestCase.test_debug_conversion..C.__repr__N)rrrrrr r r r CsrzC()=zC()=REPRz C()=FORMAT-rrz C()=FORMAT- r z C()=FORMAT-xzC()=********REPR********zf'{C=]'rzXx=rzXx =zXx= zXx = )rreprrrrrvror )r ttenπpirgrr rr test_debug_conversionsn"""        zTestCase.test_debug_conversioncCs6d}||dd|d}d||ddS)Nrrrrzrrsrr r r test_walrusszTestCase.test_walruscCsJtr dnd}|t|tdddWdn1s<0YdS)Nrrz f'{a $ b}'?r*)rrror-rr r r !test_invalid_syntax_error_messagesz*TestCase.test_invalid_syntax_error_messagecCsBtd}|t|ddWdn1s40YdS)NzCannot specify ',' with ','.r3z,,reescaperrkr rr r r (test_with_two_commas_in_format_specifiers z1TestCase.test_with_two_commas_in_format_specifiercCsBtd}|t|ddWdn1s40YdS)NzCannot specify '_' with '_'.r3__rr!r r r ,test_with_two_underscore_in_format_specifier s z5TestCase.test_with_two_underscore_in_format_specifiercCsBtd}|t|ddWdn1s40YdS)N Cannot specify both ',' and '_'.r3z,_rr!r r r 8test_with_a_commas_and_an_underscore_in_format_specifiers zATestCase.test_with_a_commas_and_an_underscore_in_format_specifiercCsBtd}|t|ddWdn1s40YdS)Nr%r3z_,rr!r r r 7test_with_an_underscore_and_a_comma_in_format_specifiers z@TestCase.test_with_an_underscore_and_a_comma_in_format_specifierN)Irrrr r"r1rJrPrSrZskipIfrrWr^r`rerjrlrmrprtrurwr|rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r rrrrrr"r$r&r'r r r r rs4-  B  25  #& (7            !%&    h r__main__)r+rrrrrZ test.supportrrZtest.support.script_helperrrrrmainr r r r  s*