o
    HXh$                     @   s   d dl Z d dl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 de jZG dd dZG d	d
 d
ee jZG dd dee jZedkr^e   dS dS )    N)script_helpercaptured_stdout)TESTFNunlinkrmtree)unloadc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) MiscSourceEncodingTestc                 C   s(   |  ddd |  ddd d S )Nu
   Питонutf-8s
   Питонu   \Пs   \П)assertEqualencodeself r   C/opt/python-3.10.19/usr/lib/python3.10/test/test_source_encoding.pytest_pep263   s   z"MiscSourceEncodingTest.test_pep263c                 C   s.   t ddd}i }t|| | |d d d S )Ns   
# coding: utf-8
u = 'ó'
dummyexecu   ócompiler   r
   r   cdr   r   r   test_compilestring   s   
z)MiscSourceEncodingTest.test_compilestringc              
   C   sX   zt ddd W n ty% } z| |jdd W Y d }~d S d }~ww |   d S )Ns   # coding: cp932
print 'N'r   r   
u   print '年')r   SyntaxErrorr
   textrstripZfail)r   vr   r   r   test_issue2301    s   "z%MiscSourceEncodingTest.test_issue2301c                 C   s.   t ddd}i }t|| | |d d d S )Nu   # coding=latin-1
Æ = 'Æ'r   r      Ær   r   r   r   r   test_issue4626(   s   
z%MiscSourceEncodingTest.test_issue4626c                 C   sj   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   r   r   r   test_issue3297.   s   
 z%MiscSourceEncodingTest.test_issue3297c                 C   s.   |  ttd |  ttd |  ttd d S )Ns    s    s    )assertRaisesr   evalr   r   r   r   test_issue78206   s   z%MiscSourceEncodingTest.test_issue7820c                 C   sR   t jtjtjtjtdgt j	d}|
 d }| |jd | d| d S )Nzcoding20731.py)stderr   r   s   SyntaxError)
subprocessPopensys
executableospathjoindirname__file__PIPEcommunicater
   
returncodeZassertNotIn)r   suberrr   r   r   
test_20731D   s   z!MiscSourceEncodingTest.test_20731c                 C   sB  t ddd t ddd t ddd | td t ddd W d    n1 s)w   Y  | td t d	dd W d    n1 sEw   Y  | td
 t d	dd W d    n1 saw   Y  | td t ddd W d    n1 s}w   Y  | td
 t ddd W d    d S 1 sw   Y  d S )Ns   # -*- coding: iso-8859-15 -*-
r   r   s   ﻿
s   ﻿# -*- coding: utf-8 -*-
Zfakes   # -*- coding: fake -*-
ziso-8859-15s!   ﻿# -*- coding: iso-8859-15 -*-
BOMs   ﻿# -*- coding: fake -*-
)r   ZassertRaisesRegexr   r   r   r   r   test_error_messageM   s,   "z)MiscSourceEncodingTest.test_error_messagec                 C      d}|  | d S )NZ
bad_codingverify_bad_moduler   module_namer   r   r   test_bad_coding^      z&MiscSourceEncodingTest.test_bad_codingc                 C   r>   )NZbad_coding2r?   rA   r   r   r   test_bad_coding2b   rD   z'MiscSourceEncodingTest.test_bad_coding2c                 C   sx   |  ttd|  tjt}tj||d }t|d}|	 }W d    n1 s,w   Y  |  tt
||d d S )Nztest..pyrbr   )r(   r   
__import__r1   r2   r4   r5   r3   openreadr   )r   rB   r2   filenamefpbytesr   r   r   r@   f   s   
z(MiscSourceEncodingTest.verify_bad_modulec                 C   s"   i }t d| | |d d d S )Ns   # coding: cp949
a = ""
r#   u   ぇ)r   r
   )r   r   r   r   r   test_exec_valid_codingo   s   
z-MiscSourceEncodingTest.test_exec_valid_codingc              	   C   s  t t td }t|ddd}tjdtj zO| |d |d |d |d	d
  W d    n1 s;w   Y  t	
  tt W tjd= t| t|d  t|d  t t td d S tjd= t| t|d  t|d  t t td w )NrF   wcp1252)encodingr   z# -*- coding: cp1252 -*-
z'''A short string
z'''
z'A very long string %s'
A  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   o__pycache__)r   r   rI   r/   r2   insertr1   curdirwrite	importlibinvalidate_cachesrH   r   r   )r   rK   fr   r   r   test_file_parset   s2   




z&MiscSourceEncodingTest.test_file_parsec                 C   sl   d d}| t}t|dd W d    n1 sw   Y  d}| j|jjd ||jjd 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   r(   r   r   Z
assertTrue	exceptionargs
startswith)r   inputr   expectedr   r   r   test_error_from_string   s   


z-MiscSourceEncodingTest.test_error_from_stringc              	   C   sz   t td}|d W d    n1 sw   Y  ztt\}}}| |d | d| W tt d S tt w )Nwbs   print("""
""")
r   s#   Non-UTF-8 code starting with '\xb1')	rI   r   rV   r   Zassert_python_failureZassertGreaterZassertInr1   r   )r   fdretcodestdoutr+   r   r   r   test_file_parse_error_multiline   s   z6MiscSourceEncodingTest.test_file_parse_error_multilineN)__name__
__module____qualname__r   r   r    r"   r'   r*   r;   r=   rC   rE   r@   rN   rZ   ra   rf   r   r   r   r   r      s     
		
r   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )AbstractSourceEncodingTestc                 C      d}|  |d d S )Ns   print(ascii("ä"))
   '\xe4'check_script_outputr   srcr   r   r   test_default_coding      z.AbstractSourceEncodingTest.test_default_codingc                 C   rk   )Ns&   #coding:iso8859-15
print(ascii("ä"))
   '\xc3\u20ac'rm   ro   r   r   r   test_first_coding_line      z1AbstractSourceEncodingTest.test_first_coding_linec                 C   rk   )Ns(   #
#coding:iso8859-15
print(ascii("ä"))
rs   rm   ro   r   r   r   test_second_coding_line      z2AbstractSourceEncodingTest.test_second_coding_linec                 C   rk   )Ns*   #
#
#coding:iso8859-15
print(ascii("ä"))
rl   rm   ro   r   r   r   test_third_coding_line   s   z1AbstractSourceEncodingTest.test_third_coding_linec                 C   rk   )Ns5   #coding:iso8859-15
#coding:latin1
print(ascii("ä"))
rs   rm   ro   r   r   r   test_double_coding_line   s   z2AbstractSourceEncodingTest.test_double_coding_linec                 C   rk   )Ns4   #coding:iso8859-15 coding:latin1
print(ascii("ä"))
rs   rm   ro   r   r   r   test_double_coding_same_line   ru   z7AbstractSourceEncodingTest.test_double_coding_same_linec                 C   rk   )Ns)   #coding:iso-8859-15 
print(ascii("ä"))
rs   rm   ro   r   r   r   test_first_non_utf8_coding_line   ru   z:AbstractSourceEncodingTest.test_first_non_utf8_coding_linec                 C   rk   )Ns*   
#coding:iso-8859-15 
print(ascii("ä"))
rs   rm   ro   r   r   r    test_second_non_utf8_coding_line   rw   z;AbstractSourceEncodingTest.test_second_non_utf8_coding_linec                 C   rk   )Ns   ﻿print(ascii("ä"))
rl   rm   ro   r   r   r   test_utf8_bom   rr   z(AbstractSourceEncodingTest.test_utf8_bomc                 C   rk   )Ns$   ﻿#coding:utf-8
print(ascii("ä"))
rl   rm   ro   r   r   r   "test_utf8_bom_and_utf8_coding_line   ru   z=AbstractSourceEncodingTest.test_utf8_bom_and_utf8_coding_linec                 C      d}|  |d}d S )Ns   print(ascii("""
"""))
s   '\n'rm   r   rp   outr   r   r   	test_crlf   rr   z$AbstractSourceEncodingTest.test_crlfc                 C   r   )Ns   print(ascii("""
"""))
s   '\n\n'rm   r   r   r   r   test_crcrlf   rr   z&AbstractSourceEncodingTest.test_crcrlfc                 C   r   )Ns   print(ascii("""
"""))
   '\n\n\n'rm   r   r   r   r   test_crcrcrlf   rr   z(AbstractSourceEncodingTest.test_crcrcrlfc                 C   r   )Ns,   #coding:iso-8859-1
print(ascii("""
"""))
r   rm   r   r   r   r   test_crcrcrlf2   ru   z)AbstractSourceEncodingTest.test_crcrcrlf2N)rg   rh   ri   rq   rt   rv   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   rj      s    rj   c                   @      e Zd Zdd ZdS )BytesSourceEncodingTestc                 C   sP   t  }t| W d    n1 sw   Y  | d}| | | d S )Nlatin1)r   r   getvaluer   r
   r   )r   rp   r`   re   r   r   r   r   rn      s
   
z+BytesSourceEncodingTest.check_script_outputNrg   rh   ri   rn   r   r   r   r   r          r   c                   @   r   )FileSourceEncodingTestc              	   C   s   t  .}tj|d}t|d}|| W d    n1 s!w   Y  t|}W d    n1 s5w   Y  | 	|j
 | d S )Nztest.pyrb   )tempfileTemporaryDirectoryr1   r2   r3   rI   rV   r   Zassert_python_okr
   r   r   )r   rp   r`   ZtmpdfnrL   resr   r   r   rn      s   
z*FileSourceEncodingTest.check_script_outputNr   r   r   r   r   r      r   r   __main__)ZunittestZtest.supportr   r   Ztest.support.os_helperr   r   r   Ztest.support.import_helperr   rW   r1   r/   r-   r   ZTestCaser   rj   r   r   rg   mainr   r   r   r   <module>   s"    K	