ɷې/SrSSKrSSKrSSKrSSKrSSKrSSKrSrSr"SS\R5r \ S:Xa\R"5 gg)aTest correct treatment of various string literals by the parser. There are four types of string literals: 'abc' -- normal str r'abc' -- raw str b'xyz' -- normal bytes br'xyz' | rb'xyz' -- raw bytes The difference between normal and raw strings is of course that in a raw string, \ escapes (while still used to determine the end of the literal) are not interpreted, so that r'\x00' contains four characters: a backslash, an x, and two zeros; while '\x00' contains a single character (code point zero). The tricky thing is what should happen when non-ASCII bytes are used inside literals. For bytes literals, this is considered illegal. But for str literals, those bytes are supposed to be decoded using the encoding declared for the file (UTF-8 by default). We have to test this with various file encodings. We also test it with exec()/eval(), which uses a different code path. This file is really about correct treatment of encodings and backslashes. It doesn't concern itself with issues like single vs. double quotes or singly- vs. triply-quoted strings: that's dealt with elsewhere (I assume). Na# coding: %s a = 'x' assert ord(a) == 120 b = '\x01' assert ord(b) == 1 c = r'\x01' assert list(map(ord, c)) == [92, 120, 48, 49] d = '\x81' assert ord(d) == 0x81 e = r'\x81' assert list(map(ord, e)) == [92, 120, 56, 49] f = '\u1881' assert ord(f) == 0x1881 g = r'\u1881' assert list(map(ord, g)) == [92, 117, 49, 56, 56, 49] h = '\U0001d120' assert ord(h) == 0x1d120 i = r'\U0001d120' assert list(map(ord, i)) == [92, 85, 48, 48, 48, 49, 100, 49, 50, 48] c[U/5$)N)bytes)is @/opt/alt/python313/lib64/python3.13/test/test_string_literals.pybyter<s !:c\rSrSrSrSrSrSrSrSr Sr S r S r S r S rS rSrSrSrSrSSjrSrSrSrSrSrSrSrg) TestLiterals@c[RSSUl[R"5Ul[RR SUR 5 g)Nr)syspath save_pathtempfilemkdtemptmpdirinsertselfs rsetUpTestLiterals.setUpBs7!&&(  4;;'rc|UR[RSS&[R"UR SS9 g)NT) ignore_errors)rr rshutilrmtreerrs rtearDownTestLiterals.tearDownGs%nn  dkk6rcl[H*nUS:XaM SUs=::aS::aMO [U55e g)N  ~)TEMPLATErepr)rcs r test_templateTestLiterals.test_templateKs.A9qC 8a 8/rczUR[S5S5 UR[S5[S55 UR[S5[S55 UR[S5[S55 UR[S5[S55 UR[S 5[S 55 UR[S 5[S 55 UR[S 5[S 55 UR[S5[S 55 g)Nz 'x' xz '\x01' z '' z '\x81' u '' z '\u1881' u 'ᢁ' z '\U0001d120' u '𝄠'  assertEqualevalchrrs rtest_eval_str_normal!TestLiterals.test_eval_str_normalQs k*C0 o.A7 n-s1v6 o.D : n-s4y9 /0#f+> ./V= 34c'lC 23S\BrcUR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S 5 UR[[S 5 UR[[S 5 UR[[S 5 UR[[S 5 UR[[S5 g)Nz '\x' z '\x0' z '\u' z '\u0' z '\u00' z '\u000' z '\U' z '\U0' z '\U00' z '\U000' z '\U0000' z '\U00000' z '\U000000' z '\U0000000'  assertRaises SyntaxErrorr/rs rtest_eval_str_incomplete%TestLiterals.test_eval_str_incomplete\s +t]; +t^< +t]; +t^< +t_= +t-=> +t]; +t^< +t_= +t-=> +t->? +t-?@ +t-@A +t-ABrc [SS5HSnUS;aM UR[5 UR[ SU-5S[ U5-5 SSS5 MU [ R"SS9n[ R"S[S 9 [ S 5 SSS5 UR[W5S5 UR[US R5S 5 URUS RS 5 URUS RS5 [ R"SS9n[ R"S[S 9 UR[5n[ S 5 SSS5 WR nSSS5 URU/5 URWR"S 5 URURS 5 URURS5 URUR$S5 [ R"SS9n[ R"S[S 9 UR[5n[ S5 SSS5 WR nSSS5 UR[U5S5 URUS R&[5 UR)[US R5S5 URUS RS 5 g!,(df  GM=f!,(df  GN=f!,(df  GN=f!,(df  GN=f!,(df  N=f!,(df  N=f)Nr)s "'01234567NU\abfnrtuvxz'\%c'\Trecordalwayscategoryz ''' \z'''rinvalid escape sequence '\z'errorz'\e' $zinvalid escape sequence)range assertWarns SyntaxWarningr.r/r0warningscatch_warnings simplefilterlenstrmessagefilenamelinenor5r6 exceptionmsgoffsetr@ assertRegexrbwcmexcs rtest_eval_str_invalid_escape)TestLiterals.test_eval_str_invalid_escapels}q#A66!!-0  hl!3TCF]C10  $ $D 1Q  ! !(] C  2 Q# QqT\\*,KL 1 3 1a(  $ $D 1Q  ! !'M B"";/2]#0,,C 2 B "AB z2 Q' Q' $ $D 1Q  ! !(] C"";/2Y0,,C 2 Q# 1 6 QqT\\*,EF 1 3A102 10/2 10/2 1s_+L8%L:/L;) L)5L;'/M M "M L  L&) L8 3L;; M  M M M,c[SS5HHnUR[5 UR[ SU-5[ U55 SSS5 MJ [ R"SS9n[ R"S[S9 [ S5 SSS5 UR[W5S 5 UR[US R5S 5 URUS RS 5 URUS RS 5 [ R"SS9n[ R"S[S9 UR[5n[ S5 SSS5 WR nSSS5 URU/5 URWR"S 5 URURS 5 URURS 5 URUR$S 5 g!,(df  GM =f!,(df  GN=f!,(df  N=f!,(df  N=f)Nz'\%o'Tr<r>r?z ''' \407'''r)r$invalid octal escape sequence '\407'rBrCrD)rErFrGr.r/r0rHrIrJrKrLrMrNrOr5r6rPrQrRrrrVrWrXs r"test_eval_str_invalid_octal_escape/TestLiterals.test_eval_str_invalid_octal_escapesuf%A!!-0  hl!3SV<10& $ $D 1Q  ! !(] C  !2 Q# QqT\\*@ B 1 3 1a(  $ $D 1Q  ! !'M B"";/2_%0,,C 2 B "IJ z2 Q' Q'+102 10/2 1s;(H -%H//H? H.*H? H  H+. H< 8H?? I cD[R"SS9n[R"S[S9 UR [ 5n[ S5 SSS5 WRnSSS5 URW/5 URWRS5 URURS5 URURS5 URURS 5 [R"SS9n[R"S[S9 UR [ 5n[ S 5 SSS5 WRnSSS5 URU/5 URURS5 URURS5 URURS5 URURS 5 g!,(df  GN=f!,(df  GN=f!,(df  N=f!,(df  N=f) NTr<rDr?z&"'''''''''''''''''''''invalid\ Escape"zinvalid escape sequence '\ 'rBr)z"''Incorrect \ logic?") rHrIrJrGr5r6r/rPr.rQrNrOrR)rrVrWrXs r)test_invalid_escape_locations_with_offset6TestLiterals.test_invalid_escape_locations_with_offsets  $ $D 1Q  ! !'M B"";/2@A0,,C 2 B "AB z2 Q' R(  $ $D 1Q  ! !'M B"";/2010,,C 2 B "AB z2 Q' R(%0/2 10/2 1sG/G. GG./H1 H=H G+ &G.. G= H H Hc2UR[S5S5 UR[S5S5 UR[S5[S55 UR[S5S5 UR[S 5[S 55 UR[S 5S 5 UR[S 5[S55 UR[S5S5 UR[S5[S55 g)Nz r'x' r(z r'\x01' \x01z r'' r)z r'\x81' z\x81u r'' r*z r'\u1881' z\u1881u r'ᢁ' r+z r'\U0001d120' z \U0001d120u r'𝄠' r,r-rs rtest_eval_str_rawTestLiterals.test_eval_str_raws l+S1 ./> o.A7 ./> o.D : 01>B /0#f+> 457IJ 34c'lCrc UR[S5S5 UR[S5[S55 UR[S5[S55 UR[S5[S55 UR[[S5 UR[S 5S 5 UR[[S 5 UR[S 5S 5 UR[[S5 g)Nz b'x' xz b'\x01' r)z b'' z b'\x81' r*u b'' br'\u1881' \u1881u b'ᢁ'  br'\U0001d120' \U0001d120u b'𝄠' r.r/rr5r6rs rtest_eval_bytes_normal#TestLiterals.test_eval_bytes_normals l+T2 ./a9 o.Q8 ./d< +t_= 124DE +t->? 568LM +t-BCrcpUR[[S5 UR[[S5 g)Nz b'\x' z b'\x0' r4rs rtest_eval_bytes_incomplete'TestLiterals.test_eval_bytes_incompletes& +t^< +t_=rc [SS5HTnUS;aM UR[5 UR[ SU-5S[ U/5-5 SSS5 MV [ R"SS9n[ R"S[S 9 [ S 5 SSS5 UR[W5S5 UR[US R5S 5 URUS RS 5 URUS RS5 [ R"SS9n[ R"S[S 9 UR[5n[ S 5 SSS5 WR nSSS5 URU/5 URWR"S 5 URURS 5 URURS5 g!,(df  GM=f!,(df  GNu=f!,(df  N=f!,(df  N=f)Nr)r:s "'01234567\abfnrtvxzb'\%c'\Tr<r>r?z b''' \z'''rrArBrCrDrErFrGr.r/rrHrIrJrKrLrMrNrOr5r6rPrQrTs rtest_eval_bytes_invalid_escape+TestLiterals.test_eval_bytes_invalid_escapesq#A33!!-0  i!m!4eeQCj6HI10  $ $D 1Q  ! !(] C  2 Q# QqT\\*,KL 1 3 1a(  $ $D 1Q  ! !'M B"";/2^$0,,C 2 B "AB z2 Q''102 10/2 1s;,G99%H ;/H/* H6H/9 H H H, (H// H=c p[SS5HLnUR[5 UR[ SU-5[ US-/55 SSS5 MN [ R"SS9n[ R"S[S9 [ S 5 SSS5 UR[W5S 5 UR[US R5S 5 URUS RS 5 URUS RS5 [ R"SS9n[ R"S[S9 UR[5n[ S 5 SSS5 WR nSSS5 URU/5 URWR"S 5 URURS 5 URURS5 g!,(df  GM=f!,(df  GNu=f!,(df  N=f!,(df  N=f)Nr\r]zb'\%o'Tr<r>r?z b''' \407'''r)rr^rBrCrDryr_s r$test_eval_bytes_invalid_octal_escape1TestLiterals.test_eval_bytes_invalid_octal_escapesuf%A!!-0  i!m!4eQYK6HI10& $ $D 1Q  ! !(] C ! "2 Q# QqT\\*@ B 1 3 1a(  $ $D 1Q  ! !'M B"";/2%&0,,C 2 B "IJ z2 Q')102 10/2 1s;,G11%H3/H'" H.H'1 H  H H$ H'' H5c8UR[S5S5 UR[S5S5 UR[S5S5 UR[S5S5 UR[S5[S55 UR[S 5[S55 UR[S 5S 5 UR[S 5S 5 UR[[S 5 UR[[S5 UR[S5S5 UR[S5S5 UR[[S5 UR[[S5 UR[S5S5 UR[S5S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 UR[[S5 g)Nz br'x' rlz rb'x' z br'\x01' \x01z rb'\x01' z br'' r)z rb'' z br'\x81' s\x81z rb'\x81' u br'' u rb'' rmrnz rb'\u1881' u br'ᢁ' u rb'ᢁ' rorpz rb'\U0001d120' u br'𝄠' u rb'𝄠' z bb'' z rr'' z brr'' z bbr'' z rrb'' z rbb'' rqrs rtest_eval_bytes_raw TestLiterals.test_eval_bytes_raw s m,d3 m,d3 /0.A /0.A ./a9 ./a9 /0.A /0.A +t-=> +t-=> 124DE 124DE +t-?@ +t-?@ 568LM 568LM +t-CD +t-CD +t\: +t\: +t]; +t]; +t]; +t];rc~UR[S5S5 UR[S5S5 UR[S5S5 UR[[S5 UR[[S5 UR[[S5 UR[[S 5 g) Nz u'x' r(u U'ä' äu u'ä' z ur'' z ru'' z bu'' z ub'' )r.r/r5r6rs rtest_eval_str_uTestLiterals.test_eval_str_u's l+S1 /0$7 PQSWX +t\: +t\: +t\: +t\:rcUR[S5S5 UR[S5S5 UR[S5S5 UR[S5S5 UR[S 5S 5 g) Nz B'x' rlz R'\x01' rhz BR'\x01' rz F'{1+1}' rCz U'\U0001d120' u𝄠)r.r/rs rtest_uppercase_prefixes$TestLiterals.test_uppercase_prefixes0sq l+T2 ./9 /0(; ./C5: 45}ErctSURSS5-n[RRURUS-5n[ USUS9nUR [U-5 UR U5 UR5 [U5 [RU g!UR5 f=f)Nxx_-_z.pyrV)encoding) replaceosrjoinropenwriter"close __import__r modules)rrextramodnamefnfs rcheck_encodingTestLiterals.check_encoding7s(**344 WW\\$++w 7 S8 ,  GGHx' ( GGEN GGI7 KK  GGIs )B%%B7c,SnURSU5 g)Nu#z = 'ሴ'; assert ord(z) == 0x1234 utf-8rrrs rtest_file_utf_8TestLiterals.test_file_utf_8Cs9 GU+rcLSnUR[URSU5 g)Nub'€' r)r5r6rrs rtest_file_utf_8_error"TestLiterals.test_file_utf_8_errorGs! +t':':GUKrc&URS5 g)Nrrrs rtest_file_utf8TestLiterals.test_file_utf8Ks G$rc&URS5 g)Nz iso-8859-1rrs rtest_file_iso_8859_1!TestLiterals.test_file_iso_8859_1Ns L)rc&URS5 g)Nzlatin-1rrs rtest_file_latin_1TestLiterals.test_file_latin_1Qs I&rc&URS5 g)Nlatin9rrs rtest_file_latin9TestLiterals.test_file_latin9Ts H%r)rrN))__name__ __module__ __qualname____firstlineno__rrr%r1r7rYr`rerirrrurzr~rrrrrrrrrr__static_attributes__rrr r @s|( 79 CC $4L(2). D D>(2(0<4;F !,L%*'&rr __main__) __doc__rr rrunittestrHr"rTestCaser rmainrrrrsW:  ,U&8$$U&p z MMOr