Ë
    oj·  ã                   ó¸   — d Z ddlmZ ddlmZ ddlmZ  ej                  «       sddlm	Z	  G d„ de«      Z
 e«       j                  e
j                  «       «       y)	z&
Tests for L{twisted.internet.stdio}.
é    )ÚProtocol)ÚReactorBuilder)Úplatform)Ú
StandardIOc                   óh   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Z ej                  «       rd
Zyy)ÚStdioFilesTestszI
    L{StandardIO} supports reading and writing to filesystem files.
    c                 óÄ   — | j                  «       }t        |d«      j                  «        t        |d«      | _        | j	                  | j                  j                  «       y )NÚwbzrb+)ÚmktempÚopenÚcloseÚ	extraFileÚ
addCleanup)ÚselfÚpaths     úB/usr/lib/python3/dist-packages/twisted/internet/test/test_stdio.pyÚsetUpzStdioFilesTests.setUp   sD   € Ø�{‰{‹}ˆÜˆT�4Ó×ÑÔ Ü˜d EÓ*ˆŒØ�‰˜Ÿ™×,Ñ,Õ-ó    c                 óà  ‡— | j                  «       Š G ˆfd„dt        «      }| j                  «       }t        |d«      5 }|j	                  d«       ddd«       t        |d«      5 } |«       }t        ||j                  «       | j                  j                  «       ‰¬«       | j                  ‰«       ddd«       | j                  j                  d«       y# 1 sw Y   ŒˆxY w# 1 sw Y   Œ2xY w)zc
        Adding a filesystem file reader to a reactor will make sure it is
        polled.
        c                   ó   •— e Zd ZdZˆ fd„Zy)ú4StdioFilesTests.test_addReader.<locals>.DataProtocolr   c                 óp   •— | xj                   |z  c_         | j                   dk(  r‰j                  «        y y )Nó   hello!)ÚdataÚstop)r   r   Úreactors     €r   ÚdataReceivedzAStdioFilesTests.test_addReader.<locals>.DataProtocol.dataReceived&   s-   ø€ Ø—	’	˜TÑ!•	ð —9‘9 	Ò)Ø—L‘L•Nð *r   N)Ú__name__Ú
__module__Ú__qualname__r   r   ©r   s   €r   ÚDataProtocolr   #   s   ø„ ØˆDõ#r   r"   r
   r   NÚrb©ÚstdinÚstdoutr   )ÚbuildReactorr   r   r   Úwriter   Úfilenor   Ú
runReactorÚassertEqualr   )r   r"   r   ÚfÚprotocolr   s        @r   Útest_addReaderzStdioFilesTests.test_addReader   sÎ   ø€ ð
 ×#Ñ#Ó%ˆö		#œ8ô 		#ð �{‰{‹}ˆä�$˜Óð 	 Ø�G‰G�IÔ÷	ô �$˜Óð 		% á#“~ˆHÜØØ—h‘h“jØ—~‘~×,Ñ,Ó.Øõ	ð �O‰O˜GÔ$÷		%ð 	×Ñ˜Ÿ™¨	Õ2÷	ð 	ú÷		%ð 		%ús   ¿CÁ%AC$ÃC!Ã$C-c                 óf  ‡— | j                  «       Š G ˆfd„dt        «      }| j                  «       }t        |d«      5 } |«       }t	        ||j                  «       | j                  j                  «       ‰¬«       |j                  j                  d«       |j                  j                  d«       |j                  j                  «        | j                  ‰«       ddd«       t        |d«      5 }| j                  |j                  «       d	«       ddd«       y# 1 sw Y   Œ?xY w# 1 sw Y   yxY w)
zc
        Adding a filesystem file writer to a reactor will make sure it is
        polled.
        c                   ó   •— e Zd Zˆ fd„Zy)ú:StdioFilesTests.test_addWriter.<locals>.DisconnectProtocolc                 ó&   •— ‰j                  «        y )N)r   )r   Úreasonr   s     €r   ÚconnectionLostzIStdioFilesTests.test_addWriter.<locals>.DisconnectProtocol.connectionLostH   s   ø€ Ø—‘•r   N)r   r   r    r4   r!   s   €r   ÚDisconnectProtocolr1   G   s   ø„ õr   r5   r
   ©r&   r%   r   ó   hellos   , worldNr#   s   hello, world)r'   r   r   r   r   r)   r   Ú	transportr(   ÚloseConnectionr*   r+   Úread)r   r5   r   r,   r-   r   s        @r   Útest_addWriterzStdioFilesTests.test_addWriter@   s  ø€ ð
 ×#Ñ#Ó%ˆö	¤ô 	ð �{‰{‹}ˆä�$˜Óð 	% ñ *Ó+ˆHÜØØ—x‘x“zØ—n‘n×+Ñ+Ó-Øõ	ð ×Ñ×$Ñ$ XÔ.Ø×Ñ×$Ñ$ ZÔ0Ø×Ñ×-Ñ-Ô/à�O‰O˜GÔ$÷	%ô  �$˜Óð 	8 Ø×Ñ˜QŸV™V›X Ô7÷	8ð 	8÷!	%ð 	%ú÷ 	8ð 	8ús   ¿BDÃ1!D'ÄD$Ä'D0c                 ó  — | j                  «       }| j                  «       }t        |d«      j                  «        t        |d«      5 }t	        t        «       |j                  «       | j                  j                  «       |¬«      }| j                  |j                  |j                  «       «       |j                  j                  «        | j                  |j                  |j                  «       «       ddd«       y# 1 sw Y   yxY w)zq
        Removing a filesystem file reader from a reactor will make sure it is
        no longer polled.
        r
   r#   r$   N)r'   r   r   r   r   r   r)   r   ÚassertInÚ_readerÚ
getReadersÚstopReadingÚassertNotIn©r   r   r   r,   Ústdios        r   Útest_removeReaderz!StdioFilesTests.test_removeReader`   sÊ   € ð
 ×#Ñ#Ó%ˆà�{‰{‹}ˆÜˆT�4Ó×ÑÔ ä�$˜Óð 
	B äÜ“
Ø—h‘h“jØ—~‘~×,Ñ,Ó.Øô	ˆEð �M‰M˜%Ÿ-™-¨×);Ñ);Ó)=Ô>Ø�M‰M×%Ñ%Ô'Ø×Ñ˜UŸ]™]¨G×,>Ñ,>Ó,@ÔA÷
	B÷ 
	Bñ 
	Bús   ÁB,C<Ã<Dc                 óö  — | j                  «       }t        | j                  «       d«      x| _        }t	        «       }t        ||j                  «       | j                  j                  «       |¬«      }|j                  j                  d«       | j                  |j                  |j                  «       «       |j                  j                  «        | j                  |j                  |j                  «       «       y)zq
        Removing a filesystem file writer from a reactor will make sure it is
        no longer polled.
        r
   r6   r7   N)r'   r   r   r,   r   r   r)   r   r8   r(   r=   Ú_writerÚ
getWritersÚstopWritingrA   )r   r   r,   r-   rC   s        r   Útest_removeWriterz!StdioFilesTests.test_removeWriterv   s»   € ð
 ×#Ñ#Ó%ˆô ˜$Ÿ+™+›-¨Ó.Ð.ˆŒ�ô “:ˆÜØ˜QŸX™X›Z¨t¯~©~×/DÑ/DÓ/FÐPWô
ˆð 	×Ñ× Ñ  Ô*Ø�‰�e—m‘m W×%7Ñ%7Ó%9Ô:Ø�‰×!Ñ!Ô#Ø×Ñ˜Ÿ™¨×(:Ñ(:Ó(<Õ=r   c                 óÄ  — | j                  «       }| j                  «       }t        |d«      j                  «        t        |d«      x| _        }t        t        «       |j                  «       | j                  j                  «       |¬«      }|j                  «       }| j                  |j                  |«       | j                  |j                  |j                  «       «       y)zk
        Calling C{removeAll} on a reactor includes descriptors that are
        filesystem files.
        r
   r#   r$   N)r'   r   r   r   r,   r   r   r)   r   Ú	removeAllr=   r>   rA   r?   )r   r   r   r,   rC   Úremoveds         r   Útest_removeAllzStdioFilesTests.test_removeAllŠ   s±   € ð
 ×#Ñ#Ó%ˆà�{‰{‹}ˆÜˆT�4Ó×ÑÔ ô ˜$ Ó%Ð%ˆŒ�ô Ü‹JØ—(‘(“*Ø—>‘>×(Ñ(Ó*Øô	
ˆð ×#Ñ#Ó%ˆØ�‰�e—m‘m WÔ-Ø×Ñ˜Ÿ™¨×(:Ñ(:Ó(<Õ=r   c                 óˆ  — | j                  «       }| j                  «       }t        |d«      j                  «        t        |d«      5 }t	        t        «       |j                  «       | j                  j                  «       |¬«      }| j                  |j                  |j                  «       «       ddd«       y# 1 sw Y   yxY w)zW
        C{reactor.getReaders} includes descriptors that are filesystem files.
        r
   r#   r$   N)r'   r   r   r   r   r   r)   r   r=   r>   r?   rB   s        r   Útest_getReaderszStdioFilesTests.test_getReaders£   s›   € ð ×#Ñ#Ó%ˆà�{‰{‹}ˆÜˆT�4Ó×ÑÔ ô �$˜Óð 	? äÜ“
Ø—h‘h“jØ—~‘~×,Ñ,Ó.Øô	ˆEð �M‰M˜%Ÿ-™-¨×);Ñ);Ó)=Ô>÷	?÷ 	?ñ 	?ús   ÁA(B8Â8Cc                 ó¼  — | j                  «       }t        | j                  «       d«      x| _        }t	        t        «       |j                  «       | j                  j                  «       |¬«      }| j                  |j                  |j                  «       «       |j                  j                  «        | j                  |j                  |j                  «       «       y)zW
        C{reactor.getWriters} includes descriptors that are filesystem files.
        r
   r6   N)r'   r   r   r,   r   r   r)   r   rA   rF   rG   ÚstartWritingr=   )r   r   r,   rC   s       r   Útest_getWriterszStdioFilesTests.test_getWriters·   s¤   € ð ×#Ñ#Ó%ˆô ˜$Ÿ+™+›-¨Ó.Ð.ˆŒ�ô Ü‹JØ—8‘8“:Ø—.‘.×'Ñ'Ó)Øô	
ˆð 	×Ñ˜Ÿ™¨×(:Ñ(:Ó(<Ô=Ø�‰×"Ñ"Ô$Ø�‰�e—m‘m W×%7Ñ%7Ó%9Õ:r   zoStandardIO does not accept stdout as an argument to Windows. Testing redirection to a file is therefore harder.N)r   r   r    Ú__doc__r   r.   r;   rD   rI   rM   rO   rR   r   Ú	isWindowsÚskip© r   r   r   r      sR   „ ñò.ò"3òH8ò@Bò,>ò(>ò2?ò(;ð( €x×ÑÔðAñ 	ð r   r   N)rS   Útwisted.internet.protocolr   Ú#twisted.internet.test.reactormixinsr   Útwisted.python.runtimer   rT   Útwisted.internet.stdior   r   ÚglobalsÚupdateÚmakeTestCaseClassesrV   r   r   ú<module>r^      sP   ðñõ
 /Ý >Ý +à€x×ÑÔÝ1ô~
�nô ~
ñB ƒ	× Ñ �×4Ñ4Ó6Õ 7r   