
    <ec1                     N   d dl Z d dlmZmZmZ d dlmZmZmZ d dl	m
Z
 d dlZd dlZd dlZd dlZd dlZ G d de j                  Z G d d          Z G d	 d
e j                  Z G d dee j                  Z G d dee j                  Zedk    r e j                     dS dS )    N)script_helpercaptured_stdoutrequires_subprocess)TESTFNunlinkrmtree)unloadc                       e Zd Zd Zd Zd Zd Zd Zd Z e	            d             Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )MiscSourceEncodingTestc                     |                      d                    d          d           |                      d                    d          d           d S )Nu
   Питонutf-8s
   Питонu   \Пs   \П)assertEqualencodeselfs    0/usr/lib/python3.11/test/test_source_encoding.pytest_pep263z"MiscSourceEncodingTest.test_pep263   sd    ((7	
 	
 	
 	LL!!	
 	
 	
 	
 	
    c                     t          ddd          }i }t          ||           |                     |d         d           d S )Ns   
# coding: utf-8
u = 'ó'
dummyexecu   ócompiler   r   r   cds      r   test_compilestringz)MiscSourceEncodingTest.test_compilestring   sF    :GVLLQ


3(((((r   c                     	 t          ddd           |                                  d S # t          $ r9}|                     |j                            d          d           Y d }~d S d }~ww xY w)Ns   # coding: cp932
print 'N'r   r   
u   print '年')r   failSyntaxErrorr   textrstrip)r   vs     r   test_issue2301z%MiscSourceEncodingTest.test_issue2301    s    	8'6JJJ IIKKKKK  	D 	D 	DQV]]4002BCCCCCCCCC	Ds   ) 
A,.A''A,c                     t          ddd          }i }t          ||           |                     |d         d           d S )Nu   # coding=latin-1
Æ = 'Æ'r   r      Ær   r   s      r   test_issue4626z%MiscSourceEncodingTest.test_issue4626(   sF    97FKKQ


6F+++++r   c                    t          ddd          }i }t          ||           |                     |d         |d                    |                     t          |d                   t          |d                              |                     t	          |d                   t	          |d                              d S )Nu   a, b = '𐄏', '\U0001010F'r   r   ab)r   r   r   lenasciir   s      r   test_issue3297z%MiscSourceEncodingTest.test_issue3297.   s    8'6JJQ


33(((QsVc!C&kk222qvaf66666r   c                     |                      t          t          d           |                      t          t          d           |                      t          t          d           d S )Ns    s    s    )assertRaisesr#   evalr   s    r   test_issue7820z%MiscSourceEncodingTest.test_issue78206   sV     	+t[999 	+t[999 	+t_=====r   c                 t   t          j        t          j        t          j                            t          j                            t                    d          gt           j	                  }|
                                d         }|                     |j        d           |                     d|           d S )Nzcoding20731.py)stderr   r   s   SyntaxError)
subprocessPopensys
executableospathjoindirname__file__PIPEcommunicater   
returncodeassertNotIn)r   suberrs      r   
test_20731z!MiscSourceEncodingTest.test_20731D   s    RW__X%>%>%57 7 8  *0 0 0 oo"+++-----r   c                    t          ddd           t          ddd           t          ddd           |                     t          d          5  t          ddd           d d d            n# 1 swxY w Y   |                     t          d          5  t          d	dd           d d d            n# 1 swxY w Y   |                     t          d
          5  t          d	dd           d d d            n# 1 swxY w Y   |                     t          d          5  t          ddd           d d d            n# 1 swxY w Y   |                     t          d
          5  t          ddd           d d d            d S # 1 swxY w Y   d S )Ns   # -*- coding: iso-8859-15 -*-
r   r   s   ﻿
s   ﻿# -*- coding: utf-8 -*-
fakes   # -*- coding: fake -*-
ziso-8859-15s!   ﻿# -*- coding: iso-8859-15 -*-
BOMs   ﻿# -*- coding: fake -*-
)r   assertRaisesRegexr#   r   s    r   test_error_messagez)MiscSourceEncodingTest.test_error_messageN   s   2GVDDD!7F3338'6JJJ##K88 	B 	B/&AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B##K?? 	% 	%BV% % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ##K77 	% 	%BV% % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ##K88 	N 	N;WfMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N##K77 	N 	N;WfMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	NsZ   A--A14A1B11B58B5C55C9<C9D99D= D=E>>FFc                 4    d}|                      |           d S )N
bad_codingverify_bad_moduler   module_names     r   test_bad_codingz&MiscSourceEncodingTest.test_bad_coding_   s!    "{+++++r   c                 4    d}|                      |           d S )Nbad_coding2rO   rQ   s     r   test_bad_coding2z'MiscSourceEncodingTest.test_bad_coding2c   s!    #{+++++r   c                    |                      t          t          d|z              t          j                            t                    }t          j                            ||dz             }t          |d          5 }|	                                }d d d            n# 1 swxY w Y   |                      t          t          ||d           d S )Nztest..pyrbr   )r2   r#   
__import__r<   r=   r?   r@   r>   openreadr   )r   rR   r=   filenamefpbytess         r   rP   z(MiscSourceEncodingTest.verify_bad_moduleg   s    +z7[3HIIIwx((7<<kE&9::(D!! 	RGGIIE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	+wxHHHHHs   <BB!$B!c                 b    i }t          d|           |                     |d         d           d S )Ns   # coding: cp949
a = ""
r,   u   ぇ)r   r   )r   r   s     r   test_exec_valid_codingz-MiscSourceEncodingTest.test_exec_valid_codingp   s8    115553*****r   c                    t          t                     t          dz   }t          |dd          }t          j                            dt          j                   	 |5  |                    d           |                    d           |                    d           |                    d	d
z             d d d            n# 1 swxY w Y   t          j
                     t          t                     t          j        d= t          |           t          |dz              t          |dz              t          t                     t          d           d S # t          j        d= t          |           t          |dz              t          |dz              t          t                     t          d           w xY w)NrX   wcp1252)encodingr   z# -*- coding: cp1252 -*-
z'''A short string
z'''
z'A very long string %s'
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   o__pycache__)r	   r   r[   r:   r=   insertr<   curdirwrite	importlibinvalidate_cachesrZ   r   r   )r   r]   fs      r   test_file_parsez&MiscSourceEncodingTest.test_file_parseu   s    	vE>322229%%%	" D D4555-...   3zBCCC	D D D D D D D D D D D D D D D ')))v88c>"""8c>"""6NNN=!!!!! 88c>"""8c>"""6NNN=!!!!s2   E AC6E CE 	C
*E A%F>c                 N   d                     d          }|                     t                    5 }t          |dd           d d d            n# 1 swxY w Y   d}|                     |j        j        d                             |          |j        j        d                    d S )Nu   # coding: ascii
☃r   z<string>r   zN'ascii' codec can't decode byte 0xe2 in position 16: ordinal not in range(128)r   )msg)r   r2   r#   r   
assertTrue	exceptionargs
startswith)r   inputr   expecteds       r   test_error_from_stringz-MiscSourceEncodingTest.test_error_from_string   s    .55g>>{++ 	/qE:v...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	//(+66x@@K,Q/ 	 	1 	1 	1 	1 	1s   AAAc                    t          t          d          5 }|                    d           d d d            n# 1 swxY w Y   	 t          j        t                    \  }}}|                     |d           |                     d|           t          j        t                     d S # t          j        t                     w xY w)Nwbs   print("""
""")
r   s#   Non-UTF-8 code starting with '\xb1')	r[   r   rk   r   assert_python_failureassertGreaterassertInr<   r   )r   fdretcodestdoutr6   s        r   test_file_parse_error_multilinez6MiscSourceEncodingTest.test_file_parse_error_multiline   s    &$ 	/2HH-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/	&3&I&&Q&Q#GVVw***MMA6JJJIfBIfs   8<<A	B( (Cc                     d}t          t          d          5 }|                    d                    |                     d d d            n# 1 swxY w Y   	 t	          j        t                    \  }}}|                     d|           |                     |                    |	                                          d           t          j        t                     d S # t          j        t                     w xY w)Nz0b1and 2rc   z{}s$   SyntaxWarning: invalid binary literar7   )r[   r   rk   formatr   assert_python_okr}   r   countr   r<   r   )r   sourcer~   r   r   r6   s         r   ,test_tokenizer_fstring_warning_in_first_linezCMiscSourceEncodingTest.test_tokenizer_fstring_warning_in_first_line   s   &# 	*"HHT[[(()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*	&3&DV&L&L#GVVMMA6JJJV\\&--//::A>>>IfBIfs   )AAAA.C" "C=N)__name__
__module____qualname__r   r   r'   r*   r0   r4   r   rG   rL   rS   rV   rP   ra   ro   rx   r   r    r   r   r   r      s        
 
 
) ) )  , , ,7 7 7> > > . . .N N N", , ,, , ,I I I+ + +
" " "01 1 1  	 	 	 	 	r   r   c                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )AbstractSourceEncodingTestc                 6    d}|                      |d           d S )Ns   print(ascii("ä"))
   '\xe4'check_script_outputr   srcs     r   test_default_codingz.AbstractSourceEncodingTest.test_default_coding   s#    ,  j11111r   c                 6    d}|                      |d           d S )Ns&   #coding:iso8859-15
print(ascii("ä"))
   '\xc3\u20ac'r   r   s     r   test_first_coding_linez1AbstractSourceEncodingTest.test_first_coding_line   &    -  &677777r   c                 6    d}|                      |d           d S )Ns(   #
#coding:iso8859-15
print(ascii("ä"))
r   r   r   s     r   test_second_coding_linez2AbstractSourceEncodingTest.test_second_coding_line   (    - 	  &677777r   c                 6    d}|                      |d           d S )Ns*   #
#
#coding:iso8859-15
print(ascii("ä"))
r   r   r   s     r   test_third_coding_linez1AbstractSourceEncodingTest.test_third_coding_line   s'    - 	  j11111r   c                 6    d}|                      |d           d S )Ns5   #coding:iso8859-15
#coding:latin1
print(ascii("ä"))
r   r   r   s     r   test_double_coding_linez2AbstractSourceEncodingTest.test_double_coding_line   s(    - 	  &677777r   c                 6    d}|                      |d           d S )Ns4   #coding:iso8859-15 coding:latin1
print(ascii("ä"))
r   r   r   s     r   test_double_coding_same_linez7AbstractSourceEncodingTest.test_double_coding_same_line   r   r   c                 6    d}|                      |d           d S )Ns)   #coding:iso-8859-15 
print(ascii("ä"))
r   r   r   s     r   test_first_non_utf8_coding_linez:AbstractSourceEncodingTest.test_first_non_utf8_coding_line   r   r   c                 6    d}|                      |d           d S )Ns*   
#coding:iso-8859-15 
print(ascii("ä"))
r   r   r   s     r    test_second_non_utf8_coding_linez;AbstractSourceEncodingTest.test_second_non_utf8_coding_line   r   r   c                 6    d}|                      |d           d S )Ns   ﻿print(ascii("ä"))
r   r   r   s     r   test_utf8_bomz(AbstractSourceEncodingTest.test_utf8_bom   s#    8  j11111r   c                 6    d}|                      |d           d S )Ns$   ﻿#coding:utf-8
print(ascii("ä"))
r   r   r   s     r   "test_utf8_bom_and_utf8_coding_linez=AbstractSourceEncodingTest.test_utf8_bom_and_utf8_coding_line   s%    -  j11111r   c                 6    d}|                      |d          }d S )Ns   print(ascii("""
"""))
s   '\n'r   r   r   outs      r   	test_crlfz$AbstractSourceEncodingTest.test_crlf   s     ,&&sH55r   c                 6    d}|                      |d          }d S )Ns   print(ascii("""
"""))
s   '\n\n'r   r   s      r   test_crcrlfz&AbstractSourceEncodingTest.test_crcrlf   s     .&&sJ77r   c                 6    d}|                      |d          }d S )Ns   print(ascii("""
"""))
   '\n\n\n'r   r   s      r   test_crcrcrlfz(AbstractSourceEncodingTest.test_crcrcrlf   s     0&&sL99r   c                 6    d}|                      |d          }d S )Ns,   #coding:iso-8859-1
print(ascii("""
"""))
r   r   r   s      r   test_crcrcrlf2z)AbstractSourceEncodingTest.test_crcrcrlf2   s"    1&&sL99r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s        2 2 28 8 8
8 8 82 2 28 8 88 8 8
8 8 8
8 8 82 2 22 2 2
6 6 68 8 8: : :: : : : :r   r   c                   t    e Zd Z ej        ej                            d           d          d             ZdS )UTF8ValidatorTestlinuxz&Too slow to run on non-Linux platformsc                     dt                                t                      fd}d t          dd          D             }d t          dd          D             }d t          d	d
          D             }||z   |z   d t          dd          D             z   }|D ]} ||           |D ]}|D ]} |||z              |D ]0}|d d         D ]#}	|d d         D ]}
 |||	z   dz   |
z              $1d t          dd          D             D ]$} |d|z   dz               |d|z   dz              %d t          dd          D             D ]$} |d|z   dz               |d|z   dz              %d t          dd          D             D ]$} |d|z   dz               |d|z   dz              %d t          dd          D             D ]$} |d|z   dz               |d|z   dz              %d S )Ns   


"%s"
c                 <   t          d          5 }|                    | z             d d d            n# 1 swxY w Y   t          j                  \  }}}                    |d                               d|                               d|           d S )Nrz   r7   s   Non-UTF-8 code starting withs	   on line 4)r[   rk   r   r{   assertGreaterEqualr}   )contentr^   rcr   r6   fnr   templates        r   checkz2UTF8ValidatorTest.test_invalid_utf8.<locals>.check  s    b$ -2G+,,,- - - - - - - - - - - - - - -!.!DR!H!HB ##B***MM96BBBMM,/////s   7;;c                 .    g | ]}t          |g          S r   r_   .0xs     r   
<listcomp>z7UTF8ValidatorTest.test_invalid_utf8.<locals>.<listcomp>  s     DDDQeQCjjDDDr         c                 .    g | ]}t          |g          S r   r   r   s     r   r   z7UTF8ValidatorTest.test_invalid_utf8.<locals>.<listcomp>       %L%L%LQeQCjj%L%L%Lr      c                 .    g | ]}t          |g          S r   r   r   s     r   r   z7UTF8ValidatorTest.test_invalid_utf8.<locals>.<listcomp>  r   r         c                 .    g | ]}t          |g          S r   r   r   s     r   r   z7UTF8ValidatorTest.test_invalid_utf8.<locals>.<listcomp>!  s     )Q)Q)Q%**)Q)Q)Qr               c                 .    g | ]}t          |g          S r   r   r   s     r   r   z7UTF8ValidatorTest.test_invalid_utf8.<locals>.<listcomp>0       999!5!::999r            c                 .    g | ]}t          |g          S r   r   r   s     r   r   z7UTF8ValidatorTest.test_invalid_utf8.<locals>.<listcomp>4  r   r      c                 .    g | ]}t          |g          S r   r   r   s     r   r   z7UTF8ValidatorTest.test_invalid_utf8.<locals>.<listcomp>7  r   r         s   s   c                 .    g | ]}t          |g          S r   r   r   s     r   r   z7UTF8ValidatorTest.test_invalid_utf8.<locals>.<listcomp>:  r   r      )r   
addCleanupr   range)r   r   continuation_bytesinvalid_2B_seq_start_bytesinvalid_4B_seq_start_bytesinvalid_start_bytesbytesbcbcb1cb3r   r   s   `          @@r   test_invalid_utf8z#UTF8ValidatorTest.test_invalid_utf8   s    ####	0 	0 	0 	0 	0 	0 	0 ED%d2C2CDDD%L%L%d:K:K%L%L%L"%L%L%d:K:K%L%L%L"!;;&')Q)QeD%>P>P)Q)Q)QR 	
 ( 	 	DE$KKKK, 	 	B(  b2g - 	. 	.B)"1"- . .-bqb1 . .CE"S&.,----.. :9uT4'8'8999 	& 	&BE'"*W$%%%E'"*W$%%%%99uT4'8'8999 	& 	&BE'"*W$%%%E'"*W$%%%%99uT4'8'8999 	* 	*BE'"*[()))E'"*[())))99uT4'8'8999 	* 	*BE'"*[()))E'"*[())))	* 	*r   N)	r   r   r   unittestskipIfr:   platformru   r   r   r   r   r   r      sV        X_00999=? ?>* >*? ?>* >* >*r   r   c                       e Zd Zd ZdS )BytesSourceEncodingTestc                    t                      5 }t          |           d d d            n# 1 swxY w Y   |                                                    d          }|                     |                                |           d S )Nlatin1)r   r   getvaluer   r   r%   )r   r   rw   r   r   s        r   r   z+BytesSourceEncodingTest.check_script_outputA  s     	&III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	oo&&x00x00000s   +//Nr   r   r   r   r   r   r   r   r   ?  s#        1 1 1 1 1r   r   c                       e Zd Zd ZdS )FileSourceEncodingTestc                    t          j                    5 }t          j                            |d          }t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |          }d d d            n# 1 swxY w Y   | 	                    |j
                                        |           d S )Nztest.pyrz   )tempfileTemporaryDirectoryr<   r=   r>   r[   rk   r   r   r   r   r%   )r   r   rw   tmpdr   r^   ress          r   r   z*FileSourceEncodingTest.check_script_outputJ  s!   (** 	5ddI..Bb$ 2              044C		5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5
 	))844444s5   1BA'B'A+	+B.A+	/BBBNr   r   r   r   r   r   H  s#        5 5 5 5 5r   r   __main__)r   test.supportr   r   r   test.support.os_helperr   r   r   test.support.import_helperr	   rl   r<   r:   r8   r   TestCaser   r   r   r   r   r   mainr   r   r   <module>r     s    L L L L L L L L L L 9 9 9 9 9 9 9 9 9 9 - - - - - -     				 



     ` ` ` ` `X. ` ` `FH: H: H: H: H: H: H: H:VA* A* A* A* A*) A* A* A*H1 1 1 1 18(:K 1 1 15 5 5 5 579J 5 5 5 zHMOOOOO r   