o
    g~                     @   s  d dl mZ d dlZd dl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
mZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d dlZejd
dgdZejd
dgdZeedZedd ZG dd deZG dd dZ G dd de Z!G dd de!e	j"Z#G dd de!e	j"Z$G dd de Z%G dd de%e	j"Z&G dd  d e%e	j"Z'G d!d" d"e Z(G d#d$ d$e(e	j"Z)G d%d& d&e(e	j"Z*G d'd( d(e Z+G d)d* d*e+e	j"Z,G d+d, d,e+e	j"Z-G d-d. d.e e	j"Z.G d/d0 d0e Z/G d1d2 d2e/e	j"Z0G d3d4 d4e/e	j"Z1G d5d6 d6e Z2G d7d8 d8e2e	j"Z3G d9d: d:e2e	j"Z4G d;d< d<e Z5G d=d> d>e5e	j"Z6G d?d@ d@e5e	j"Z7G dAdB dBe	j"Z8G dCdD dDe	j"Z9dEdF Z:e:Z;e<dGkrie	=  dS dS )H    )contextmanagerN)StringIO)support)import_helper)	os_helper)warnings_helper)assert_python_okassert_python_failure
stacklevelwarnings	_warnings)Zblocked)ZfreshZgettotalrefcountc              	   c   s    t tfD ]}z|j  W q ty   Y qw zt  W n	 ty'   Y nw tj}| j}z|dd | _| d | t_dV  W |t_|| _dS |t_|| _w )z8Use a specific warnings implementation in warning_tests.Nonce)	syswarning_tests__warningregistry__clearAttributeError	NameErrorr   filterssimplefilter)moduleZto_clearoriginal_warningsZoriginal_filters r   Q/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_warnings/__init__.pywarnings_state   s.   

r   c                   @      e Zd ZdS )TestWarningN__name__
__module____qualname__r   r   r   r   r   4       r   c                       s,   e Zd ZdZ fddZ fddZ  ZS )BaseTestz'Basic bookkeeping required for testing.c                    s`   t jj| _dt v rt d= ttdrt`ttdrt`| j	tj
d< | j	t j_tt|   d S )Nr   r   )unittestcaser   old_unittest_moduleglobalshasattrr   r   r   r   modulessuperr#   setUpself	__class__r   r   r+   <   s   




zBaseTest.setUpc                    s&   t tjd< | jtj_tt| 	  d S )Nr   )
r   r   r)   r&   r$   r%   r   r*   r#   tearDownr,   r.   r   r   r0   O   s   

zBaseTest.tearDown)r   r    r!   __doc__r+   r0   __classcell__r   r   r.   r   r#   8   s    r#   c                   @      e Zd ZdZdd ZdS )PublicAPITestszGEnsures that the correct values are exposed in the
    public API.
    c                 C   s6   |  t| jd g d}| t| jjt| d S )N__all__)warnwarn_explicitshowwarningformatwarningfilterwarningsr   resetwarningscatch_warnings)
assertTruer(   r   ZassertSetEqualsetr5   )r-   Z
target_apir   r   r   test_module_all_attributeZ   s
   z(PublicAPITests.test_module_all_attributeN)r   r    r!   r1   r?   r   r   r   r   r4   T   s    r4   c                   @      e Zd ZeZdS )CPublicAPITestsNr   r    r!   
c_warningsr   r   r   r   r   rA   b       rA   c                   @   r@   )PyPublicAPITestsNr   r    r!   py_warningsr   r   r   r   r   rE   e   rD   rE   c                   @   s   e Zd 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 d! Zd"d# Zd$d% Zd&S )'FilterTestsz$Testing the filtering functionality.c                 C   s`   t j| jd}| j  | jjdtd | t| jjd W d    d S 1 s)w   Y  d S )Nr   errorcategoryFilterTests.test_error)r   r<   r   r;   r:   UserWarningassertRaisesr6   r-   wr   r   r   
test_errorl   s   
"rM   c              	      s   t jjdL}j  d  fdd}t }|  W d    n1 s(w   Y  | }d| d| jjdt	d 
t	| W d    d S 1 sVw   Y  d S )	NrI   %FilterTests.test_ignore_after_defaultc                         j  t d S Nr   r6   rN   r   messager-   r   r   fw      z/FilterTests.test_error_after_default.<locals>.fz2UserWarning: FilterTests.test_ignore_after_defaultz&self.module.warn(message, UserWarning)rJ   rK   )r   r<   r   r;   r   captured_stderrgetvalueassertInr:   rN   rO   )r-   rQ   rY   stderrr   rW   r   test_error_after_defaults   s"   

"z$FilterTests.test_error_after_defaultc                 C   s   t jd| jd.}| j  | jjdtd | jdt | t|d | t	t
dg W d    d S 1 s9w   Y  d S )NTrecordr   ignorerK   FilterTests.test_ignorer   version)r   r<   r   r;   r:   rN   r6   assertEquallenlistr   rP   r   r   r   test_ignore   s   
"rc   c                    s   t jdjd0}j  d  fdd}|  jjdtd |  |  t|d W d    d S 1 s;w   Y  d S )	NTr`   rS   c                      rT   rU   rV   r   rW   r   r   rY      rZ   z0FilterTests.test_ignore_after_default.<locals>.frb   rK      )r   r<   r   r;   r:   rN   re   rf   r-   rQ   rY   r   rW   r   test_ignore_after_default   s   
"rS   c                    s   t jdjdM}j  jjdtd d  fdd}|  t|d |d	 jj	d
   |  t|d |d	 jj	d
   W d    d S 1 sXw   Y  d S )NTr`   alwaysrK   FilterTests.test_alwaysc                      rT   rU   rV   r   rW   r   r   rY      rZ   z"FilterTests.test_always.<locals>.fri   r      )
r   r<   r   r;   r:   rN   re   rf   rX   argsrj   r   rW   r   test_always   s   
"rm   c                    s  t jdjdo}j  d  fdd}|  t|d |d jjd   |  t|d jjd	t	d
 |  t|d |d jjd   |  t|d |d jjd   W d    d S 1 szw   Y  d S )NTr`   z$FilterTests.test_always_after_ignorec                      rT   rU   rV   r   rW   r   r   rY      rZ   z0FilterTests.test_always_after_default.<locals>.fri   rn   r   rl   rK   ro      )
r   r<   r   r;   re   rf   rX   rp   r:   rN   rj   r   rW   r   test_always_after_default   s(   
"z%FilterTests.test_always_after_defaultc                 C   s   t jd| jdK}| j  | jjdtd td}tdD ],}| j|t |dkr:| |d j	| |d d = q|d	krG| t
|d qtd
W d    d S 1 sVw   Y  d S )NTr`   defaultrK   FilterTests.test_defaultro   r   rn   ri   zloop variant unhandled)r   r<   r   r;   r:   rN   ranger6   re   rX   rf   
ValueError)r-   rQ   rX   xr   r   r   test_default   s"   
"ru   c                 C   s   t jd| jd>}| j  | jjdtd td}| j|t | |d j| |d d = | j|t | t	|d W d    d S 1 sIw   Y  d S )NTr`   r   rK   FilterTests.test_modulern   r   )
r   r<   r   r;   r:   rN   r6   re   rX   rf   r-   rQ   rX   r   r   r   test_module   s   

"rz   c                 C   s   t jd| jdS}| j  | jjdtd td}| j|tdd | |d j| |d d = | j|tdd	 | t	|d
 | j|tdd | t	|d
 W d    d S 1 s^w   Y  d S )NTr`   r   rK   FilterTests.test_once__init__.py*   rn      r   ztest_warnings2.py)
r   r<   r   r;   r:   rN   r7   re   rX   rf   r{   r   r   r   	test_once   s*   

"r}   c              	   C   s   t jd| jd^}| jdt | jjdtddd d | t|d | t	 | jjdtdddd W d    n1 s>w   Y  | t|d | jjdtddi d | t|d	 W d    d S 1 siw   Y  d S )
NTr`   rl   msgfilenamer   module_globalsri   ro   )
r   r<   r   r   rN   r7   re   rf   rO   	TypeErrorrP   r   r   r   test_module_globals   s(   "zFilterTests.test_module_globalsc                 C   sb   t j| jd }| j  | jjdtd | t| jjdt W d    d S 1 s*w   Y  d S )NrI   rJ   rK   FilterTests.test_inheritance)	r   r<   r   r;   r:   WarningrO   rN   r6   rP   r   r   r   test_inheritance   s   
"r   c              	   C   s   t jd| jdD}| j  | jjdtd | jjdtdd |d d = z	| jdt W n ty;   | d Y nw | t	|d	 W d    d S 1 sOw   Y  d S )
NTr`   rb   rK   rJ   )rL   appendFilterTests.test_orderingz!order handling for actions failedr   )
r   r<   r   r;   r:   rN   r6   Zfailre   rf   rP   r   r   r   test_ordering  s"   


"r   c                 C   s@  t jd| jd}| jddtdd | t| jjd | j  d}| j| | 	t
|d j| | |d jt | jd	dtdd d
}| j| | t
|d j| | j  | jddtdd | t| jjd d}| j| | 	t
|d j| | |d jt W d    d S 1 sw   Y  d S )NTr`   rJ    r   convert to errorzhandle normallyrn   rb   zfiltered outzhex*zhex/octznonmatching text)r   r<   r   r:   r   rO   rN   r6   r;   re   strrX   assertIsrL   ZassertNotEqual)r-   rQ   textr   r   r   test_filterwarnings  s.   

"zFilterTests.test_filterwarningsc                 C   s   t jd| jdB}| jdt | jddt | t| jjd | t| jjd | jd | |g  | jd | |g  W d    d S 1 sMw   Y  d S )	NTr`   rb   rJ   matchzmatch prefixzsuffix matchzsomething completely different)	r   r<   r   r   rN   r:   rO   r6   re   rP   r   r   r   test_message_matching0  s   "z!FilterTests.test_message_matchingc                    s   G  fdddfddt dD  tjd| jd#} | j_| jtdd d	d
 | t|d j	d W d    d S 1 sBw   Y  d S )Nc                          e Zd Z fddZdS )z.FilterTests.test_mutate_filter_list.<locals>.Xc                    s   g  d d < d S rU   r   )r-   aLr   r   r   >  s   z4FilterTests.test_mutate_filter_list.<locals>.X.matchN)r   r    r!   r   r   r   r   r   X=      r   c                    s   g | ]}d   t   dfqS )rt   r   )rN   ).0i)r   r   r   
<listcomp>A  s    z7FilterTests.test_mutate_filter_list.<locals>.<listcomp>ro   Tr`   bzf.pyr   rn   )
rv   r   r<   r   r   r7   rN   re   r   rX   rP   r   )r   r   r   test_mutate_filter_list<  s   "z#FilterTests.test_mutate_filter_listc                 C      t j| jdH | j  | jjdtd | t| jjd | jjdtd | jjdtd | t| jjdd | | jjd d dd	 W d    d S 1 sRw   Y  d S )
NrI   rJ   rK   ri   rb   ro   z(filterwarnings inserted duplicate filterr   z>filterwarnings did not promote filter to the beginning of list)	r   r<   r   r;   r:   rN   re   rf   r   r,   r   r   r   %test_filterwarnings_duplicate_filtersH     
"z1FilterTests.test_filterwarnings_duplicate_filtersc                 C   r   )
NrI   rJ   rK   ri   rb   ro   &simplefilter inserted duplicate filterr   z<simplefilter did not promote filter to the beginning of list)	r   r<   r   r;   r   rN   re   rf   r   r,   r   r   r   #test_simplefilter_duplicate_filtersY  r   z/FilterTests.test_simplefilter_duplicate_filtersc                 C   s   t j| jdd@}| j  | jd | jjddd | jjddd | jjdtd | t| jj	dd	 | t|d
d W d    d S 1 sKw   Y  d S )NTr   ra   rb   rJ   r   test_append_duplicaterK   ro   r   r   z+appended duplicate changed order of filters)
r   r<   r   r;   r   r6   rN   re   rf   r   rP   r   r   r   r   i  s    
"z!FilterTests.test_append_duplicateN)r   r    r!   r1   rR   r_   rh   rk   rq   rs   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   h   s(    	rH   c                   @   r@   )CFilterTestsNrB   r   r   r   r   r   x  rD   r   c                   @   r@   )PyFilterTestsNrF   r   r   r   r   r   {  rD   r   c                   @   s`   e Zd 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 )	WarnTestsz2Test warnings.warn() and warnings.warn_explicit().c                 C   s   t jd| jd4}| jd tdD ] }d| }| j| | t|d j| | 	|d j
t qW d    d S 1 s?w   Y  d S )NTr`   r      zmulti %drn   )r   r<   r   r   rv   r6   re   r   rX   r   rL   rN   )r-   rQ   r   r   r   r   r   test_message  s   "zWarnTests.test_messagec              	   C   sz   t d dfD ]5}tjd| jd#}| jd | j| | t|d jtt	| W d    q1 s5w   Y  qd S )Nr   Tr`   r   rn   )
r   r   r<   r   r   r6   re   r   rX   rN   )r-   obrQ   r   r   r   test_warn_nonstandard_types  s    z%WarnTests.test_warn_nonstandard_typesc              	   C   s   t | jM tjd| jd,}td | tj	|d j
d td | tj	|d j
d W d    n1 s=w   Y  W d    d S W d    d S 1 sUw   Y  d S )NTr`   Zspam1rn   stacklevel.pyZspam2r   r   r   r<   r   innerre   ospathbasenamer   ZouterrP   r   r   r   test_filename  s"   

"zWarnTests.test_filenamec              	   C   s`  t | j tjd| jd}tjddd | tj	|d j
d tjddd | tj	|d j
d tjd	d
d | tj	|d j
d tjdd
d | tj	|d j
d tjddd | tj	|d j
d tjddd | tj	|d j
d W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )NTr`   Zspam3ri   r
   rn   r   Zspam4Zspam5ro   r~   Zspam6zspam6.5rr   Zspam7i'  r   r   rP   r   r   r   test_stacklevel  sB   "zWarnTests.test_stacklevelc              	   C   s   t d t| jD tjd| jd#}| jd dd l}| t	|d | |d j
t W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S )Nz&test.test_warnings.data.import_warningTr`   rl   r   ri   )r   Zunloadr   r   r   r<   r   Z&test.test_warnings.data.import_warningre   rf   r   __file__)r-   rQ   testr   r   r   test_stacklevel_import  s   
"z WarnTests.test_stacklevel_importc                 C   sj   d}t d|d}tjdd}| jjdtd t| W d    n1 s%w   Y  | |d j| d S )	Nz<warnings-test>z3import warnings
warnings.warn('hello', UserWarning)execT)ra   rl   rK   r   )	compiler   r<   r   r   rN   r   re   r   )r-   r   ZcodeobjrQ   r   r   r   test_exec_filename  s   
zWarnTests.test_exec_filenamec              
   C   s   t jd| jd>}| j  | jjdtd dD ]%}zt| W n	 ty*   Y qw | j	dt|d | 
|d j| qW d    d S 1 sIw   Y  d S )	NTr`   rl   rK   )u   nonasciié€u   surrogater   ri   rn   )r   r<   r   r;   r:   rN   r   fsencodeUnicodeEncodeErrorr7   re   r   )r-   rQ   r   r   r   r   %test_warn_explicit_non_ascii_filename  s    
"z/WarnTests.test_warn_explicit_non_ascii_filenamec              	   C   sT   |  t| jjd td d  |  t| jjd d d d | j ttf| jjd td ddd d S )Nri   r   registry)rO   r   r   r7   rN   r   r   r,   r   r   r   test_warn_explicit_type_errors  s   


z(WarnTests.test_warn_explicit_type_errorsc                 C   sN   G dd dt }| t | j|  W d    d S 1 s w   Y  d S )Nc                   @   r3   )z-WarnTests.test_bad_str.<locals>.BadStrWarningz-Warning with a bad format string for __str__.c                 S   s   dddi S )NzA bad formatted string %(err)errzthere is no %(err)sr   r,   r   r   r   __str__  s   z5WarnTests.test_bad_str.<locals>.BadStrWarning.__str__N)r   r    r!   r1   r   r   r   r   r   BadStrWarning  s    r   )r   rO   rw   r   r6   )r-   r   r   r   r   test_bad_str  s   "zWarnTests.test_bad_strc              	   C   s$  G dd dt }G dd d}| t}| jdd W d    n1 s&w   Y  | dt|j | t}| jd| W d    n1 sKw   Y  | dt|j | t}| jd|  W d    n1 sqw   Y  | dt|j tj	| jd | j
  | jd	 | |}| jd
| W d    n1 sw   Y  | d
t|j | t}| jd
d  W d    n1 sw   Y  | d
t|j | |}| jd
| W d    n1 sw   Y  | |jt  W d    d S 1 sw   Y  d S )Nc                   @   r   )z6WarnTests.test_warning_classes.<locals>.MyWarningClassNr   r   r   r   r   MyWarningClass  r"   r   c                   @   r   )z:WarnTests.test_warning_classes.<locals>.NonWarningSubclassNr   r   r   r   r   NonWarningSubclass  r"   r   zbad warning categoryr   z)category must be a Warning subclass, not rI   rt   zgood warning category)r   rO   r   r   r6   r]   r   	exceptionr   r<   r;   r:   ZassertWarnsre   warningrN   ZassertIsInstance)r-   r   r   cmr   r   r   test_warning_classes  sH   
$zWarnTests.test_warning_classesN)r   r    r!   r1   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    
r   c                   @      e Zd ZeZdd ZdS )
CWarnTestsc                 C   &   |  t| j | t| jjd d S N__code__)assertIsNotr   r   assertFalser(   r6   r,   r   r   r   test_accelerated)     zCWarnTests.test_acceleratedN)r   r    r!   rC   r   r   r   r   r   r   r   $      r   c                   @   r   )PyWarnTestsc                 C   r   r   )r   r   r   r=   r(   r6   r,   r   r   r   test_pure_python2  r   zPyWarnTests.test_pure_pythonN)r   r    r!   rG   r   r   r   r   r   r   r   -  r   r   c                   @      e Zd Zdd Zdd ZdS )WCmdLineTestsc              	   C   s~  t j| jd | | jj| jjd | | jj| jjd | | jj| jjd | | jj | jd W d    n1 sAw   Y  | | jj | jd W d    n1 s^w   Y  | | jj | jd W d    n1 s{w   Y  | | jjd | jd	 W d    n1 sw   Y  | jd
 | t| jjd W d    d S 1 sw   Y  d S )NrI   z1:2:3:4:5:6zbogus::Warningzignore:2::4:-5zignore::123zignore::123abczignore::===u   Wärningu   ignore::Wärningzerror::Warning::0r   )	r   r<   r   rO   _OptionError
_setoptionZassertRaisesRegexrN   r6   r,   r   r   r   test_improper_input9  s2   


"z!WCmdLineTests.test_improper_inputc              	   C   s  t j| jds | jd | | jj | jd W d    n1 s&w   Y  | | jj | jd W d    n1 sCw   Y  | jd | t | jdt W d    n1 sew   Y  W d    d S W d    d S 1 s}w   Y  d S )NrI   zignore::Warningzignore::TestWarningz ignore::test.test_warnings.bogusz%error::test.test_warnings.TestWarningztest warning)r   r<   r   r   rO   r   r   r6   r,   r   r   r   test_import_from_moduleN  s   "z%WCmdLineTests.test_import_from_moduleN)r   r    r!   r   r   r   r   r   r   r   7  s    r   c                   @   r@   )CWCmdLineTestsNrB   r   r   r   r   r   Z  rD   r   c                   @   s    e Zd ZeZdd Zdd ZdS )PyWCmdLineTestsc                 C   s"   t ddd\}}}| d| d S )Nz-Wxxx-cpasss0   Invalid -W option ignored: invalid action: 'xxx')r   r]   r-   rcoutr   r   r   r   test_improper_optiona  s   z$PyWCmdLineTests.test_improper_optionc                 C   s0   t ddd\}}}| |  | d| d S )Nz-Wir   z?import sys; sys.modules['warnings'].warn('foo', RuntimeWarning)s   RuntimeWarning)r   r   stripassertNotInr   r   r   r   test_warnings_bootstraph  s
   
z'PyWCmdLineTests.test_warnings_bootstrapN)r   r    r!   rG   r   r   r   r   r   r   r   r   ^  s    r   c                   @   s   e Zd ZdZe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ejdd Zejdd Zejdd ZdS )_WarningsTestsz'Tests specific to the _warnings module.c                 C   sr   t j| jd(}| jddtdd | t| jjd | j`| t| jjd W d    d S 1 s2w   Y  d S )NrI   rJ   r   r   r   )	r   r<   r   r:   r   rO   rN   r6   r   rP   r   r   r   test_filterx  s   "z_WarningsTests.test_filterc                 C   s:  t d}z| jj}i atjd| jdo}| j  | jjdt d | j|t dd | 	|d j
| |d d = | j|t dd | 	t|d	 i | j_i a| jd | 	|d j
j|j |d d = | j`i a| j|t dd | 	t|d	 W d    n1 sw   Y  W || j_d S W || j_d S || j_w )
Nzonceregistry testTr`   r   rK   filer   rn   r   )rN   r   onceregistryr   r   r<   r;   r:   r7   re   rX   rf   r6   rp   )r-   rX   Zoriginal_registryrQ   r   r   r   test_onceregistry  s8   


z _WarningsTests.test_onceregistryc                 C   sj  t d}| jj}ztjd| jd}| j  i }| jj|t dd|d | |d j| | t	|d | t	|d	 | 
d
| |d d = | j`i }i }| jj|t dd|d | |d j| | t	|d | t	|d	 |d d = d| j_i }i }| jj|t dd|d | t	|d W d    n1 sw   Y  W || j_d S W || j_d S || j_w )Nzdefaultaction testTr`   z<test>r   r   rn   ri   ro   rd   +   rb   ,   r   )rN   r   defaultactionr   r<   r;   r7   re   rX   rf   r]   )r-   rX   ZoriginalrQ   r   r   r   r   r   test_default_action  sL   


z"_WarningsTests.test_default_actionc              	   C   s   d}t j| jd2 | jjdtd | j`td}| j| |	 }W d    n1 s/w   Y  W d    n1 s>w   Y  | 
|| d S )Nzdel showwarning testrI   rl   rK   r^   )r   r<   r   r:   rN   r8   r   captured_outputr6   r\   r]   )r-   r   streamresultr   r   r   test_showwarning_missing  s   
z'_WarningsTests.test_showwarning_missingc              	   C   s   d}t j| jdB | jjdtd | jj}z(| j`td}| j| |	 }W d    n1 s4w   Y  W || j_n|| j_w W d    n1 sNw   Y  | 
|| d S )Nzdel _showwarnmsg testrI   rl   rK   r^   )r   r<   r   r:   rN   _showwarnmsgr   r   r6   r\   r]   )r-   r   showr   r   r   r   r   test_showwarnmsg_missing  s   
z'_WarningsTests.test_showwarnmsg_missingc              	   C   s   t j| jd= | jjdtd t| j_td | j	d W d    n1 s*w   Y  d| j_| 
t| jj	d W d    d S 1 sGw   Y  d S )NrI   rl   rK   stdoutzWarning!   )r   r<   r   r:   rN   printr8   r   r   r6   rO   r   r,   r   r   r   test_showwarning_not_callable  s   "z,_WarningsTests.test_showwarning_not_callablec              	   C   s8  d}t j| jd1 | jjdtd | j`td}t	| |
 }W d    n1 s.w   Y  W d    n1 s=w   Y  | |ddd|  |dd	\}}tjtjd
 d }|dd}|\}}	}
}t|	}	| || | |
dtj  | |d|  dt||	  d }| || d S )Nztest show_warningrI   rl   rK   r^   
ro   zToo many newlines in %rri   r   .py:rr    z  )r   r<   r   r:   rN   r8   r   r   r   r   r\   re   countsplitr   r   splitextr   rsplitintr   	linecachegetliner   )r-   r   r   r   Z
first_lineZsecond_lineZexpected_fileZfirst_line_partsr   lineZwarning_classrX   Zexpected_liner   r   r   test_show_warning_output  s.   

z'_WarningsTests.test_show_warning_outputc              	   C   s   t  }|d }zAtjd| jd}|!}| jjdtd d |d< tdt | t| W d    n1 s6w   Y  W ||d< d S W ||d< d S ||d< w )Nr   Tr`   rl   rK   r   )	r'   r   r<   r   r:   rN   r6   r=   rf   )r-   Zglobals_dictZoldfileZcatchrQ   r   r   r   test_filename_none   s   z!_WarningsTests.test_filename_nonec                 C   s8   t dd\}}}| |d | d| | d| d S )Nr   zjimport sys; sys.stderr = None; import warnings; warnings.simplefilter('always'); warnings.warn('Warning!')    s   Warning!s   Error)r   re   r   r-   r   r   r^   r   r   r   test_stderr_none  s   
z_WarningsTests.test_stderr_nonec              
   C   s  dd }| j }tj|dv |jdtd t }|jdtdd|d	d
dd W d    n1 s3w   Y  | d|	  |j
}z3|`
t }|jdtdd|d	gd
dd W d    n1 sew   Y  | d|	  W ||_
n||_
w W d    d S 1 sw   Y  d S )Nc                    s   G  fddd}| S )Nc                       r   )zI_WarningsTests.test_issue31285.<locals>.get_bad_loader.<locals>.BadLoaderc                    s   G  fdddt }|dS )Nc                       r   )zg_WarningsTests.test_issue31285.<locals>.get_bad_loader.<locals>.BadLoader.get_source.<locals>.BadSourcec                    s    S rU   r   r,   splitlines_ret_valr   r   
splitlines   s   zr_WarningsTests.test_issue31285.<locals>.get_bad_loader.<locals>.BadLoader.get_source.<locals>.BadSource.splitlinesN)r   r    r!   r  r   r  r   r   	BadSource  r   r  Zspam)r   )r-   fullnamer  r  r   r   
get_source  s   zT_WarningsTests.test_issue31285.<locals>.get_bad_loader.<locals>.BadLoader.get_sourceN)r   r    r!   r  r   r  r   r   	BadLoader  r   r  r   )r  r  r   r  r   get_bad_loader  s   z6_WarningsTests.test_issue31285.<locals>.get_bad_loaderrI   rt   rK   foobarri   r   Zfoobar)
__loader__r   r   zUserWarning: fooZeggszUserWarning: eggs)r   r   r<   r:   rN   r   r[   r7   r]   r\   r   )r-   r  wmodr^   r   r   r   r   test_issue31285  s6   	

"z_WarningsTests.test_issue31285c              
   C   s   | j }tj|dL |d t|dd ' | t |jdt	ddd d W d    n1 s1w   Y  W d    n1 s@w   Y  W d    d S W d    d S 1 sXw   Y  d S )NrI   r   r   r  r  ri   r   )
r   r   r<   r:   r   	swap_attrrO   r   r7   r   r-   r  r   r   r   test_issue31411<  s   
"z_WarningsTests.test_issue31411c              
   C   s  | j }tj|dn d d td dfg|_| t |dtdd W d    n1 s+w   Y  g |_t	|dd % | t |dtdd W d    n1 sSw   Y  W d    n1 sbw   Y  W d    d S W d    d S 1 szw   Y  d S )NrI   r   r  r  ri   r   )
r   r   r<   r   r   rO   r   r7   r   r  r  r   r   r   test_issue31416G  s"    "z_WarningsTests.test_issue31416c              
   C   s   t j| jdR | jjdtd tt dd) tt dd  | t| jj	d W d    n1 s5w   Y  W d    n1 sDw   Y  W d    d S W d    d S 1 s\w   Y  d S )NrI   rJ   rK   r   s   foor   r  )
r   r<   r   r:   rN   r   Z	swap_itemr'   rO   r6   r,   r   r   r   test_issue31566V  s    "z_WarningsTests.test_issue31566N)r   r    r!   r1   rC   r   r   r   r   r   r   r   r  r  r  r  r   Zcpython_onlyr  r   r!  r   r   r   r   r   r  s&    
%		$


r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	WarningsDisplayTestsziTest the displaying of warnings and the ability to overload functions
    related to displaying warnings.c              
   C   s   d}t }tjtjd d }d}t|| }d}||||j	||f }| 
|| j|||| |d7 }||||j	||f }| 
|| j||||| d S )Nr   r   r   rr   z%s:%s: %s: %s
  %s
z for the win!)r   r   r   r  r   r   r  r	  r   r   re   r   r9   )r-   rX   rL   	file_nameline_num	file_lineformatexpectr   r   r   test_formatwarningf  s&   
z'WarningsDisplayTests.test_formatwarningc                 C   s   t jtjd d }d}t|| }d}t}t	 }| j
||||}| j
||||| | | | |d7 }| j
|||||}t	 }| j
|||||| | ||  d S )Nr   r   rr   r   zfor the win!)r   r   r  r   r   r  r	  r   r   r   r   r9   r8   re   r\   )r-   r#  r$  Zexpected_file_linerX   rL   file_objectr'  r   r   r   test_showwarningx  s,   z%WarningsDisplayTests.test_showwarningc           	   	   C   s   dd }t jtjd d }d}t|| }d}t}t	 }d| d| d	| d
| d|  }t
| jd| | j|||||| | | | W d    d S 1 sZw   Y  d S )Nc              
   S   s"   d|  d| d| d| d| 
S )Nm=:c=:f=:l=:t=r   )rX   rL   r   linenor   r   r   r   myformatwarning  s   "zIWarningsDisplayTests.test_formatwarning_override.<locals>.myformatwarningr   r   rr   r   r+  r,  r-  r.  r/  r9   )r   r   r  r   r   r  r	  r   r   r   r   r  r   r8   re   r\   )	r-   r1  r#  r$  r%  rX   rL   r)  expectedr   r   r   test_formatwarning_override  s    "z0WarningsDisplayTests.test_formatwarning_overrideN)r   r    r!   r1   r(  r*  r3  r   r   r   r   r"  a  s
    r"  c                   @   r@   )CWarningsDisplayTestsNrB   r   r   r   r   r4    rD   r4  c                   @   r   )PyWarningsDisplayTestsc              	   C   s   |  tjtj ttjddd}|td W d    n1 s#w   Y  dd }tj	
tj}|dtj}td| d	 }| || |dd
dtj}td| d| d| d }| || d S )NrQ   utf-8)encodingz
                def func():
                    f = open(__file__, "rb")
                    # Emit ResourceWarning
                    f = None

                func()
            c                  W   s<   t | ddi}|jdd}d| }tdd|}|S )NPYTHONIOENCODINGr6  replacer   z<.*>z<...>)r   r   decodejoinr  resub)rp   resr^   r   r   r   run  s
   z4PyWarningsDisplayTests.test_tracemalloc.<locals>.run-Wdz
            z:5: ResourceWarning: unclosed file <...>
              f = None
            ResourceWarning: Enable tracemalloc to get the object allocation traceback
        z-Xztracemalloc=2z:5: ResourceWarning: unclosed file <...>
              f = None
            Object allocated at (most recent call last):
              File "z7", lineno 7
                func()
              File "z=", lineno 3
                f = open(__file__, "rb")
        )Z
addCleanupr   unlinkZTESTFNopenwritetextwrapdedentr   r   abspathr   re   )r-   fpr?  r   r^   r2  r   r   r   test_tracemalloc  s0   

	z'PyWarningsDisplayTests.test_tracemallocN)r   r    r!   rG   r   rH  r   r   r   r   r5    s    r5  c                   @   sH   e Zd 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S )CatchWarningTestszTest catch_warnings().c                 C   s   | j }|j}|j}|j|dd t  |_|_W d    n1 s"w   Y  | |j| | |j| |j|dd t  |_|_W d    n1 sNw   Y  | |j| | |j| d S NTr   F)r   r   r8   r<   objectr   )r-   r  orig_filtersorig_showwarningr   r   r   test_catch_warnings_restore  s   z-CatchWarningTests.test_catch_warnings_restorec                 C   s.  | j }|j|dd\}| |g  | t|t |d |d | t|d j	d |d | t|d j	d | t|d j	d | t|d j	d |d d = | |g  W d    n1 siw   Y  |j
}|j|d	d}| | | |j
| W d    d S 1 sw   Y  d S )
NTr   rl   r  rn   r  r   ri   F)r   r<   re   r   typerg   r   r6   r   rX   r8   assertIsNone)r-   r  rQ   rM  r   r   r   test_catch_warnings_recording  s&   




"z/CatchWarningTests.test_catch_warnings_recordingc                 C   s   | j }|j|dd}| t|j | | t|j W d    n1 s%w   Y  |j|dd}| t|j | | t|j W d    d S 1 sMw   Y  d S rJ  )r   r<   rO   RuntimeError__exit__	__enter__)r-   r  rx   r   r   r   !test_catch_warnings_reentry_guard  s   "z3CatchWarningTests.test_catch_warnings_reentry_guardc                 C   s   | j }|j}|j}|j|d}| | | |j| | |j| W d    n1 s-w   Y  | |j| |tjd u rp| }| | | |j| | |j| W d    n1 sbw   Y  | |j| d S d S )NrI   r   )	r   r   r8   r<   rP  r   r   r   r)   )r-   r  rL  rM  rQ   r   r   r   test_catch_warnings_defaults
  s"   


z.CatchWarningTests.test_catch_warnings_defaultsc              	      s   d}| j }g  d
 fdd	}t|d|7 |j|dd}| |j| |d || W d    n1 s9w   Y  | |j| W d    n1 sOw   Y  | 	t
|d| | 	|d	 jjd	 | | 	 g  d S )NThis is a warningc                         |  d S rU   r   rX   rL   r   r0  r   r
  Zmy_logr   r   	my_logger#     zLCatchWarningTests.test_record_override_showwarning_before.<locals>.my_loggerr8   Tr   rl   ri   r   NN)r   r   r  r<   r   r8   r   r6   r   re   rf   rX   rp   r-   r   r  r[  logr   rZ  r   'test_record_override_showwarning_before  s   
	z9CatchWarningTests.test_record_override_showwarning_beforec                    s   d}| j }g  d	 fdd	}|j|dd}|d ||_|| W d    n1 s-w   Y  | t d  |  d jd | | |g  d S )
NrW  c                    rX  rU   r   rY  rZ  r   r   r[  <  r\  zLCatchWarningTests.test_record_override_showwarning_inside.<locals>.my_loggerTr   rl   ri   r   r]  )r   r<   r   r8   r6   re   rf   rp   r^  r   rZ  r   'test_record_override_showwarning_inside5  s   
z9CatchWarningTests.test_record_override_showwarning_insidec              	   C   s  | j }|tjd ur| d tjddS}| |jg  |d |	d | t
|jd |	d | t
|jd | t
|jd jd | t
|jd	 jd |  | |jg  W d    n1 skw   Y  t  W d    n1 sw   Y  tdtf |	d W d    n1 sw   Y  | t td
tf W d    n1 sw   Y  W d    n1 sw   Y  | t- tdtf |	d W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   z,module to test is not loaded warnings moduleF)quietrl   r  r  r   ri   r   )r   r   r)   ZskipTestr   Zcheck_warningsre   r   r   r6   r   rX   resetrN   rO   AssertionErrorRuntimeWarning)r-   r  rQ   r   r   r   test_check_warningsI  sD   




$z%CatchWarningTests.test_check_warningsN)r   r    r!   r1   rN  rQ  rU  rV  r`  ra  rf  r   r   r   r   rI    s    rI  c                   @   r@   )CCatchWarningTestsNrB   r   r   r   r   rg  h  rD   rg  c                   @   r@   )PyCatchWarningTestsNrF   r   r   r   r   rh  k  rD   rh  c                   @   sP   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	e
 dkddd ZdS )EnvironmentVariableTestsc                 C   &   t ddddd\}}}| |d d S )Nr   2import sys; sys.stdout.write(str(sys.warnoptions))ignore::DeprecationWarningr   PYTHONWARNINGSPYTHONDEVMODEs   ['ignore::DeprecationWarning']r   re   r  r   r   r   test_single_warningq  s   z,EnvironmentVariableTests.test_single_warningc                 C   rj  )Nr   rk  z1ignore::DeprecationWarning,ignore::UnicodeWarningr   rm  8   ['ignore::DeprecationWarning', 'ignore::UnicodeWarning']rp  r  r   r   r   test_comma_separated_warningsx  s   z6EnvironmentVariableTests.test_comma_separated_warningsc                 C   s(   t dddddd\}}}| |d d S )Nz-Wignore::UnicodeWarningr   rk  rl  r   rm  rr  rp  r  r   r   r   test_envvar_and_command_line  s   z5EnvironmentVariableTests.test_envvar_and_command_linec                 C   s<   t dddddd\}}}| |d | | g d d S )	Nz-Werror::DeprecationWarningr   zjimport sys, warnings; sys.stdout.write(str(sys.warnoptions)); warnings.warn('Message', DeprecationWarning)zdefault::DeprecationWarningr   rm  s<   ['default::DeprecationWarning', 'error::DeprecationWarning'])s"   Traceback (most recent call last):s&     File "<string>", line 1, in <module>s   DeprecationWarning: Message)r	   re   r  r  r   r   r   (test_conflicting_envvar_and_command_line  s   
zAEnvironmentVariableTests.test_conflicting_envvar_and_command_linec           
   	   C   s   | j tu }tr
g }n*|rtd}nd}dd t|dfdd td dfdd td dfdd td dfdd td dfg}dd |D }|r@d}nd}|d	7 }t	d
|dd\}}}dd |
 D }	d | _| |	| d S )N__main__rt   r   rb   c                 S   s   g | ]}t | qS r   )r   encode)r   rY   r   r   r   r     s    zNEnvironmentVariableTests.test_default_filter_configuration.<locals>.<listcomp>zPimport sys; sys.modules.pop('warnings', None); sys.modules['_warnings'] = None; r   z5import warnings; [print(f) for f in warnings.filters]r   T)Z
__isolatedc                 S   s   g | ]}|  qS r   )r   )r   r
  r   r   r   r     s    )r   rG   Py_DEBUGr<  r   DeprecationWarningPendingDeprecationWarningImportWarningResourceWarningr   r  ZmaxDiffre   )
r-   Zpure_python_apiZexpected_default_filtersZmain_module_filterZexpected_outputcoder   r   r^   Zstdout_linesr   r   r   !test_default_filter_configuration  s*   
z:EnvironmentVariableTests.test_default_filter_configurationasciiz%requires non-ascii filesystemencodingc                 C   s<   dt j }tddd|dd\}}}| |t|g  d S )Nzignore:DeprecationWarningr   rk  r6  r   )r8  rn  ro  )r   ZFS_NONASCIIr   re   r   rw  )r-   rn  r   r   r^   r   r   r   test_nonascii  s   
z&EnvironmentVariableTests.test_nonasciiN)r   r    r!   rq  rs  rt  ru  r~  r$   Z
skipUnlessr   getfilesystemencodingr  r   r   r   r   ri  o  s    ri  c                   @   r@   )CEnvironmentVariableTestsNrB   r   r   r   r   r    rD   r  c                   @   r@   )PyEnvironmentVariableTestsNrF   r   r   r   r   r    rD   r  c                   @   s   e Zd Zdd ZdS )BootstrapTestc              	   C   s   t  6}t d tdd|d tdddd|d W d    n1 s%w   Y  W d    d S W d    d S 1 s=w   Y  d S )NZ	encodingsr   r   )Z
PYTHONPATHz-Wrl   )r   Ztemp_cwdr   )r-   cwdr   r   r   test_issue_8766  s   PzBootstrapTest.test_issue_8766N)r   r    r!   r  r   r   r   r   r    s    r  c                   @   r   )FinalizationTestc                 C   s,   d}t d|\}}}| |  d d S )Nzk
import warnings
warn = warnings.warn

class A:
    def __del__(self):
        warn("test")

a=A()
        r   z<string>:7: UserWarning: test)r   re   r:  rstrip)r-   r}  r   r   r   r   r   r   test_finalization  s
   
z"FinalizationTest.test_finalizationc                 C   sh   d}dt  }tdd|\}}}| ||t| dt  }tdd|\}}}| ||t| d S )Ns&   sys:1: ResourceWarning: unclosed file zf = open(%a)r@  r   zimport warnings; f = open(%a))r   r   r=   
startswithr  )r-   r2  r}  r   r   r   r   r   r   test_late_resource_warning  s   z+FinalizationTest.test_late_resource_warningN)r   r    r!   r  r  r   r   r   r   r    s    r  c                   C   s   t j  tj  d S rU   )rG   r   r   rC   r   r   r   r   setUpModule  s   
r  rv  )>
contextlibr   r  r   ior   r<  r   rD  r$   r   r   Ztest.supportr   r   r   Ztest.support.script_helperr   r	   Ztest.test_warnings.datar   r   r   r   Zimport_fresh_modulerG   rC   r(   rx  r   r   r   r#   r4   ZTestCaserA   rE   rH   r   r   r   r   r   r   r   r   r   r"  r4  r5  rI  rg  rh  ri  r  r  r  r  r  ZtearDownModuler   mainr   r   r   r   <module>   sx    

   &	
# p@1 P$
