+
    Bi<                         R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RItRtR t ! R R]P                  4      t
]R8X  d   ]P                  ! 4        R# R# )a  Test 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                     \        V .4      # )N)bytes)is   &0/usr/lib/python3.14/test/test_string_literals.pybyter   <   s    !:    c                      a  ] tR t^@t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tRR ltR tR tR tR tR tR tRtV tR# )TestLiteralsc                    \         P                  R ,          V n        \        P                  ! 4       V n        \         P                  P                  ^ V P
                  4       R# )NNNN)syspath	save_pathtempfilemkdtemptmpdirinsertselfs   &r   setUpTestLiterals.setUpB   s7    !&&(4;;'r   c                    V P                   \        P                  R &   \        P                  ! V P
                  RR7       R# )r   T)ignore_errorsN)r   r   r   shutilrmtreer   r   s   &r   tearDownTestLiterals.tearDownG   s%    nndkk6r   c                t    \          F-  pVR 8X  d   K  RTu;8:  d
   R8:  d   K  M Q \        V4      4       h	  R# )
 ~N)TEMPLATErepr)r   cs   & r   test_templateTestLiterals.test_templateK   s0     A9qC8a8/ r   c                |   V P                  \        R 4      R4       V P                  \        R4      \        ^4      4       V P                  \        R4      \        ^4      4       V P                  \        R4      \        ^4      4       V P                  \        R4      \        ^4      4       V P                  \        R4      \        R4      4       V P                  \        R4      \        R4      4       V P                  \        R	4      \        R
4      4       V P                  \        R4      \        R
4      4       R# )z 'x' xz '\x01' z '' z '\x81' u    '' z
 '\u1881'   u    'ᢁ' z '\U0001d120'   u    '𝄠' NassertEqualevalchrr   s   &r   test_eval_str_normal!TestLiterals.test_eval_str_normalQ   s    k*C0o.A7n-s1v6o.D	:n-s4y9/0#f+>./V=34c'lC23S\Br   c                   V P                  \        \        R 4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R	4       V P                  \        \        R
4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       R# )z '\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' NassertRaisesSyntaxErrorr,   r   s   &r   test_eval_str_incomplete%TestLiterals.test_eval_str_incomplete\   s   +t];+t^<+t];+t^<+t_=+t-=>+t];+t^<+t_=+t-=>+t->?+t-?@+t-@A+t-ABr   c           
        \        ^^4       Fd  pVR9   d   K  V P                  \        4      ;_uu_ 4        V P                  \	        RV,          4      R\        V4      ,           4       RRR4       Kf  	  \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       \	        R	4       RRR4       V P                  \        X4      ^4       V P                  \        V^ ,          P                  4      R
4       V P                  V^ ,          P                  R4       V P                  V^ ,          P                  ^4       \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       V P                  \        4      ;_uu_ 4       p\	        R	4       RRR4       XP                   pRRR4       V P                  V. 4       V P                  XP"                  R4       V P                  VP                  R4       V P                  VP                  ^4       V P                  VP$                  ^4       \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       V P                  \        4      ;_uu_ 4       p\	        R4       RRR4       XP                   pRRR4       V P                  \        V4      ^4       V P                  V^ ,          P&                  \        4       V P)                  \        V^ ,          P                  4      R4       V P                  V^ ,          P                  R4       R#   + '       g   i     EKm  ; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL	; i  + '       g   i     EL	; i)   s   
"'01234567NU\abfnrtuvxz'\%c'\NTrecordalwayscategoryz	'''
\z'''"\z" is an invalid escape sequence. Such sequences will not work in the future. Did you mean "\\z"? A raw string is also an option.<string>errorW"\z" is an invalid escape sequence. Did you mean "\\z"? A raw string is also an option.z'\e' $zinvalid escape sequence)rangeassertWarnsSyntaxWarningr+   r,   r-   warningscatch_warningssimplefilterlenstrmessagefilenamelinenor2   r3   	exceptionmsgoffsetr=   assertRegexr   bwcmexcs   &    r   test_eval_str_invalid_escape)TestLiterals.test_eval_str_invalid_escapel   s   q#A66!!-00  hl!3TCF]C 10  $$D11Q!!(]C 2 	Q#QqT\\* -P 	Q 	1
31a($$D11Q!!'MB"";//2]# 0,,C	 2
 	B #P 	Qz2Q'Q' $$D11Q!!(]C"";//2Y 0,,C	 2
 	Q#16QqT\\*,EF1
3G 100 211 0// 211  0// 211s_   3M((M=0:N%*N	6N%3:O-N9	9O(M:=N	N"	N%%N6	9O
	OO	c           	     *   \        R R4       FT  pV P                  \        4      ;_uu_ 4        V P                  \	        RV,          4      \        V4      4       RRR4       KV  	  \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       \	        R4       RRR4       V P                  \        X4      ^4       V P                  \        V^ ,          P                  4      R	4       V P                  V^ ,          P                  R
4       V P                  V^ ,          P                  ^4       \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       V P                  \        4      ;_uu_ 4       p\	        R4       RRR4       XP                   pRRR4       V P                  V. 4       V P                  XP"                  R4       V P                  VP                  R
4       V P                  VP                  ^4       V P                  VP$                  ^4       R#   + '       g   i     EKK  ; i  + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L; i)      z'\%o'NTr9   r;   r<   z'''
\407'''"\407" is an invalid octal escape sequence. Such sequences will not work in the future. Did you mean "\\407"? A raw string is also an option.r?   r@   a"\407" is an invalid octal escape sequence. Did you mean "\\407"? A raw string is also an option.)rB   rC   rD   r+   r,   r-   rE   rF   rG   rH   rI   rJ   rK   rL   r2   r3   rM   rN   rO   r   r   rS   rT   rU   s   &    r   "test_eval_str_invalid_octal_escape/TestLiterals.test_eval_str_invalid_octal_escape   s   uf%A!!-00  hl!3SV< 10 & $$D11Q!!(]C! 2 	Q#QqT\\*R	S 	1
31a($$D11Q!!'MB"";//2_% 0,,C	 2
 	B #Z 	[z2Q'Q'1 100 211 0/ 21s;   ,I(I :JI/	&JII,	/I?:JJ	c                   \         P                  ! R R7      ;_uu_ 4       p\         P                  ! R\        R7       \	        R4       RRR4       V P                  \        X4      ^4       V P                  \        V^ ,          P                  4      R4       V P                  V^ ,          P                  R4       V P                  V^ ,          P                  ^4       \         P                  ! R R7      ;_uu_ 4       p\         P                  ! R\        R7       \	        R4       RRR4       V P                  \        V4      ^4       V P                  \        V^ ,          P                  4      R4       V P                  V^ ,          P                  R4       V P                  V^ ,          P                  ^4       R#   + '       g   i     EL|; i  + '       g   i     L; i)	Tr9   r;   r<   z&"'''''''''''''''''''''invalid\ Escape"Nz"\ " is an invalid escape sequence. Such sequences will not work in the future. Did you mean "\\ "? A raw string is also an option.r?   z"''Incorrect \ logic?")rE   rF   rG   rD   r,   r+   rH   rI   rJ   rK   rL   )r   rS   s   & r   )test_invalid_escape_locations_with_offset6TestLiterals.test_invalid_escape_locations_with_offset   sN   $$D11Q!!(]C<= 2 	Q#QqT\\*<	= 	1
31a($$D11Q!!(]C,- 2 	Q#QqT\\*?	@ 	1
31a() 211 21s   (F;<(G;G	G	c                4   V P                  \        R 4      R4       V P                  \        R4      R4       V P                  \        R4      \        ^4      4       V P                  \        R4      R4       V P                  \        R4      \        ^4      4       V P                  \        R4      R4       V P                  \        R4      \        R4      4       V P                  \        R	4      R4       V P                  \        R
4      \        R4      4       R# )z r'x' r'   z	 r'\x01' z r'' z	 r'\x81' u    r'' z r'\u1881' u    r'ᢁ' r(   z r'\U0001d120' u	    r'𝄠' r)   N\x01z\x81z\u1881z
\U0001d120r*   r   s   &r   test_eval_str_rawTestLiterals.test_eval_str_raw   s    l+S1./>o.A7./>o.D	:01>B/0#f+>457IJ34c'lCr   c                "   V P                  \        R 4      R4       V P                  \        R4      \        ^4      4       V P                  \        R4      \        ^4      4       V P                  \        R4      \        ^4      4       V P                  \        \        R4       V P                  \        R4      R4       V P                  \        \        R4       V P                  \        R4      R4       V P                  \        \        R	4       R
# )z b'x'    xz	 b'\x01' z b'' z	 b'\x81' u    b''  br'\u1881' u    b'ᢁ'  br'\U0001d120' u	    b'𝄠' N   \u1881
   \U0001d120r+   r,   r   r2   r3   r   s   &r   test_eval_bytes_normal#TestLiterals.test_eval_bytes_normal   s    l+T2./a9o.Q8./d<+t_=124DE+t->?568LM+t-BCr   c                r    V P                  \        \        R 4       V P                  \        \        R4       R# )z b'\x' z b'\x0' Nr1   r   s   &r   test_eval_bytes_incomplete'TestLiterals.test_eval_bytes_incomplete   s&    +t^<+t_=r   c           
        \        ^^4       Fe  pVR9   d   K  V P                  \        4      ;_uu_ 4        V P                  \	        RV,          4      R\        V.4      ,           4       RRR4       Kg  	  \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       \	        R	4       RRR4       V P                  \        X4      ^4       V P                  \        V^ ,          P                  4      R
4       V P                  V^ ,          P                  R4       V P                  V^ ,          P                  ^4       \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       V P                  \        4      ;_uu_ 4       p\	        R	4       RRR4       XP                   pRRR4       V P                  V. 4       V P                  XP"                  R4       V P                  VP                  R4       V P                  VP                  ^4       R#   + '       g   i     EK@  ; i  + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L; i)r7   s   
"'01234567\abfnrtvxzb'\%c'   \NTr9   r;   r<   z
b'''
\z'''r>   r?   r@   rA   rB   rC   rD   r+   r,   r   rE   rF   rG   rH   rI   rJ   rK   rL   r2   r3   rM   rN   rQ   s   &    r   test_eval_bytes_invalid_escape+TestLiterals.test_eval_bytes_invalid_escape   s   q#A33!!-00  i!m!4eeQCj6HI 10  $$D11Q!!(]C  2 	Q#QqT\\* -P 	Q 	1
31a($$D11Q!!'MB"";//2^$ 0,,C	 2
 	B #P 	Qz2Q'- 100 211 0/ 21s;   4H;(I1:I7+I$	7I7;II!	$I4/I77J	c           
        \        R R4       F\  pV P                  \        4      ;_uu_ 4        V P                  \	        RV,          4      \        V^,          .4      4       RRR4       K^  	  \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       \	        R4       RRR4       V P                  \        X4      ^4       V P                  \        V^ ,          P                  4      R	4       V P                  V^ ,          P                  R
4       V P                  V^ ,          P                  ^4       \        P                  ! RR7      ;_uu_ 4       p\        P                  ! R\        R7       V P                  \        4      ;_uu_ 4       p\	        R4       RRR4       XP                   pRRR4       V P                  V. 4       V P                  XP"                  R4       V P                  VP                  R
4       V P                  VP                  ^4       R#   + '       g   i     EK7  ; i  + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L; i)rY   rZ   zb'\%o'NTr9   r;   r<   zb'''
\407'''r[   r?   r@   r\   ru   r]   s   &    r   $test_eval_bytes_invalid_octal_escape1TestLiterals.test_eval_bytes_invalid_octal_escape   s   uf%A!!-00  i!m!4eQYK6HI 10 & $$D11Q!!(]C!" 2 	Q#QqT\\* -R 	S 	1
31a($$D11Q!!'MB"";//2%& 0,,C	 2
 	B #R 	Sz2Q'- 100 211 0/ 21s;   4H2(I(:I."I	.I.2II	I+&I..I>	c                :   V P                  \        R 4      R4       V P                  \        R4      R4       V P                  \        R4      R4       V P                  \        R4      R4       V P                  \        R4      \        ^4      4       V P                  \        R4      \        ^4      4       V P                  \        R4      R4       V P                  \        R4      R4       V P                  \        \        R	4       V P                  \        \        R
4       V P                  \        R4      R4       V P                  \        R4      R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        R4      R4       V P                  \        R4      R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       R# )z br'x' rh   z rb'x' z
 br'\x01' z
 rb'\x01' z br'' z rb'' z
 br'\x81' z
 rb'\x81' u    br'' u    rb'' ri   z rb'\u1881' u	    br'ᢁ' u	    rb'ᢁ' rj   z rb'\U0001d120' u
    br'𝄠' u
    rb'𝄠' z bb'' z rr'' z brr'' z bbr'' z rrb'' z rbb'' N   \x01s   \x81rk   rl   rm   r   s   &r   test_eval_bytes_raw TestLiterals.test_eval_bytes_raw  s   m,d3m,d3/0.A/0.A./a9./a9/0.A/0.A+t-=>+t-=>124DE124DE+t-?@+t-?@568LM568LM+t-CD+t-CD+t\:+t\:+t];+t];+t];+t];r   c                   V P                  \        R 4      R4       V P                  \        R4      R4       V P                  \        R4      R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       V P                  \        \        R4       R	# )
z u'x' r'   u    U'ä'    äu    u'ä' z ur'' z ru'' z bu'' z ub'' N)r+   r,   r2   r3   r   s   &r   test_eval_str_uTestLiterals.test_eval_str_u2  s    l+S1/0$7PQSWX+t\:+t\:+t\:+t\:r   c                   V P                  \        R 4      R4       V P                  \        R4      R4       V P                  \        R4      R4       V P                  \        R4      ^ 4       V P                  \        R4      R4       R	# )
z B'x' rh   z	 R'\x01' rd   z
 BR'\x01' r|   z
 F'{1+1}' z U'\U0001d120' u   𝄠N)r+   r,   r   s   &r   test_uppercase_prefixes$TestLiterals.test_uppercase_prefixes;  sq    l+T2./9/0(;./C5:45}Er   c                   R VP                  RR4      ,           p\        P                  P                  V P                  VR,           4      p\        VRVR7      p VP                  \        V,          4       VP                  V4       VP                  4        \        V4       \        P                  V R#   TP                  4        i ; i)xx_-_z.pyrS   )encodingN)replaceosr   joinr   openwriter!   close
__import__r   modules)r   r   extramodnamefnfs   &&&   r   check_encodingTestLiterals.check_encodingB  s    (**344WW\\$++w7S8,	GGHx'(GGENGGI7KK  GGIs   -B5 5Cc                .    R pV P                  RV4       R# )u#   z = 'ሴ'; assert ord(z) == 0x1234
utf-8Nr   r   r   s   & r   test_file_utf_8TestLiterals.test_file_utf_8N  s    9GU+r   c                N    R pV P                  \        V P                  RV4       R# )u   b''
r   N)r2   r3   r   r   s   & r   test_file_utf_8_error"TestLiterals.test_file_utf_8_errorR  s!    +t':':GUKr   c                (    V P                  R 4       R# )r   Nr   r   s   &r   test_file_utf8TestLiterals.test_file_utf8V  s    G$r   c                (    V P                  R 4       R# )z
iso-8859-1Nr   r   s   &r   test_file_iso_8859_1!TestLiterals.test_file_iso_8859_1Y  s    L)r   c                (    V P                  R 4       R# )zlatin-1Nr   r   s   &r   test_file_latin_1TestLiterals.test_file_latin_1\  s    I&r   c                (    V P                  R 4       R# )latin9Nr   r   s   &r   test_file_latin9TestLiterals.test_file_latin9_  s    H%r   )r   r   N) )__name__
__module____qualname____firstlineno__r   r   r$   r.   r4   rV   r^   ra   re   rn   rq   rv   ry   r}   r   r   r   r   r   r   r   r   r   __static_attributes____classdictcell__)__classdict__s   @r   r	   r	   @   s     (
79	CC '4R(8).	D	D>(8(4<4;F
!,L%*'& &r   r	   __main__)__doc__r   r   r   r   unittestrE   r!   r   TestCaser	   r   main r   r   <module>r      sW   : 
 
    ,`&8$$ `&F	 zMMO r   