a
    ze                     @   s   d dl Z d dlmZmZmZmZmZ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re   dS )    N)TESTFNunlinkunloadrmtreescript_helpercaptured_stdoutc                   @   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 )MiscSourceEncodingTestc                 C   s(   |  ddd |  ddd d S )Nu
   Питонutf-8s
   Питонu   \Пs   \П)assertEqualencodeself r   //usr/lib/python3.9/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   sV   zt ddd W n8 tyH } z | |jdd W Y d }~nd }~0 0 |   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_issue78204   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_20731B   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 sR0    Y  | td t d	dd W d    n1 s0    Y  | td
 t d	dd W d    n1 s0    Y  | td t ddd W d    n1 s0    Y  | td
 t ddd W d    n1 s40    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_messageK   s"    *""*z)MiscSourceEncodingTest.test_error_messagec                 C   s   d}|  | d S )NZ
bad_codingverify_bad_moduler   module_namer   r   r   test_bad_coding\   s    z&MiscSourceEncodingTest.test_bad_codingc                 C   s   d}|  | d S )NZbad_coding2r>   r@   r   r   r   test_bad_coding2`   s    z'MiscSourceEncodingTest.test_bad_coding2c                 C   sx   |  ttd|  tjt}tj||d }t|d}|	 }W d    n1 sX0    Y  |  tt
||d d S )Nztest..pyrbr   )r(   r   
__import__r1   r2   r4   r5   r3   openreadr   )r   rA   r2   filenamefpbytesr   r   r   r?   d   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_codingm   s    
z-MiscSourceEncodingTest.test_exec_valid_codingc              	   C   s
  t t td }t|ddd}tjdtj z|< |d |d |d |d	d
  W d    n1 sv0    Y  t	
  tt W tjd= t| t|d  t|d  t t td n:tjd= t| t|d  t|d  t t td 0 d S )NrD   wcp1252)encodingr   z# -*- coding: cp1252 -*-
z'''A short string
z'''
z'A very long string %s'
A  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   o__pycache__)r   r   rG   r/   r2   insertr1   curdirwrite	importlibinvalidate_cachesrF   r   r   )r   rI   fr   r   r   test_file_parser   s0    


,

z&MiscSourceEncodingTest.test_file_parsec                 C   sl   d d}| t}t|dd W d    n1 s60    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_stringN)__name__
__module____qualname__r   r   r    r"   r'   r*   r;   r=   rB   rC   r?   rL   rX   r_   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S )AbstractSourceEncodingTestc                 C   s   d}|  |d d S )Ns   print(ascii("ä"))
   '\xe4'check_script_outputr   srcr   r   r   test_default_coding   s    z.AbstractSourceEncodingTest.test_default_codingc                 C   s   d}|  |d d S )Ns&   #coding:iso8859-15
print(ascii("ä"))
   '\xc3\u20ac're   rg   r   r   r   test_first_coding_line   s    z1AbstractSourceEncodingTest.test_first_coding_linec                 C   s   d}|  |d d S )Ns(   #
#coding:iso8859-15
print(ascii("ä"))
rj   re   rg   r   r   r   test_second_coding_line   s    z2AbstractSourceEncodingTest.test_second_coding_linec                 C   s   d}|  |d d S )Ns*   #
#
#coding:iso8859-15
print(ascii("ä"))
rd   re   rg   r   r   r   test_third_coding_line   s    z1AbstractSourceEncodingTest.test_third_coding_linec                 C   s   d}|  |d d S )Ns5   #coding:iso8859-15
#coding:latin1
print(ascii("ä"))
rj   re   rg   r   r   r   test_double_coding_line   s    z2AbstractSourceEncodingTest.test_double_coding_linec                 C   s   d}|  |d d S )Ns4   #coding:iso8859-15 coding:latin1
print(ascii("ä"))
rj   re   rg   r   r   r   test_double_coding_same_line   s    z7AbstractSourceEncodingTest.test_double_coding_same_linec                 C   s   d}|  |d d S )Ns)   #coding:iso-8859-15 
print(ascii("ä"))
rj   re   rg   r   r   r   test_first_non_utf8_coding_line   s    z:AbstractSourceEncodingTest.test_first_non_utf8_coding_linec                 C   s   d}|  |d d S )Ns*   
#coding:iso-8859-15 
print(ascii("ä"))
rj   re   rg   r   r   r    test_second_non_utf8_coding_line   s    z;AbstractSourceEncodingTest.test_second_non_utf8_coding_linec                 C   s   d}|  |d d S )Ns   ﻿print(ascii("ä"))
rd   re   rg   r   r   r   test_utf8_bom   s    z(AbstractSourceEncodingTest.test_utf8_bomc                 C   s   d}|  |d d S )Ns$   ﻿#coding:utf-8
print(ascii("ä"))
rd   re   rg   r   r   r   "test_utf8_bom_and_utf8_coding_line   s    z=AbstractSourceEncodingTest.test_utf8_bom_and_utf8_coding_lineN)r`   ra   rb   ri   rk   rl   rm   rn   ro   rp   rq   rr   rs   r   r   r   r   rc      s   rc   c                   @   s   e Zd Zdd ZdS )BytesSourceEncodingTestc                 C   sP   t  }t| W d    n1 s$0    Y  | d}| | | d S )Nlatin1)r   r   getvaluer   r
   r   )r   rh   r^   stdoutoutr   r   r   rf      s    &z+BytesSourceEncodingTest.check_script_outputNr`   ra   rb   rf   r   r   r   r   rt      s   rt   c                   @   s   e Zd Zdd ZdS )FileSourceEncodingTestc              	   C   s   t  \}tj|d}t|d}|| W d    n1 sB0    Y  t|}W d    n1 sj0    Y  | 	|j
 | d S )Nztest.pywb)tempfileTemporaryDirectoryr1   r2   r3   rG   rT   r   Zassert_python_okr
   rx   r   )r   rh   r^   ZtmpdfnrJ   resr   r   r   rf      s    
((z*FileSourceEncodingTest.check_script_outputNry   r   r   r   r   rz      s   rz   __main__)ZunittestZtest.supportr   r   r   r   r   r   rU   r1   r/   r-   r|   ZTestCaser   rc   rt   rz   r`   mainr   r   r   r   <module>   s     :	