
    <|hG                     h   d dl 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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 d Zd	 Zd
 Z G d de      Z G d deej4                        Z G d de      Z G d dee      Z e	j<                   eed      d       G d dee             Z  G d dee	j4                        Z! G d deej4                        Z"d Z# e#         e	jH                  edu d       G d de"             Z%e&dk(  r ejN                          yy# e$ r dZY w xY w)     )print_function)absolute_importN)
fileobjectOpenDescriptorGreenOpenDescriptor)sysinfoc                 t    |D ]#  }| j                  |       | j                          % | j                          y N)writeflushclose)fobjline	characters      \/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/test__fileobject.pyWriterr      s1     	

9

 	JJL    c                 N    	 t        j                  |        y # t        $ r Y y w xY wr   )osr   OSError)fds    r   close_fd_quietlyr   "   s$    
 s    	$$c                 B     t        j                          fd       }|S )Nc                 P    | j                   s| j                  d        |        y )NzDoesn't work with regular files)WORKS_WITH_REGULAR_FILESskipTest)selffuncs    r   fz*skipUnlessWorksWithRegularFiles.<locals>.f)   s     ,,MM;<T
r   )	functoolswraps)r    r!   s   ` r   skipUnlessWorksWithRegularFilesr$   (   s%    __T  Hr   c                       e Zd Zd Zd Zy)CleanupMixinc                     t        j                  |      \  }}| j                  t        j                  |       | j                  t
        |       ||fS r   )tempfilemkstemp
addCleanupr   remover   )r   suffixfilenopaths       r   _mkstempzCleanupMixin._mkstemp2   sA    ''/		4((&1t|r   c                     t        j                         \  }}| j                  t        |       | j                  t        |       ||fS r   )r   piper*   r   )r   rws      r   _pipezCleanupMixin._pipe8   s8    wwy1(!,(!,!tr   N)__name__
__module____qualname__r/   r4    r   r   r&   r&   1   s    r   r&   c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d        Z	 dd	Ze
d
        Ze
d        Ze
d        Ze
d        Ze
d        Ze
d        Ze
d        Zd Ze
ej,                  d               Ze
d        Zy)TestFileObjectBlockTc                 "    t         j                  S r   )r   FileObjectBlockr   s    r   _getTargetClassz#TestFileObjectBlock._getTargetClassE       )))r   c                 .     | j                         |i |S r   r>   r   argskwargss      r   _makeOnezTestFileObjectBlock._makeOneH       %t##%t6v66r   c                 T    | j                         \  }} | j                  ||ffi | y r   )r4   _do_test_del)r   rD   r2   r3   s       r   	_test_delzTestFileObjectBlock._test_delK   s*    zz|11a&+F+r   c                    |\  }} | j                   |dfi |}|j                  d       	 |j                          dd l
}|j                         5  |j                  dt               ~t        j                          d d d        |j!                  dd      r:| j#                  t$        t        f      5  t'        j(                  |       d d d        nt'        j(                  |       | j                  |d	      5 }| j+                  |j-                         d       d d d        y # t        $ r= t	        dt        |      t        j                         dd l}|j                          Y *w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nwb   xzFailed flushing fileobject)filer   ignorer   Trb)rE   r   r   IOErrorprintreprsysstderr	traceback	print_excwarningscatch_warningssimplefilterResourceWarninggccollectgetassertRaisesr   r   r   assertEqualread)	r   r1   rD   r2   r3   srU   rW   r   s	            r   rH   z TestFileObjectBlock._do_test_delO   sG   1DMM!T,V,		"GGI 	$$& 	!!(O<JJL		 ::gt$""GW#56   HHQK]]1d# 	0tTYY[$/	0 	0)  	".QcjjI!		"	 	 	0 	0s6   D! ,E*1E67!F!AE'&E'*E36E?Fc                 $    | j                          y r   rI   r=   s    r   test_delzTestFileObjectBlock.test_dell   s    r   c                 (    | j                  d       y )NTr   rc   r=   s    r   test_del_closez"TestFileObjectBlock.test_del_closep   s    T"r   c                    | j                  d      \  }}d}t        j                  |d       t        j                  ||       t        j                  |       t	        |d      5 }|j                  d       |j                  d      }d d d        t	        |d      5 }| j                  |dd      }| j                  |j                                |j                  d       | j                  d|j                                |j                  d      }d d d        | j                  |       | j                  |       y # 1 sw Y   xY w# 1 sw Y   :xY w)	Nz".gevent.test__fileobject.test_seeks   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   BBBBBBBBBBBBBBBrO      i   Frf   )r/   r   r   r   openseekr`   rE   
assertTrueseekabler_   tell)r   r-   r.   ra   r!   native_dataf_rawfileobj_datas           r   	test_seekzTestFileObjectBlock.test_seekt   s   }}%IJ
#

$ 	'FF2J&&,K	' $ 	(eT7A OOAJJL)FF2JR*
 66$<L	( 	a(l3%	' 	'	( 	(s   $#D>A6E
>E
Ec                 n   | j                  d|z         \  }}t        j                  ||       t        j                  |       t	        j
                  ||fi |5 } t        ||             }	d d d        |r/ | j                  ||fi |5 } t        ||             }
d d d        nNt        j
                  } |||fi |5 }| j                  |      5 } t        ||             }
d d d        d d d        | j                  	
       |
S # 1 sw Y   xY w# 1 sw Y   )xY w# 1 sw Y   =xY w# 1 sw Y   AxY w)Nz.gevent_test_)	r/   r   r   r   iorj   getattrrE   r_   )r   	byte_data	open_modemeth	open_pathopen_kwargsr-   r.   r!   ro   gevent_dataopenerraws                r   __check_native_matchesz*TestFileObjectBlock.__check_native_matches   s4    }}_y%@A
#
WWT944 	-*'!T*,K	- tY>+> 1!.ga.01 1
 WWFi7;7 53]]3' 51"2'!T"2"4K55 	k2	- 	-1 15 55 5s<   D
D?D+D#D+DDD(	$D++D4c                 T    | j                  dd      }| j                  |t               y )Ns   abcdefgr2   *_TestFileObjectBlock__check_native_matchesassertIsInstancestrr   r{   s     r   test_str_default_to_nativez.TestFileObjectBlock.test_str_default_to_native   s&     11*cBk3/r   c                 x    | j                  dj                  d      ddd      }| j                  |t               y )Nu   ☃zutf-8zr+   )	bufferingencoding)r   encoder   r   r   s     r   test_text_encodingz&TestFileObjectBlock.test_text_encoding   s?    11!!'*' 2 

 	k3/r   c                      y r   r8   r=   s    r   test_does_not_leak_on_exceptionz3TestFileObjectBlock.test_does_not_leak_on_exception   s     	r   c                     t         j                  dkD  r| j                  d       | j                  ddd      }| j	                  |d   t
               | j                  t        |      d       y )	N      U file mode was removed in 3.11   line1
line2
line3lastline

rbU	readlinesrx   r      )rS   version_infor   r   r   bytesr_   lenr   s     r    test_rbU_produces_bytes_readlinez4TestFileObjectBlock.test_rbU_produces_bytes_readline   sh    g%MM;< 112 2 

 	k!ne4[)1-r   c                     t         j                  dkD  r| j                  d       | j                  ddd      }| j	                  |d   t
               y )Nr   r   r   rUr   r   r   )rS   r   r   r   r   r   r   s     r   test_rU_produces_nativez+TestFileObjectBlock.test_rU_produces_native   sQ    g%MM;<112 2 

 	k!nc2r   c                 X    | j                  ddd      }| j                  |t               y )N   line1
r2   readliner   r   r   s     r   test_r_readline_produces_nativez3TestFileObjectBlock.test_r_readline_produces_native   s2    11 2 

 	k3/r   c                 Z    | j                  dddd      }| j                  |t               y )Nr   r2   r   F)rx   ry   r   r   s     r   *test_r_readline_on_fobject_produces_nativez>TestFileObjectBlock.test_r_readline_on_fobject_produces_native   s5    11	 2 
 	k3/r   c                     t        j                         \  }}| j                  |      }| j                  |d      }|j                          |j                          y )Nr3   )r   r1   rE   r   )r   r2   r3   xys        r   test_close_pipez#TestFileObjectBlock.test_close_pipe   sA    wwy1MM!MM!S!				r   c                      j                  d      \   j                        }t        j                        }t        j
                  rdn} j                  |j                          j                  |j                  |        G fddt              } j                   |       d      } j                  t              5  t        |d       d d d        |j                           j                  t              5  t        |d       d d d        |j                          	 |j                           j                  |j                          j                  |j                  |        fd} |       t              5 } ||       d d d        t        j                        5 } ||       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# t        $ r Y w xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)Nz#.gevent_test_named_path_after_closez<fdopen>c                   8    e Zd Z fdZd xZxZxZxZZd xZ	Z
y);TestFileObjectBlock.test_name_after_close.<locals>.Namelessc                     S r   r8   )r   r-   s    r   r-   zBTestFileObjectBlock.test_name_after_close.<locals>.Nameless.fileno  s    r   c                      y)NFr8   r=   s    r   <lambda>zDTestFileObjectBlock.test_name_after_close.<locals>.Nameless.<lambda>	      r   c                      y)NTr8   r=   s    r   r   zDTestFileObjectBlock.test_name_after_close.<locals>.Nameless.<lambda>
  r   r   N)r5   r6   r7   r-   r   r   isattyclosedwritablerm   readable)r-   s   r   Namelessr     s+    9KKEKEKFKVh"33Hxr   r   rO   namec                     j                  |       }j                  |j                         |j                          j                  |j                         y r   )rE   r_   r   r   )argr!   r.   r   s     r   checkz8TestFileObjectBlock.test_name_after_close.<locals>.check  sB    c"AQVVT*GGIQVVT*r   )r/   rE   r   fdopen	greentestPY2r_   r   objectr^   AttributeErrorru   r   r   rj   rt   )	r   r!   nfnf_namer   namelessr   r-   r.   s	   `      @@r   test_name_after_closez)TestFileObjectBlock.test_name_after_close   s    }}%JK MM&!YYv !**6('*
	4v 	4 ==T2~. 	&Hf%	&~. 	&Hf%	& 	
		HHJ 	('*	+ 	d $Z 	2"I	 WWT] 	b"I	 	=	& 	&	& 	&  		"	 		 	sB   G G'G 	G'.	G3 G	G	G$#G$'G03G<c                 \     j                  d      \  }}t        j                  |d       t        j                  |       t	        d      t               fd} j                  |d      5  |dd        |dd	        |dd
        |dd       d d d        y # 1 sw Y   y xY w)Nz.gevent_test_readintos   hello world    c                     j                  d |        }j                  |t        |             j                  d | |       y r   )readintor_   r   )
byte_countexpected_data
bytes_readbufr!   mbufr   s      r   assertReadIntoz@TestFileObjectBlock.test_readinto_serial.<locals>.assertReadInto7  sD    D*$56JZ]);<S*-}=r   rO      s   he      ls   lo worldr   )r/   r   r   r   	bytearray
memoryviewrE   )r   r-   r.   r   r   r!   r   s   `   @@@r   test_readinto_serialz(TestFileObjectBlock.test_readinto_serial.  s    }}%<=
(
m#	>
 ]]4& 	$!1e$1d#2{+2s#		$ 	$ 	$s   4%B""B+N)r`   T)r5   r6   r7   r   r>   rE   rI   rH   rd   rg   r$   rr   r   r   r   r   r   r   r   r   r   r   ignores_leakcheckr   r   r8   r   r   r:   r:   ?   s     $*7,0:# %4 %4: 7;2 %0 %0
 %0 %0 % %
 %. %. %3 %3 %0 %0 %0 %0 %  6 ! %6p %$ %$r   r:   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)ConcurrentFileObjectMixinc                     | j                         \  }}| j                  |d      }| j                  |       | j                  |d      }| j                  |       | j                  t	        |d      t        |             y )NrO   r3   read1)r4   rE   _close_on_teardownrl   hasattrdir)r   r2   r3   readerwriters        r   test_read1_binary_presentz3ConcurrentFileObjectMixin.test_read1_binary_presentG  sf    zz|1q$''q#&'0#f+>r   c                     | j                         \  }}| j                  |d      }| j                  |       | j                  t        j
                  |       | j                  t        |d      t        |             y )Nrtr   )	r4   rE   r   r*   r   r   assertFalser   r   r   r2   r3   r   s       r   test_read1_text_not_presentz5ConcurrentFileObjectMixin.test_read1_text_not_presentP  s\    zz|1q$''!$13v;?r   c                     | j                         \  }}| j                  t        j                  |       | j	                  |      }| j                  |       | j                  t        |d             y )Nr   )r4   r*   r   r   rE   r   r   r   r   s       r   test_read1_defaultz,ConcurrentFileObjectMixin.test_read1_defaultX  sV     zz|1!$q!'12r   c                    | j                         \  }}| j                  |dd      }| j                  |dd      }| j                  |       | j                  |       |j                  d       |j	                  d      }| j                  |d       |j                  dg       |j	                  d      }| j                  |d       y )NrO   r   )bufsizerK      ar      2)r4   rE   r   r   r`   r_   
writelines)r   r2   r3   r   r   bs         r   test_bufsize_0z(ConcurrentFileObjectMixin.test_bufsize_0a  s    zz|1MM!T1M-MM!T1M-""	FF1ID!	dVFF1ID!r   c                 ,   dd l }| j                         \  }}g d}t        j                  t        | j                  |d      |      }	 |j                         5  t        j                  dkD  rd}| j                  d       n|j                  dt               d}| j                  ||      }d d d        j                         }|j                          | j                  d	|       |j                          y # 1 sw Y   LxY w# |j                          w xY w)
Nr   )r   s   line2s   line3
s   line4
line5s   
line6rK   r   r2   r   rN   r   z#line1
line2
line3
line4
line5
line6)rW   r4   geventspawnr   rE   rX   rS   r   r   rY   DeprecationWarningr`   r   r_   kill)	r   rW   r2   r3   linesgmoder   results	            r   test_newlinesz'ConcurrentFileObjectMixin.test_newlinesp  s    zz|1ULLq$!7?	((* 	.##g-DMM"CD ))(4FGD}}Q-	. YY[FJJLGPFFH	. 	. FFHs%   D AC5*:D 5C>:D Dc                    | j                         \  }}| j                  | j                  |d            }| j                  | j                  |d            }t        j                  t
        |dg      }	 t        d      }t        d      }|j                  |      }|j                  |      }	| j                  |d       | j                  |d | d       | j                  |	d       |j                          y # |j                          w xY w)NrO   rK   s   hellor   r   r   )
r4   r   rE   r   r   r   r   r   r_   r   )
r   r2   r3   rfwfr   buf1buf2n1n2s
             r   test_readintoz'ConcurrentFileObjectMixin.test_readinto  s     zz|1$$T]]1d%;<$$T]]1d%;<LLhZ0	R=DR=DT"BT"BR#T#2Y1R#FFHAFFHs   3A1C5 5DN)	r5   r6   r7   r   r   r   r   r   r   r8   r   r   r   r   C  s!    ?@3".r   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestFileObjectThreadc                 "    t         j                  S r   )r   FileObjectThreadr=   s    r   r>   z$TestFileObjectThread._getTargetClass  s    ***r   c                 (    | j                  d       y )NFrf   rc   r=   s    r   test_del_noclosez%TestFileObjectThread.test_del_noclose  s    
 	U#r   c                 ,    t        j                  d      NzRace conditionsunittestSkipTestr=   s    r   rd   zTestFileObjectThread.test_del       122r   c                 ,    t        j                  d      r  r  r=   s    r   rg   z#TestFileObjectThread.test_del_close  r	  r   N)r5   r6   r7   r>   r  rd   rg   r8   r   r   r   r     s    +$ 33r   r   FileObjectPosixzNeeds FileObjectPosixc                   L    e Zd Zej                  rej
                  rdZd Zd Zy)TestFileObjectPosixFc                 "    t         j                  S r   )r   r  r=   s    r   r>   z#TestFileObjectPosix._getTargetClass  r?   r   c                    | j                         \  }}| j                  t              5 }t        j                  |dt        j
                         d d d        j                  }| j                  t              5 }| j                  |dd      }|j                  j                  d       d d d        |j                  }| j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                         | j                  t        |      t        |             y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r2   Frf   )r4   r^   r   r   lseekSEEK_SET	exceptionrP   rE   fileiork   r_   errnostrerrorrC   r   )r   r2   _wctxos_exr!   io_exs          r   test_seek_raises_ioerrorz,TestFileObjectPosix.test_seek_raises_ioerror  s    

2w' 	(3HHQ2;;'	(w' 	3aE2A HHMM!	 ekk28UZZ0USZ0	( 	(	 	s   &E80E E E)N)	r5   r6   r7   r
   LIBUVLINUXr   r>   r  r8   r   r   r  r    s#     }} $) *1r   r  c                       e Zd Zd Zy)TestTextModec                    t        j                          | j                  d      \  }}t        j                  |       t        |d      5 }|j                  d       d d d        t        |d      5 }|j                         }d d d        | j                  t        j                  j                  d             y # 1 sw Y   ^xY w# 1 sw Y   ExY w)Nz%.gevent.test__fileobject.test_defaultr3   
rO   ascii)r   get_hubr/   r   r   rj   r   r`   r_   linesepr   )r   r-   r.   r!   datas        r    test_default_mode_writes_linesepz-TestTextMode.test_default_mode_writes_linesep  s    
 	}}%LM
$_ 	GGDM	 $ 	668D	 	rzz009:	 		 	s   
B90C9CCN)r5   r6   r7   r%  r8   r   r   r  r    s    ;r   r  c                      e Zd Zd Zd Zd Zd Zd Z edd       ed	d
       edd       edd       edd       edd       edd       edd       edd       eddd       eddd       ed dd!"      fZd# Z	y$)%TestOpenDescriptorc                     t         S r   r   r=   s    r   r>   z"TestOpenDescriptor._getTargetClass  s    r   c                 .     | j                         |i |S r   rA   rB   s      r   rE   zTestOpenDescriptor._makeOne  rF   r   c                 v    | j                  ||      5   | j                  |i | d d d        y # 1 sw Y   y xY wr   )assertRaisesRegexrE   )r   regexkindrC   rD   s        r   _checkzTestOpenDescriptor._check  s:    ##D%0 	+DMM4*6*	+ 	+ 	+s   /8c                     | t         |fS r   )	TypeErrorrerD   s     r   r   zTestOpenDescriptor.<lambda>  s    Y 7 r   c                     | t         |fS r   )
ValueErrorr1  s     r   r   zTestOpenDescriptor.<lambda>  s    Z 8 r   r   *   )r   r   nope)r   r   )r   errors)r7  aoeugzmode U cannot be combinedwUztext and binaryrtbzappend mode at oncerwzexactly one+ztake an encodingrO   r!  )r   r   ztake an errorsstrict)r   r7  ztake a newliner   )r   newlinec                    ddl m} | j                         \  }}| j                  |dddd      }| j	                  |j
                         |j                         }| j                  ||       t        j                  |       y )Nr   )WriteallMixinrK   FT)r   closefdatomic_write)
gevent._fileobjectcommonr@  r4   rE   rl   rB  openedr   r   r   )r   r@  r-   r  descr   s         r   test_atomicwrite_fdz&TestOpenDescriptor.test_atomicwrite_fd  so    :ZZ\
}}VT'(%**.  0 	))*{{}dM2
r   N)
r5   r6   r7   r>   rE   r.  casevaseCASESrF  r8   r   r   r'  r'    s    7+ 8D8DV"[F+Z"%Xb!V'"(t4U+".]%dW=D:D$7Er   r'  c            	          t         j                  D ]/  \  } }}t        t         d| j                  dd      z   | ||fd       1 y )Ntest_ _c                 ,     | j                   ||dfi |S )Nr   )r.  )r   _re_kind_kws       r   r   zpop.<locals>.<lambda>%  s    KDKKUTU<]Y\<] r   )r'  rI  setattrreplace)r,  r-  rD   s      r   poprT  !  sE    177 
tV%--S*A A"$F]	

r   zNo support for non-blocking IOc                       e Zd Zd Zy)TestGreenOpenDescriptonc                     t         S r   r   r=   s    r   r>   z'TestGreenOpenDescripton._getTargetClass+  s    ""r   N)r5   r6   r7   r>   r8   r   r   rV  rV  )  s    #r   rV  __main__)(
__future__r   r   r"   r[   rt   r   rS   r(   r  r   r   rC  r   gevent._fileobjectposixr	   ImportErrorgevent.testingtestingr   r
   r   r   r$   r   r&   TestCaser:   r   r   
skipUnlessr   r  r  r'  rT  skipIfrV  r5   mainr8   r   r   <module>rb     s]   % &  	 	 	 
     3;
 # "
6 A$,#,,A$HX Xv34.3: J)*!13-!1	!1F;<!2!2 ;()y'9'9 )V
 $,.NO#0 # P# zINN A  s   D' 'D10D1