
    0hhg8                         S r SSKrSSKrSSKrSSKrSSKrSSKrSrS r " S S\R                  5      r
\S:X  a  \R                  " 5         gg)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                     [        U /5      $ )N)bytes)is    B/opt/python-3.13.8/usr/lib/python3.13/test/test_string_literals.pybyter   <   s    !:    c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSS jrS rS rS rS rS rS rSrg)TestLiterals@   c                     [         R                  S S  U l        [        R                  " 5       U l        [         R                  R                  SU R
                  5        g )Nr   )syspath	save_pathtempfilemkdtemptmpdirinsertselfs    r   setUpTestLiterals.setUpB   s7    !&&(4;;'r   c                 |    U R                   [        R                  S S & [        R                  " U R
                  SS9  g )NT)ignore_errors)r   r   r   shutilrmtreer   r   s    r   tearDownTestLiterals.tearDownG   s%    nndkk6r   c                 l    [          H*  nUS:X  a  M  SUs=::  a  S::  a  M  O   [        U5      5       e   g )N
 ~)TEMPLATErepr)r   cs     r   test_templateTestLiterals.test_templateK   s.     A9qC8a8/ r   c                 z   U R                  [        S5      S5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S	5      [        S
5      5        U R                  [        S5      [        S
5      5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        g )Nz 'x' xz '\x01'    z '' z '\x81'    u    '' z
 '\u1881'   u    'ᢁ' z '\U0001d120'   u    '𝄠' 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                    U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S	5        U R                  [        [        S
5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        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/   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           	         [        SS5       HS  nUS;   a  M  U R                  [        5         U R                  [	        SU-  5      S[        U5      -   5        S S S 5        MU     [        R                  " SS9 n[        R                  " S[        S	9  [	        S
5        S S S 5        U R                  [        W5      S5        U R                  [        US   R                  5      S5        U R                  US   R                  S5        U R                  US   R                  S5        [        R                  " SS9 n[        R                  " S[        S	9  U R                  [        5       n[	        S
5        S S S 5        WR                   nS S S 5        U R                  U/ 5        U R                  WR"                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR$                  S5        [        R                  " SS9 n[        R                  " S[        S	9  U R                  [        5       n[	        S5        S S S 5        WR                   nS S S 5        U R                  [        U5      S5        U R                  US   R&                  [        5        U R)                  [        US   R                  5      S5        U R                  US   R                  S5        g ! , (       d  f       GM  = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)Nr)      s   
"'01234567NU\abfnrtuvxz'\%c'\Trecordalwayscategoryz	'''
\z'''r   invalid escape sequence '\z'<string>   errorz'\e' $zinvalid escape sequence)rangeassertWarnsSyntaxWarningr.   r/   r0   warningscatch_warningssimplefilterlenstrmessagefilenamelinenor5   r6   	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  hl!3TCF]C 10  $$D1Q!!(]C 2 	Q#QqT\\*,KL1
31a($$D1Q!!'MB"";/2]# 0,,C	 2
 	B"ABz2Q'Q' $$D1Q!!(]C"";/2Y 0,,C	 2
 	Q#16QqT\\*,EF1
3A 10 21 0/ 21 0/ 21s_   +L8%L:/L;)L)5L;'/MM"M
L	
L&)
L8	3L;;
M

M	M
M,c                    [        SS5       HH  nU R                  [        5         U R                  [	        SU-  5      [        U5      5        S S S 5        MJ     [        R                  " SS9 n[        R                  " S[        S9  [	        S5        S S S 5        U R                  [        W5      S	5        U R                  [        US
   R                  5      S5        U R                  US
   R                  S5        U R                  US
   R                  S5        [        R                  " SS9 n[        R                  " S[        S9  U R                  [        5       n[	        S5        S S S 5        WR                   nS S S 5        U R                  U/ 5        U R                  WR"                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR$                  S	5        g ! , (       d  f       GM  = f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)N      z'\%o'Tr<   r>   r?   z'''
\407'''r)   r   $invalid octal escape sequence '\407'rB   rC   rD   )rE   rF   rG   r.   r/   r0   rH   rI   rJ   rK   rL   rM   rN   rO   r5   r6   rP   rQ   rR   r   r   rV   rW   rX   s        r   "test_eval_str_invalid_octal_escape/TestLiterals.test_eval_str_invalid_octal_escape   s   uf%A!!-0  hl!3SV< 10 & $$D1Q!!(]C! 2 	Q#QqT\\*@	B1
31a($$D1Q!!'MB"";/2_% 0,,C	 2
 	B"IJz2Q'Q'+ 10 21 0/ 21s;   (H	-%H//H?H.*H?	
H	
H+.
H<	8H??
Ic                 D   [         R                  " SS9 n[         R                  " S[        S9  U R	                  [
        5       n[        S5        S S S 5        WR                  nS S S 5        U R                  W/ 5        U R                  WR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S	5        [         R                  " SS9 n[         R                  " S[        S9  U R	                  [
        5       n[        S
5        S S S 5        WR                  nS S S 5        U R                  U/ 5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)NTr<   rD   r?   z&"'''''''''''''''''''''invalid\ Escape"zinvalid escape sequence '\ 'rB   r)      z"''Incorrect \ logic?"   )rH   rI   rJ   rG   r5   r6   r/   rP   r.   rQ   rN   rO   rR   )r   rV   rW   rX   s       r   )test_invalid_escape_locations_with_offset6TestLiterals.test_invalid_escape_locations_with_offset   s   $$D1Q!!'MB"";/2@A 0,,C	 2
 	B"ABz2Q'R($$D1Q!!'MB"";/201 0,,C	 2
 	B"ABz2Q'R(% 0/ 21 0/ 21sG   /G.GG./H1H =H
G+	&G..
G= 
H	
H
Hc                 2   U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      [        S5      5        U R                  [        S5      S5        U R                  [        S	5      [        S
5      5        U R                  [        S5      S5        U R                  [        S5      [        S5      5        U R                  [        S5      S5        U R                  [        S5      [        S5      5        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-   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                     U R                  [        S5      S5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        [        S5        U R                  [        S	5      S
5        U R                  [        [        S5        U R                  [        S5      S5        U R                  [        [        S5        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/   r   r5   r6   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                 p    U R                  [        [        S5        U R                  [        [        S5        g )Nz b'\x' z b'\x0' r4   r   s    r   test_eval_bytes_incomplete'TestLiterals.test_eval_bytes_incomplete   s&    +t^<+t_=r   c           	         [        SS5       HT  nUS;   a  M  U R                  [        5         U R                  [	        SU-  5      S[        U/5      -   5        S S S 5        MV     [        R                  " SS9 n[        R                  " S[        S	9  [	        S
5        S S S 5        U R                  [        W5      S5        U R                  [        US   R                  5      S5        U R                  US   R                  S5        U R                  US   R                  S5        [        R                  " SS9 n[        R                  " S[        S	9  U R                  [        5       n[	        S
5        S S S 5        WR                   nS S S 5        U R                  U/ 5        U R                  WR"                  S5        U R                  UR                  S5        U R                  UR                  S5        g ! , (       d  f       GM  = f! , (       d  f       GNu= f! , (       d  f       N= f! , (       d  f       N= f)Nr)   r:   s   
"'01234567\abfnrtvxzb'\%c'   \Tr<   r>   r?   z
b'''
\z'''r   rA   rB   rC   rD   rE   rF   rG   r.   r/   r   rH   rI   rJ   rK   rL   rM   rN   rO   r5   r6   rP   rQ   rT   s        r   test_eval_bytes_invalid_escape+TestLiterals.test_eval_bytes_invalid_escape   s   q#A33!!-0  i!m!4eeQCj6HI 10  $$D1Q!!(]C  2 	Q#QqT\\*,KL1
31a($$D1Q!!'MB"";/2^$ 0,,C	 2
 	B"ABz2Q'' 10 21 0/ 21s;   ,G99%H;/H/*H6H/9
H		
H
H,	(H//
H=c           	      p   [        SS5       HL  nU R                  [        5         U R                  [	        SU-  5      [        US-  /5      5        S S S 5        MN     [        R                  " SS9 n[        R                  " S[        S9  [	        S	5        S S S 5        U R                  [        W5      S
5        U R                  [        US   R                  5      S5        U R                  US   R                  S5        U R                  US   R                  S5        [        R                  " SS9 n[        R                  " S[        S9  U R                  [        5       n[	        S	5        S S S 5        WR                   nS S S 5        U R                  U/ 5        U R                  WR"                  S5        U R                  UR                  S5        U R                  UR                  S5        g ! , (       d  f       GM  = f! , (       d  f       GNu= f! , (       d  f       N= f! , (       d  f       N= f)Nr\   r]   zb'\%o'   Tr<   r>   r?   zb'''
\407'''r)   r   r^   rB   rC   rD   ry   r_   s        r   $test_eval_bytes_invalid_octal_escape1TestLiterals.test_eval_bytes_invalid_octal_escape   s   uf%A!!-0  i!m!4eQYK6HI 10 & $$D1Q!!(]C!" 2 	Q#QqT\\*@	B1
31a($$D1Q!!'MB"";/2%& 0,,C	 2
 	B"IJz2Q') 10 21 0/ 21s;   ,G11%H3/H'"H.H'1
H	
H
H$	 H''
H5c                 8   U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      [        S5      5        U R                  [        S	5      [        S5      5        U R                  [        S
5      S5        U R                  [        S5      S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        g )Nz br'x' rl   z rb'x' z
 br'\x01'    \x01z
 rb'\x01' z br'' r)   z rb'' z
 br'\x81' s   \x81z
 rb'\x81' u    br'' u    rb'' rm   rn   z rb'\u1881' u	    br'ᢁ' u	    rb'ᢁ' ro   rp   z rb'\U0001d120' u
    br'𝄠' u
    rb'𝄠' z bb'' z rr'' z brr'' z bbr'' z rrb'' z rbb'' rq   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                 ~   U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S5        U R                  [        [        S	5        g )
Nz u'x' r(   u    U'ä'    äu    u'ä' z ur'' z ru'' z bu'' z ub'' )r.   r/   r5   r6   r   s    r   test_eval_str_uTestLiterals.test_eval_str_u'  s    l+S1/0$7PQSWX+t\:+t\:+t\:+t\:r   c                    U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S5        U R                  [        S5      S 5        U R                  [        S	5      S
5        g )Nz B'x' rl   z	 R'\x01' rh   z
 BR'\x01' r   z
 F'{1+1}' rC   z U'\U0001d120' u   𝄠)r.   r/   r   s    r   test_uppercase_prefixes$TestLiterals.test_uppercase_prefixes0  sq    l+T2./9/0(;./C5:45}Er   c                 t   SUR                  SS5      -   n[        R                  R                  U R                  US-   5      n[        USUS9n UR                  [        U-  5        UR                  U5        UR                  5         [        U5        [        R                  U	 g ! UR                  5         f = f)Nxx_-_z.pyrV   )encoding)replaceosr   joinr   openwriter"   close
__import__r   modules)r   r   extramodnamefnfs         r   check_encodingTestLiterals.check_encoding7  s    (**344WW\\$++w7S8,	GGHx'(GGENGGI7KK  GGIs   )B% %B7c                 ,    SnU R                  SU5        g )Nu#   z = 'ሴ'; assert ord(z) == 0x1234
utf-8r   r   r   s     r   test_file_utf_8TestLiterals.test_file_utf_8C  s    9GU+r   c                 L    SnU R                  [        U R                  SU5        g )Nu   b''
r   )r5   r6   r   r   s     r   test_file_utf_8_error"TestLiterals.test_file_utf_8_errorG  s!    +t':':GUKr   c                 &    U R                  S5        g )Nr   r   r   s    r   test_file_utf8TestLiterals.test_file_utf8K  s    G$r   c                 &    U R                  S5        g )Nz
iso-8859-1r   r   s    r   test_file_iso_8859_1!TestLiterals.test_file_iso_8859_1N  s    L)r   c                 &    U R                  S5        g )Nzlatin-1r   r   s    r   test_file_latin_1TestLiterals.test_file_latin_1Q  s    I&r   c                 &    U R                  S5        g )Nlatin9r   r   s    r   test_file_latin9TestLiterals.test_file_latin9T  s    H%r   )r   r   N) )__name__
__module____qualname____firstlineno__r   r   r%   r1   r7   rY   r`   re   ri   rr   ru   rz   r~   r   r   r   r   r   r   r   r   r   r   __static_attributes__ r   r   r
   r
   @   s|    (
79	CC $4L(2).	D	D>(2(0<4;F
!,L%*'&r   r
   __main__)__doc__r   r   r   r   unittestrH   r"   r   TestCaser
   r   mainr   r   r   <module>r      sW   : 
 
    ,U&8$$ U&p zMMO r   