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 )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   s0   

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	  fddZ fddZ  ZS )BaseTestc                    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!   r+   r0   __classcell__r   r   r.   r   r#   8   s    r#   c                   @      e Zd Z	 dd ZdS )PublicAPITestsc                 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setr4   )r-   Z
target_apir   r   r   test_module_all_attributeZ   s
   z(PublicAPITests.test_module_all_attributeN)r   r    r!   r>   r   r   r   r   r3   T   s    r3   c                   @      e Zd ZeZdS )CPublicAPITestsNr   r    r!   
c_warningsr   r   r   r   r   r@   b       r@   c                   @   r?   )PyPublicAPITestsNr   r    r!   py_warningsr   r   r   r   r   rD   e   rC   rD   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d Zdd  Zd!d" Zd#d$ Zd%S )&FilterTestsc                 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:   r9   UserWarningassertRaisesr5   r-   wr   r   r   
test_errorl   s   
"rL   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 )	NrH   %FilterTests.test_ignore_after_defaultc                         j  t d S Nr   r5   rM   r   messager-   r   r   fw      z/FilterTests.test_error_after_default.<locals>.fz2UserWarning: FilterTests.test_ignore_after_defaultz&self.module.warn(message, UserWarning)rI   rJ   )r   r;   r   r:   r   captured_stderrgetvalueassertInr9   rM   rN   )r-   rP   rX   stderrr   rV   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   ignorerJ   FilterTests.test_ignorer   version)r   r;   r   r:   r9   rM   r5   assertEquallenlistr   rO   r   r   r   test_ignore   s   
"rb   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_   rR   c                      rS   rT   rU   r   rV   r   r   rX      rY   z0FilterTests.test_ignore_after_default.<locals>.fra   rJ      )r   r;   r   r:   r9   rM   rd   re   r-   rP   rX   r   rV   r   test_ignore_after_default   s   
"rR   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_   alwaysrJ   FilterTests.test_alwaysc                      rS   rT   rU   r   rV   r   r   rX      rY   z"FilterTests.test_always.<locals>.frh   r      )
r   r;   r   r:   r9   rM   rd   re   rW   argsri   r   rV   r   test_always   s   
"rl   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                      rS   rT   rU   r   rV   r   r   rX      rY   z0FilterTests.test_always_after_default.<locals>.frh   rm   r   rk   rJ   rn      )
r   r;   r   r:   rd   re   rW   ro   r9   rM   ri   r   rV   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_   defaultrJ   FilterTests.test_defaultrn   r   rm   rh   zloop variant unhandled)r   r;   r   r:   r9   rM   ranger5   rd   rW   re   
ValueError)r-   rP   rW   xr   r   r   test_default   s"   
"rt   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   rJ   FilterTests.test_modulerm   r   )
r   r;   r   r:   r9   rM   r5   rd   rW   re   r-   rP   rW   r   r   r   test_module   s   

"ry   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   rJ   FilterTests.test_once__init__.py*   rm      r   ztest_warnings2.py)
r   r;   r   r:   r9   rM   r6   rd   rW   re   rz   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_   rk   msgfilenamer~   module_globalsrh   rn   )
r   r;   r   r   rM   r6   rd   re   rN   	TypeErrorrO   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 )NrH   rI   rJ   FilterTests.test_inheritance)	r   r;   r   r:   r9   WarningrN   rM   r5   rO   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_   ra   rJ   rI   )rK   appendFilterTests.test_orderingz!order handling for actions failedr   )
r   r;   r   r:   r9   rM   r5   Zfailrd   re   rO   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_   rI    r   convert to errorzhandle normallyrm   ra   zfiltered outzhex*zhex/octznonmatching text)r   r;   r   r9   r   rN   rM   r5   r:   rd   strrW   assertIsrK   ZassertNotEqual)r-   rP   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_   ra   rI   matchzmatch prefixzsuffix matchzsomething completely different)	r   r;   r   r   rM   r9   rN   r5   rd   rO   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 rT   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 )rs   r   )rM   ).0i)r   r   r   
<listcomp>A  s    z7FilterTests.test_mutate_filter_list.<locals>.<listcomp>rn   Tr_   bzf.pyr~   rm   )
ru   r   r;   r   r   r6   rM   rd   r   rW   rO   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 )
NrH   rI   rJ   rh   ra   rn   z(filterwarnings inserted duplicate filterr   z>filterwarnings did not promote filter to the beginning of list)	r   r;   r   r:   r9   rM   rd   re   r   r,   r   r   r   %test_filterwarnings_duplicate_filtersH     
"z1FilterTests.test_filterwarnings_duplicate_filtersc                 C   r   )
NrH   rI   rJ   rh   ra   rn   &simplefilter inserted duplicate filterr   z<simplefilter did not promote filter to the beginning of list)	r   r;   r   r:   r   rM   rd   re   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   r`   ra   rI   r   test_append_duplicaterJ   rn   r   r   z+appended duplicate changed order of filters)
r   r;   r   r:   r   r5   rM   rd   re   r   rO   r   r   r   r   i  s    
"z!FilterTests.test_append_duplicateN)r   r    r!   rQ   r^   rg   rj   rp   rr   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   h   s(    	rG   c                   @   r?   )CFilterTestsNrA   r   r   r   r   r   x  rC   r   c                   @   r?   )PyFilterTestsNrE   r   r   r   r   r   {  rC   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 )	WarnTestsc                 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 %drm   )r   r;   r   r   ru   r5   rd   r   rW   r   rK   rM   )r-   rP   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   rm   )
r   r   r;   r   r   r5   rd   r   rW   rM   )r-   obrP   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spam1rm   stacklevel.pyZspam2r   r   r   r;   r   innerrd   ospathbasenamer   ZouterrO   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spam3rh   r
   rm   r   Zspam4Zspam5rn   r}   Zspam6zspam6.5rq   Zspam7i'  r   r   rO   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_   rk   r   rh   )r   Zunloadr   r   r   r;   r   Z&test.test_warnings.data.import_warningrd   re   r   __file__)r-   rP   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)r`   rk   rJ   r   )	compiler   r;   r   r   rM   r   rd   r   )r-   r   ZcodeobjrP   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_   rk   rJ   )u   nonasciié€u   surrogater   rh   rm   )r   r;   r   r:   r9   rM   r   fsencodeUnicodeEncodeErrorr6   rd   r   )r-   rP   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 )Nrh   r~   registry)rN   r   r   r6   rM   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                   @   r2   )z-WarnTests.test_bad_str.<locals>.BadStrWarningc                 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!   r   r   r   r   r   BadStrWarning  s    r   )r   rN   rv   r   r5   )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 rH   rs   zgood warning category)r   rN   r   r   r5   r\   r   	exceptionr   r;   r:   r9   ZassertWarnsrd   warningrM   ZassertIsInstance)r-   r   r   cmr   r   r   test_warning_classes  sH   
$zWarnTests.test_warning_classesN)r   r    r!   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(   r5   r,   r   r   r   test_accelerated)     zCWarnTests.test_acceleratedN)r   r    r!   rB   r   r   r   r   r   r   r   $      r   c                   @   r   )PyWarnTestsc                 C   r   r   )r   r   r   r<   r(   r5   r,   r   r   r   test_pure_python2  r   zPyWarnTests.test_pure_pythonN)r   r    r!   rF   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 )NrH   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   rN   _OptionError
_setoptionZassertRaisesRegexrM   r5   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 )NrH   zignore::Warningzignore::TestWarningz ignore::test.test_warnings.bogusz%error::test.test_warnings.TestWarningztest warning)r   r;   r   r   rN   r   r   r5   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?   )CWCmdLineTestsNrA   r   r   r   r   r   Z  rC   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!   rF   r   r   r   r   r   r   r   r   ^  s    r   c                   @   s   e 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 )_WarningsTestsc                 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 )NrH   rI   r   r   r   )	r   r;   r   r9   r   rN   rM   r5   r   rO   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   rJ   filer~   rm   r   )rM   r   onceregistryr   r   r;   r:   r9   r6   rd   rW   re   r5   ro   )r-   rW   Zoriginal_registryrP   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   rm   rh   rn   rc   +   ra   ,   r   )rM   r   defaultactionr   r;   r:   r6   rd   rW   re   r\   )r-   rW   ZoriginalrP   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 testrH   rk   rJ   r]   )r   r;   r   r9   rM   r7   r   captured_outputr5   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 testrH   rk   rJ   r]   )r   r;   r   r9   rM   _showwarnmsgr   r   r5   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 )NrH   rk   rJ   stdoutzWarning!   )r   r;   r   r9   rM   printr7   r   r   r5   rN   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_warningrH   rk   rJ   r]   
rn   zToo many newlines in %rrh   r   .py:rq    z  )r   r;   r   r9   rM   r7   r   r   r   r   r[   rd   countsplitr   r   splitextr   rsplitintr   	linecachegetliner   )r-   r   r   r   Z
first_lineZsecond_lineZexpected_fileZfirst_line_partsr   lineZwarning_classrW   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_   rk   rJ   r   )	r'   r   r;   r   r9   rM   r5   r<   re   )r-   Zglobals_dictZoldfileZcatchrP   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   rd   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 rT   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_loaderrH   rs   rJ   foobarrh   r~   Zfoobar)
__loader__r   r   zUserWarning: fooZeggszUserWarning: eggs)r   r   r;   r9   rM   r   rZ   r6   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 )NrH   r   r   r  r  rh   r   )
r   r   r;   r9   r   	swap_attrrN   r   r6   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 )NrH   r   r  r  rh   r   )
r   r   r;   r   r   rN   r   r6   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 )NrH   rI   rJ   r   s   foor   r  )
r   r;   r   r9   rM   r   Z	swap_itemr'   rN   r5   r,   r   r   r   test_issue31566V  s    "z_WarningsTests.test_issue31566N)r   r    r!   rB   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d Zdd Zdd ZdS )WarningsDisplayTestsc              
   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   rq   z%s:%s: %s: %s
  %s
z for the win!)r   r   r   r  r   r   r  r  r   r   rd   r   r8   )r-   rW   rK   	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   rq   r   zfor the win!)r   r   r  r   r   r  r  r   r   r   r   r8   r7   rd   r[   )r-   r"  r#  Zexpected_file_linerW   rK   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   )rW   rK   r   linenor   r   r   r   myformatwarning  s   "zIWarningsDisplayTests.test_formatwarning_override.<locals>.myformatwarningr   r   rq   r   r*  r+  r,  r-  r.  r8   )r   r   r  r   r   r  r  r   r   r   r   r  r   r7   rd   r[   )	r-   r0  r"  r#  r$  rW   rK   r(  expectedr   r   r   test_formatwarning_override  s    "z0WarningsDisplayTests.test_formatwarning_overrideN)r   r    r!   r'  r)  r2  r   r   r   r   r!  a  s
    r!  c                   @   r?   )CWarningsDisplayTestsNrA   r   r   r   r   r3    rC   r3  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 )NrP   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PYTHONIOENCODINGr5  replacer   z<.*>z<...>)r   r   decodejoinr  resub)ro   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   rd   )r-   fpr>  r   r]   r1  r   r   r   test_tracemalloc  s0   

	z'PyWarningsDisplayTests.test_tracemallocN)r   r    r!   rF   r   rG  r   r   r   r   r4    s    r4  c                   @   sF   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S )CatchWarningTestsc                 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   r7   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   rk   r  rm   r  r   rh   F)r   r;   rd   r   typerf   r   r5   r   rW   r7   assertIsNone)r-   r  rP   rL  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 rI  )r   r;   rN   RuntimeError__exit__	__enter__)r-   r  rw   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 )NrH   r   )	r   r   r7   r;   rO  r   r   r   r)   )r-   r  rK  rL  rP   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 rT   r   rW   rK   r   r/  r   r	  Zmy_logr   r   	my_logger#     zLCatchWarningTests.test_record_override_showwarning_before.<locals>.my_loggerr7   Tr   rk   rh   r   NN)r   r   r  r;   r   r7   r   r5   r   rd   re   rW   ro   r-   r   r  rZ  logr   rY  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 )
NrV  c                    rW  rT   r   rX  rY  r   r   rZ  <  r[  zLCatchWarningTests.test_record_override_showwarning_inside.<locals>.my_loggerTr   rk   rh   r   r\  )r   r;   r   r7   r5   rd   re   ro   r]  r   rY  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)quietrk   r  r  r   rh   r   )r   r   r)   ZskipTestr   Zcheck_warningsrd   r   r   r5   r   rW   resetrM   rN   AssertionErrorRuntimeWarning)r-   r  rP   r   r   r   test_check_warningsI  sD   




$z%CatchWarningTests.test_check_warningsN)
r   r    r!   rM  rP  rT  rU  r_  r`  re  r   r   r   r   rH    s    rH  c                   @   r?   )CCatchWarningTestsNrA   r   r   r   r   rf  h  rC   rf  c                   @   r?   )PyCatchWarningTestsNrE   r   r   r   r   rg  k  rC   rg  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   rd   r  r   r   r   test_single_warningq  s   z,EnvironmentVariableTests.test_single_warningc                 C   ri  )Nr   rj  z1ignore::DeprecationWarning,ignore::UnicodeWarningr   rl  8   ['ignore::DeprecationWarning', 'ignore::UnicodeWarning']ro  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   rj  rk  r   rl  rq  ro  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   rl  s<   ['default::DeprecationWarning', 'error::DeprecationWarning'])s"   Traceback (most recent call last):s&     File "<string>", line 1, in <module>s   DeprecationWarning: Message)r	   rd   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__rs   r   ra   c                 S   s   g | ]}t | qS r   )r   encode)r   rX   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   rF   Py_DEBUGr;  r   DeprecationWarningPendingDeprecationWarningImportWarningResourceWarningr   r  ZmaxDiffrd   )
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   rj  r5  r   )r7  rm  rn  )r   ZFS_NONASCIIr   rd   r   rv  )r-   rm  r   r   r]   r   r   r   test_nonascii  s   
z&EnvironmentVariableTests.test_nonasciiN)r   r    r!   rp  rr  rs  rt  r}  r$   Z
skipUnlessr   getfilesystemencodingr  r   r   r   r   rh  o  s    rh  c                   @   r?   )CEnvironmentVariableTestsNrA   r   r   r   r   r    rC   r  c                   @   r?   )PyEnvironmentVariableTestsNrE   r   r   r   r   r    rC   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-Wrk   )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   rd   r9  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-   r1  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 rT   )rF   r   r   rB   r   r   r   r   setUpModule  s   
r  ru  )>
contextlibr   r  r   ior   r;  r   rC  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_modulerF   rB   r(   rw  r   r   r   r#   r3   ZTestCaser@   rD   rG   r   r   r   r   r   r   r   r   r   r!  r3  r4  rH  rf  rg  rh  r  r  r  r  r  ZtearDownModuler   mainr   r   r   r   <module>   sx    

   &	
# p@1 P$
