+
    üÐjìI  ã                   ó   € R t ^ RIt^ RIHtHt ^ RIHt ^ RIHt	 ^ RI
Ht ^ RIHtHtHtHt ^ RIHtHt ^ RIHtHt ^ R	IHtHt ^ R
IHt ^ RIHt ^ RIHt ^ RI H!t! ^ RI"H#t#H$t$H%t%H&t&H't'H(t( ^ RI)H*t* ^ RI+H,t,H-t- ^ RI.HtH/t/ ^RI0H1t1H2t2H3t3  ! R R]4      t4 ! R R]4      t5 ! R R]4      t6 ! R R]$4      t7 ! R R4      t8 ! R R]4      t9R# )z)
Test for distributed trial worker side.
N)ÚBytesIOÚStringIO)ÚType)ÚTestCase)ÚverifyObject)Úassert_thatÚequal_toÚhas_itemÚ
has_length)ÚDeferredÚfail)ÚConnectionLostÚProcessDone)ÚIAddressÚ
ITransport)ÚFailure)ÚFilePath)ÚconnectedServerAndClient)Úmanagercommands)ÚLocalWorkerÚLocalWorkerAMPÚLocalWorkerTransportÚ
NotRunningÚWorkerExceptionÚWorkerProtocol)Ú
TestResult)ÚpyunitcasesÚskipping)r   ÚmakeTodo)Ú	isFailureÚmatches_resultÚsimilarFramec                   óf   a € ] tR t^&t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R ltR	t	V t
R
# )ÚWorkerProtocolTestsz
Tests for L{WorkerProtocol}.
c                ó   <€ V ^8„  d   QhRR/# ©é   ÚreturnN© )ÚformatÚ__classdict__s   "€ÚF/usr/lib/python3/dist-packages/twisted/trial/_dist/test/test_worker.pyÚ__annotate__Ú WorkerProtocolTests.__annotate__.   s   ø€ ÷  ñ  �tñ  ó    c                óp   € \        \        \        RR7      w  V n        V n        pVP
                  V n        R# )z>
Set up a transport, a result stream and a protocol instance.
F©ÚgreetN)r   r   r   ÚworkerÚserverÚflush©ÚselfÚpumps   & r+   ÚsetUpÚWorkerProtocolTests.setUp.   s.   € ô *BÜœN°%ô*
Ñ&ˆŒ�T”[ $ð —Z‘ZˆŽ
r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r-   7   s   ø€ ÷ 	Eñ 	E˜$ñ 	Er.   c                ó  € \         P                  ! V P                  P                  \        P
                  ! R4      \        4       4      4      pV P                  4        V P                  RR/V P                  V4      4       R# )zm
Sending the L{workercommands.Run} command to the worker returns a
response with C{success} sets to C{True}.
Ú	test_passÚsuccessTN)
r   ÚfromCoroutiner3   Úrunr   Ú
PyUnitTestr   r4   ÚassertEqualÚsuccessResultOf)r6   Úds   & r+   Útest_runÚWorkerProtocolTests.test_run7   s^   € ô
 ×"Ò"Ø�K‰K�O‰OœK×2Ò2°;Ó?ÄÃÓNó
ˆð 	�
‰
ŒØ×Ñ˜) TÐ*¨D×,@Ñ,@ÀÓ,CÖDr.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r-   B   s   ø€ ÷ Fñ F˜Dñ Fr.   c                óx  € \         P                  P                  \         P                  P                  4      pV P	                  \         P
                  V4       V P                  P                  R4       V P                  \         P                  P                  \         P                  P                  4      V4       R# )z0
The C{start} command changes the current path.
z..N)	ÚosÚpathÚrealpathÚcurdirÚ
addCleanupÚchdirr2   ÚstartÚassertNotEqual)r6   rK   s   & r+   Ú
test_startÚWorkerProtocolTests.test_startB   sk   € ô —‘×!Ñ!¤"§'¡'§.¡.Ó1ˆØ�‰œŸ™ &Ô)Ø�‰×Ñ˜$ÔØ×ÑœBŸG™G×,Ñ,¬R¯W©W¯^©^Ó<¸fÖEr.   c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )r&   r2   r3   )r   r   )r)   r*   s   "€r+   r,   r-   &   s   ø‡ ‚ ñ
 Ññ ñ Ñò r.   )r4   r3   r2   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r8   rD   rP   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r*   s   @r+   r#   r#   &   s3   ø‡ € ñ÷ ð  ÷	Eð 	E÷Fð F÷9 ƒ r.   r#   c                   ó´   a € ] tR t^Lt o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltRtV tR# )ÚWorkerProtocolErrorTestsz¡
Tests for L{WorkerProtocol}'s handling of certain errors related to
running the tests themselves (i.e., not test errors but test
infrastructure/runner errors).
c                ó:   <€ V ^8„  d   QhRS[ RS[S[,          RR/# )r&   ÚbrokenTestNameÚloggedExceptionTyper'   N)Ústrr   ÚBaseException)r)   r*   s   "€r+   r,   Ú%WorkerProtocolErrorTests.__annotate__S   s/   ø€ ÷ Pñ PÙ!ðPÙ8<¹]Õ8KðPà	ñPr.   c                ó²  € \        \        \        R R7      w  r4p\        P                  ! V4      p\        4       p\        P                  ! VP                  Wg4      4       VP                  4        \        V\        \        ^4      R7      4       VP                  w  w  r‰\        V\        V4      4       \        V P                  V4      \        ^4      4       R# )Fr0   ©ÚerrorsN)r   r   r   r   ÚBrokenRunInfrastructurer   r   r>   r?   r4   r   r    r
   rf   r   ÚflushLoggedErrors)
r6   r_   r`   r2   r3   r7   ÚexpectedCaseÚresultÚ
actualCaserf   s
   &&&       r+   Ú_runErrorTestÚ&WorkerProtocolErrorTests._runErrorTestS   s    € ô  8ÜœN°%ô 
Ñˆ˜ô #×:Ò:¸>ÓJˆÜ“ˆÜ×Ò˜vŸz™z¨,Ó?Ô@Ø�
‰
ŒÜ�FœN´*¸Q³-Ô@ÔAØ!'§¡ÑÑ	ˆ*Ü�J¤¨Ó 6Ô7ô 	�D×*Ñ*Ð+>Ó?ÄÈAÃÖOr.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   rc   j   ó   ø€ ÷ >ñ > dñ >r.   c                ó2   € V P                  R\        4       R# )zQ
If there is an error reporting success then the test run is marked as
an error.
Útest_addSuccessN©rl   ÚAttributeError©r6   s   &r+   Útest_addSuccessErrorÚ-WorkerProtocolErrorTests.test_addSuccessErrorj   ó   € ð
 	×ÑÐ,¬nÖ=r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   rc   q   s   ø€ ÷ <ñ < Dñ <r.   c                ó2   € V P                  R\        4       R# )zR
If there is an error reporting an error then the test run is marked as
an error.
Útest_addErrorNrr   rt   s   &r+   Útest_addErrorErrorÚ+WorkerProtocolErrorTests.test_addErrorErrorq   s   € ð
 	×Ñ˜?¬NÖ;r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   rc   x   ro   r.   c                ó2   € V P                  R\        4       R# )zS
If there is an error reporting a failure then the test run is marked
as an error.
Útest_addFailureNrr   rt   s   &r+   Útest_addFailureErrorÚ-WorkerProtocolErrorTests.test_addFailureErrorx   rw   r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   rc      s   ø€ ÷ ;ñ ; 4ñ ;r.   c                ó2   € V P                  R\        4       R# )zP
If there is an error reporting a skip then the test run is marked
as an error.
Útest_addSkipNrr   rt   s   &r+   Útest_addSkipErrorÚ*WorkerProtocolErrorTests.test_addSkipError   s   € ð
 	×Ñ˜>¬>Ö:r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   rc   †   s   ø€ ÷ Fñ F¨ñ Fr.   c                ó2   € V P                  R\        4       R# )z]
If there is an error reporting an expected failure then the test
run is marked as an error.
Útest_addExpectedFailureNrr   rt   s   &r+   r‰   Ú0WorkerProtocolErrorTests.test_addExpectedFailure†   s   € ð
 	×ÑÐ4´nÖEr.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   rc   �   s   ø€ ÷ Hñ H¨4ñ Hr.   c                ó2   € V P                  R\        4       R# )z]
If there is an error reporting an unexpected ccess then the test
run is marked as an error.
Útest_addUnexpectedSuccessNrr   rt   s   &r+   r�   Ú2WorkerProtocolErrorTests.test_addUnexpectedSuccess�   s   € ð
 	×ÑÐ6¼ÖGr.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   rc   ”   s   ø€ ÷ Kñ K¨$ñ Kr.   c                ó@  € \        \        \        RR7      w  rpRVn        \        P
                  ! R4      p\        4       p\        P                  ! VP                  WE4      4       VP                  4        \        V P                  \        4      \        ^4      4       R# )zF
A failure encountered while reporting a reporting failure is logged.
Fr0   Nr<   )r   r   r   Ú	transportr   r@   r   r   r>   r?   r4   r   rh   r   r
   )r6   r2   r3   r7   ri   rj   s   &     r+   Útest_failedFailureReportÚ1WorkerProtocolErrorTests.test_failedFailureReport”   sv   € ô  8ÜœN°%ô 
Ñˆ˜ð  ˆÔä"×-Ò-¨kÓ:ˆÜ“ˆÜ×Ò˜vŸz™z¨,Ó?Ô@Ø�
‰
Œô
 	�D×*Ñ*¬>Ó:¼JÀq»MÖJr.   r(   N)rS   rT   rU   rV   rW   rl   ru   r{   r€   r…   r‰   r�   r’   rY   rZ   r[   s   @r+   r]   r]   L   sb   ø‡ € ñ÷Pð P÷.>ð >÷<ð <÷>ð >÷;ð ;÷Fð F÷Hð H÷Kö Kr.   r]   c                   óÞ   a € ] tR t^¬t o RtV 3R lR lt]3V 3R lR lltV 3R lR ltV 3R lR	 lt	V 3R
 lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )ÚLocalWorkerAMPTestszJ
Test case for distributed trial's manager-side local worker AMP protocol
c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   Ú LocalWorkerAMPTests.__annotate__±   s   ø€ ÷  ñ  �tñ  r.   c                óp   € \        \        \        R R7      w  V n        V n        pVP
                  V n        R# )Fr0   N)r   r   r   r2   Ú
managerAMPr4   r5   s   & r+   r8   ÚLocalWorkerAMPTests.setUp±   s+   € Ü-EÜœN°%ô.
Ñ*ˆŒ�T”_ dð —Z‘ZˆŽ
r.   c                ó<   <€ V ^8„  d   QhRS[ RS[S[,          RS[/# )r&   ÚtestCaseÚ
makeResultr'   )ÚPyUnitTestCaser   r   )r)   r*   s   "€r+   r,   r—   ·   s*   ø€ ÷ ñ Ù&ðÙ48¹Õ4Dðá	ñr.   c                óØ   € V! 4       p\         P                  ! V P                  P                  W4      4      pV P	                  4        V P                  R R/V P                  V4      4       V# )r=   T)r   r>   r™   r?   r4   rA   rB   )r6   rœ   r�   rj   rC   s   &&&  r+   ÚworkerRunTestÚ!LocalWorkerAMPTests.workerRunTest·   sX   € ñ “ˆÜ×"Ò" 4§?¡?×#6Ñ#6°xÓ#HÓIˆØ�
‰
ŒØ×Ñ˜) TÐ*¨D×,@Ñ,@ÀÓ,CÔDØˆr.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r—   À   s   ø€ ÷ Cñ C ñ Cr.   c                óŽ   € V P                  \        P                  ! R4      4      p\        V\	        \        ^4      R7      4       R# )z
Run a test, and succeed.
r<   )Ú	successesN)r    r   r@   r   r    r   )r6   rj   s   & r+   Útest_runSuccessÚ#LocalWorkerAMPTests.test_runSuccessÀ   s2   € ð ×#Ñ#¤K×$:Ò$:¸;Ó$GÓHˆÜ�FœN´X¸a³[ÔAÖBr.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r—   Ç   s   ø€ ÷ =ñ =¨ñ =r.   c                óD  € \         P                  ! R4      pV P                  V4      p\        V\	        \        ^4      R7      4       VP                  w  w  r4p\        V\        V4      4       \        V\        R4      4       \        V\        \        R4      4      4       R# )z"
Run a test, and fail expectedly.
Ú
test_todo1)ÚexpectedFailureszexpected failureÚtodo1N)	r   ÚSynchronousStrictTodor    r   r    r
   rª   r   r   )r6   ri   rj   rk   ÚexceptionMessageÚ
todoReasons   &     r+   Útest_runExpectedFailureÚ+LocalWorkerAMPTests.test_runExpectedFailureÇ   s€   € ô  ×5Ò5°lÓCˆØ×#Ñ# LÓ1ˆÜ�FœN¼JÀq»MÔJÔKØ7=×7NÑ7NÑ4Ñ	3ˆ*¨
Ü�J¤¨Ó 6Ô7ô 	Ð$¤hÐ/AÓ&BÔCÜ�J¤¬°'Ó):Ó ;Ö<r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r—   Õ   s   ø€ ÷ 
ñ 
˜tñ 
r.   c                óp  € \         P                  ! R4      pV P                  V4      p\        V\	        \        ^4      R7      4       VP                  w  w  r4\        V\        V4      4       \        V\        \        \        4      \        \        R4      4      \        \        RR4      4      R7      4       R# )z%
Run a test, and encounter an error.
Ú
test_errorre   zpyunit errorzpyunitcases.py)ÚtypeÚvalueÚframesN)r   r@   r    r   r    r
   rf   r   r   Ú	Exceptionr   r	   r!   ©r6   ri   rj   rk   Úfailures   &    r+   Útest_runErrorÚ!LocalWorkerAMPTests.test_runErrorÕ   s�   € ô #×-Ò-¨lÓ;ˆØ×#Ñ# LÓ1ˆÜ�FœN´*¸Q³-Ô@ÔAØ"(§-¡-ÑÑ	ˆ*Ü�L¤(¨:Ó"6Ô7ÜØÜÜœiÓ(Üœ¨~Ó>Ó?Ü¤¨\Ð;KÓ LÓMôö	
r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r—   ç   s   ø€ ÷ 
ñ 
 ñ 
r.   c                óH  € \         P                  ! R4      pV P                  V4      p\        V\	        \        ^4      R7      4       VP                  w  w  r4\        V\        V4      4       \        V\        \        \        4      \        \        R4      4      R7      4       R# )z
Run a test, and fail.
Ú	test_fail)Úfailureszpyunit failure)r´   rµ   N)r   r@   r    r   r    r
   r¿   r   r   ÚAssertionErrorr   r¸   s   &    r+   Útest_runFailureÚ#LocalWorkerAMPTests.test_runFailureç   s~   € ô #×-Ò-¨kÓ:ˆØ×#Ñ# LÓ1ˆÜ�FœN´J¸q³MÔBÔCØ"(§/¡/ÑÑ	ˆ*Ü�L¤(¨:Ó"6Ô7ÜØÜäœnÓ-ÜœÐ/?Ó@ÓAôö	
r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r—   ù   s   ø€ ÷ 	3ñ 	3˜dñ 	3r.   c                ó  € \         P                  ! R4      pV P                  V4      p\        V\	        \        ^4      R7      4       VP                  w  w  r4\        V\        V4      4       \        V\        R4      4       R# )z
Run a test, but skip it.
Ú	test_skip)Úskipszpyunit skipN)r   r@   r    r   r    r
   rÆ   r   )r6   ri   rj   rk   Úskips   &    r+   Útest_runSkipÚ LocalWorkerAMPTests.test_runSkipù   sd   € ô #×-Ò-¨kÓ:ˆØ×#Ñ# LÓ1ˆÜ�FœN´¸A³Ô?Ô@Ø%Ÿ|™|ÑÑ	ˆ*Ü�L¤(¨:Ó"6Ô7Ü�Dœ( =Ó1Ö2r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r—     s   ø€ ÷ 	:ñ 	:¨Tñ 	:r.   c                ó  € \         P                  ! R4      pV P                  V4      p\        V\	        \        ^4      R7      4       VP                  w  w  r4\        V\        V4      4       \        V\        R4      4       R# )z'
Run a test, and succeed unexpectedly.
Ú
test_todo7)ÚunexpectedSuccessesÚtodo7N)r   r¬   r    r   r    r
   rÍ   r   )r6   ri   rj   rk   ÚunexpectedSuccesss   &    r+   Útest_runUnexpectedSuccessesÚ/LocalWorkerAMPTests.test_runUnexpectedSuccesses  sg   € ô  ×5Ò5°lÓCˆØ×#Ñ# LÓ1ˆÜ�FœN¼zÈ!»}ÔMÔNØ,2×,FÑ,FÑ)Ñ	(ˆ*Ü�L¤(¨:Ó"6Ô7ÜÐ%¤x°Ó'8Ö9r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r—     s   ø€ ÷ 
=ñ 
= ñ 
=r.   c                óL  € \        4       pV P                  P                  V4       V P                  P	                  \
        P                  RR7      pV P                  4        V P                  RR/V P                  V4      4       V P                  RVP                  4       4       R# )zJ
L{LocalWorkerAMP.testWrite} writes the data received to its test
stream.
zSome output)Úoutr=   TzSome output
N)r   r™   ÚsetTestStreamr2   Ú
callRemoter   Ú	TestWriter4   rA   rB   Úgetvalue)r6   ÚstreamrC   s   &  r+   Útest_testWriteÚ"LocalWorkerAMPTests.test_testWrite  s|   € ô
 “ˆØ�‰×%Ñ% fÔ-Ø�K‰K×"Ñ"¤?×#<Ñ#<À-Ð"ÓPˆØ�
‰
ŒØ×Ñ˜) TÐ*¨D×,@Ñ,@ÀÓ,CÔDØ×Ñ˜¨&¯/©/Ó*;Ö<r.   c                ó   <€ V ^8„  d   QhRR/# r%   r(   )r)   r*   s   "€r+   r,   r—     s   ø€ ÷ /ñ / 4ñ /r.   c                óª   a€ . o ! V3R lR\         4      p\        P                  ! R4      pV P                  W!4       \	        S\        V.4      4       R# )zd
L{LocalWorkerAMP.run} calls C{stopTest} on its test result once the
C{Run} commands has succeeded.
c                   ó:   <a € ] tR tRt o V 3R lV3R lltRtV tR# )Ú=LocalWorkerAMPTests.test_stopAfterRun.<locals>.StopTestResulti"  c                ó$   <€ V ^8„  d   QhRS[ RR/# )r&   Útestr'   N)rž   )r)   r*   s   "€r+   r,   ÚJLocalWorkerAMPTests.test_stopAfterRun.<locals>.StopTestResult.__annotate__#  s   ø€ ÷ %ñ %¡^ð %¸ñ %r.   c                ó*   <€ SP                  V4       R # ©N)Úappend)r6   rá   Ústoppeds   &&€r+   ÚstopTestÚFLocalWorkerAMPTests.test_stopAfterRun.<locals>.StopTestResult.stopTest#  s   ø€ Ø—‘˜tÖ$r.   r(   N)rS   rT   rU   rV   rç   rY   rZ   )r*   ræ   s   @€r+   ÚStopTestResultrß   "  s   ù‡ € ÷%÷ %ñ %r.   ré   r<   N)r   r   r@   r    r   r   )r6   ré   Úcaseræ   s   &  @r+   Útest_stopAfterRunÚ%LocalWorkerAMPTests.test_stopAfterRun  sG   ø€ ð
 ˆ÷	%œZô 	%ô ×%Ò% kÓ2ˆØ×Ñ˜4Ô0Ü�GœX t fÓ-Ö.r.   )r4   r™   r2   N)rS   rT   rU   rV   rW   r8   r   r    r¥   r¯   rº   rÁ   rÈ   rÐ   rÚ   rë   rY   rZ   r[   s   @r+   r•   r•   ¬   sw   ø‡ € ñ÷ ð  ð HR÷ò ÷Cð C÷=ð =÷
ð 
÷$
ð 
÷$	3ð 	3÷	:ð 	:÷
=ð 
=÷/ö /r.   r•   c                   ó2   a € ] tR tRt o Rt^ tRtR tRtV t	R# )ÚSpyDataLocalWorkerAMPi+  z|
A fake implementation of L{LocalWorkerAMP} that records the received
data and doesn't automatically dispatch any command..
r.   c                ó8   € V ;P                   V,          un         R # rä   ©Ú
dataString)r6   Údatas   &&r+   ÚdataReceivedÚ"SpyDataLocalWorkerAMP.dataReceived4  ó   € Ø�Š˜4Õ�r.   r(   N)
rS   rT   rU   rV   rW   Úidrñ   ró   rY   rZ   r[   s   @r+   rî   rî   +  s    ø‡ € ñð
 
€BØ€J÷ ð  r.   rî   c                   ó8   a € ] tR tRt o RtRt^ tR tR tRt	V t
R# )ÚFakeTransporti8  z6
A fake process transport implementation for testing.
r.   c                ó8   € V ;P                   V,          un         R # rä   rð   )r6   Úfdrò   s   &&&r+   ÚwriteToChildÚFakeTransport.writeToChild@  rõ   r.   c                ó8   € V ;P                   ^,          un         R# )é   N)Úcallsrt   s   &r+   ÚloseConnectionÚFakeTransport.loseConnectionC  s   € Ø�
Š
�a��
r.   r(   N)rS   rT   rU   rV   rW   rñ   rÿ   rû   r   rY   rZ   r[   s   @r+   rø   rø   8  s%   ø‡ € ñð €JØ€Eò ÷ð r.   rø   c                   ó~   a € ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tRtV tR# )ÚLocalWorkerTestsiG  z7
Tests for L{LocalWorker} and L{LocalWorkerTransport}.
c                óâ   € \        V/ VB pVP                  \        4       4       V P                  VP                  P
                  4       V P                  VP                  P
                  4       V# )zÂ
Create a L{LocalWorker}, connect it to a transport, and ensure
its log files are closed.

@param args: See L{LocalWorker}

@param kwargs: See L{LocalWorker}

@return: a L{LocalWorker} instance
)r   ÚmakeConnectionrø   rL   Ú_outLogÚcloseÚ_errLog)r6   ÚargsÚkwargsr2   s   &*, r+   ÚtidyLocalWorkerÚ LocalWorkerTests.tidyLocalWorkerL  sT   € ô ˜dÐ- fÑ-ˆØ×Ñœm›oÔ.Ø�‰˜Ÿ™×,Ñ,Ô-Ø�‰˜Ÿ™×,Ñ,Ô-Øˆr.   c                ó¶   € \        \        4       \        V P                  4       4      \	        4       4      pV P                  VP                  4       \        4       R# )zo
L{LocalWorker.exit} fails with L{NotRunning} if it is called before the
protocol is connected to a transport.
N)r   rî   r   Úmktempr   ÚfailureResultOfÚexitr   ©r6   r2   s   & r+   Útest_exitBeforeConnectedÚ)LocalWorkerTests.test_exitBeforeConnected]  s=   € ô
 Ü!Ó#¤X¨d¯k©k«mÓ%<¼h»jó
ˆð 	×Ñ˜VŸ[™[›]¬JÖ7r.   c                óH  € V P                  \        4       \        V P                  4       4      \	        4       4      pVP                  \        \        ^ 4      4      4       V P                  VP                  \        4       V P                  VP                  4       \        4       R# )zy
L{LocalWorker.exit} fails with L{NotRunning} if it is called after the the
protocol is disconnected from its transport.
N)r  rî   r   r  r   ÚprocessEndedr   r   r  ÚendDeferredr  r   r  s   & r+   Útest_exitAfterDisconnectedÚ+LocalWorkerTests.test_exitAfterDisconnectedg  st   € ð
 ×%Ñ%Ü!Ó#¤X¨d¯k©k«mÓ%<¼h»jó
ˆð 	×ÑœG¤K°£NÓ3Ô4ð 	×Ñ˜V×/Ñ/´Ô=ð 	×Ñ˜VŸ[™[›]¬JÖ7r.   c                óp  € V P                  \        4       \        V P                  4       4      R4      p\	        4       Vn        VP                  ^R4       VP                  ^R4       V P                  RVP                  P                  4       V P                  RVP
                  P                  4       4       R# )z±
L{LocalWorker.childDataReceived} forwards the received data to linked
L{AMP} protocol if the right file descriptor, otherwise forwards to
C{ProcessProtocol.childDataReceived}.
útest.logs   foos   barN)r  rî   r   r  r   r  ÚchildDataReceivedrA   Ú_ampProtocolrñ   rØ   ©r6   ÚlocalWorkers   & r+   Útest_childDataReceivedÚ'LocalWorkerTests.test_childDataReceivedx  s�   € ð ×*Ñ*Ü!Ó#¤X¨d¯k©k«mÓ%<¸jó
ˆô &›iˆÔØ×%Ñ% a¨Ô0Ø×%Ñ% a¨Ô0Ø×Ñ˜ ×!9Ñ!9×!DÑ!DÔEØ×Ñ˜ ×!4Ñ!4×!=Ñ!=Ó!?Ö@r.   c                ó’  € \        4       p\        V P                  4       4      pVP                  4        VP	                  R4      p\        VP                  RRR7      ;_uu_ 4       p\        WV4      pVP                  \        4       4       V P                  VP                  P                  4       V P                  VP                  P                  4       RpVP                  V4       RRR4       V P                  X\         P"                  ,           VP%                  4       P'                  R4      4       R#   + '       g   i     LV; i)z9
L{LocalWorker} writes the log data with local newlines.
r  Úwtzutf-8)Úencodingu   Here comes the â˜‰!N)rî   r   r  ÚmakedirsÚchildÚopenrI   r   r  rø   rL   r  r  r  Ú	testWriterA   rH   ÚlinesepÚ
getContentÚdecode)r6   ÚampÚtempDirÚlogPathÚlogFiler2   Úexpecteds   &      r+   Útest_newlineStyleÚ"LocalWorkerTests.test_newlineStyle‡  sç   € ô $Ó%ˆÜ˜4Ÿ;™;›=Ó)ˆØ×ÑÔØ—-‘- 
Ó+ˆä�'—,‘, ¨w×7Õ7¸7Ü  ¨wÓ7ˆFØ×!Ñ!¤-£/Ô2Ø�O‰O˜FŸN™N×0Ñ0Ô1Ø�O‰O˜FŸN™N×0Ñ0Ô1à0ˆHØ�M‰M˜(Ô#÷ 8ð 	×ÑàœŸ
™
Õ"ð ×ÑÓ ×'Ñ'¨Ó0ö	
÷ 8×7ús   Á%BD6Ä6E	c                ó   € V P                  \        4       \        V P                  4       4      R4      p\	        4       Vn        RpVP                  V4       V P                  W!P
                  P                  4       4       R# )zJ
L{LocalWorker.outReceived} logs the output into its C{_outLog} log
file.
r  ó+   The quick brown fox jumps over the lazy dogN)	r  rî   r   r  r   r  ÚoutReceivedrA   rØ   ©r6   r  rò   s   &  r+   Útest_outReceivedÚ!LocalWorkerTests.test_outReceived¡  óe   € ð
 ×*Ñ*Ü!Ó#¤X¨d¯k©k«mÓ%<¸jó
ˆô &›iˆÔØ=ˆØ×Ñ Ô%Ø×Ñ˜×2Ñ2×;Ñ;Ó=Ö>r.   c                ó   € V P                  \        4       \        V P                  4       4      R4      p\	        4       Vn        RpVP                  V4       V P                  W!P
                  P                  4       4       R# )zJ
L{LocalWorker.errReceived} logs the errors into its C{_errLog} log
file.
r  r3  N)	r  rî   r   r  r   r  ÚerrReceivedrA   rØ   r5  s   &  r+   Útest_errReceivedÚ!LocalWorkerTests.test_errReceived®  r8  r.   c                óŒ   € \        4       p\        V4      pRpVP                  V4       V P                  W1P                  4       R# )zQ
L{LocalWorkerTransport.write} forwards the written data to the given
transport.
r3  N)rø   r   ÚwriterA   rñ   ©r6   r‘   ÚlocalTransportrò   s   &   r+   Ú
test_writeÚLocalWorkerTests.test_write»  s<   € ô
 "“Oˆ	Ü-¨iÓ8ˆØ=ˆØ×Ñ˜TÔ"Ø×Ñ˜×3Ñ3Ö4r.   c                ó¬   € \        4       p\        V4      pRpVP                  V4       V P                  RP	                  V4      VP
                  4       R# )zY
L{LocalWorkerTransport.writeSequence} forwards the written data to the
given transport.
r.   N)s
   The quick s   brown fox jumps s   over the lazy dog)rø   r   ÚwriteSequencerA   Újoinrñ   r?  s   &   r+   Útest_writeSequenceÚ#LocalWorkerTests.test_writeSequenceÆ  sF   € ô
 "“Oˆ	Ü-¨iÓ8ˆØIˆØ×$Ñ$ TÔ*Ø×Ñ˜Ÿ™ $›¨×)=Ñ)=Ö>r.   c                óˆ   € \        4       p\        V4      pVP                  4        V P                  VP                  ^4       R# )zR
L{LocalWorkerTransport.loseConnection} forwards the call to the given
transport.
N)rø   r   r   rA   rÿ   )r6   r‘   r@  s   &  r+   Útest_loseConnectionÚ$LocalWorkerTests.test_loseConnectionÑ  s5   € ô
 "“Oˆ	Ü-¨iÓ8ˆØ×%Ñ%Ô'à×Ñ˜Ÿ™¨!Ö,r.   c                ó   € V P                  \        4       \        V P                  4       4      R4      pVP	                  R4       V P                  VP                  P                  4       V P                  VP                  P                  4       R# )zB
L{LocalWorker.connectionLost} closes the per-worker log streams.
r  N)	r  rî   r   r  ÚconnectionLostÚ
assertTruer  Úclosedr  r  s   & r+   Útest_connectionLostÚ$LocalWorkerTests.test_connectionLostÜ  si   € ð
 ×*Ñ*Ü!Ó#¤X¨d¯k©k«mÓ%<¸jó
ˆð 	×"Ñ" 4Ô(Ø�‰˜×+Ñ+×2Ñ2Ô3Ø�‰˜×+Ñ+×2Ñ2Ö3r.   c                óæ  € \        4       p\        4       p\        V\        V P	                  4       4      R4      pVP                  V4       VP                  \        \        ^ 4      4      4       V P                  VP                  P                  4       V P                  VP                  P                  4       V P                  RVP                  4       V P                  VP                   \        4      # )z[
L{LocalWorker.processEnded} calls C{connectionLost} on itself and on
the L{AMP} protocol.
r  N)rø   rî   r   r   r  r  r  r   r   rM  r  rN  r  ÚassertIdenticalr‘   ÚassertFailurer  )r6   r‘   Úprotocolr  s   &   r+   Útest_processEndedÚ"LocalWorkerTests.test_processEndedè  s°   € ô
 "“Oˆ	Ü(Ó*ˆÜ! (¬H°T·[±[³]Ó,CÀZÓPˆØ×"Ñ" 9Ô-Ø× Ñ ¤¬°Q«Ó!8Ô9Ø�‰˜×+Ñ+×2Ñ2Ô3Ø�‰˜×+Ñ+×2Ñ2Ô3Ø×Ñ˜T 8×#5Ñ#5Ô6Ø×!Ñ! +×"9Ñ"9¼;ÓGÐGr.   c                óÐ   € \        R4      pV P                  \        \        VP	                  4       4      4       V P                  \        \        VP                  4       4      4       R# )za
L{LocalWorkerTransport.getPeer} and L{LocalWorkerTransport.getHost}
return L{IAddress} objects.
N)r   rM  r   r   ÚgetPeerÚgetHost©r6   r@  s   & r+   Útest_addressesÚLocalWorkerTests.test_addresses÷  sF   € ô
 .¨dÓ3ˆØ�‰œ¤X¨~×/EÑ/EÓ/GÓHÔIØ�‰œ¤X¨~×/EÑ/EÓ/GÓHÖIr.   c                óZ   € \        R4      pV P                  \        \        V4      4       R# )zS
L{LocalWorkerTransport} implements L{ITransport} to be able to be used
by L{AMP}.
N)r   rM  r   r   rZ  s   & r+   Útest_transportÚLocalWorkerTests.test_transport   s!   € ô
 .¨dÓ3ˆØ�‰œ¤Z°Ó@ÖAr.   c                óÊ   € R p\        4       pWn        V P                  V\        V P	                  4       4      R4       V P                  . V P                  \        4      4       R# )zz
L{LocalWorker} swallows the exceptions returned by the L{AMP} protocol
start method, as it generates unnecessary errors.
c                 ó*   € \        \        R 4      4      # )Úoops)r   ÚRuntimeError)ÚcommandÚ	directorys   &&r+   ÚfailCallRemoteÚ8LocalWorkerTests.test_startError.<locals>.failCallRemote  s   € Üœ VÓ,Ó-Ð-r.   r  N)rî   rÖ   r  r   r  rA   rh   rc  )r6   rf  rT  s   &  r+   Útest_startErrorÚ LocalWorkerTests.test_startError  sO   € ò	.ô )Ó*ˆØ,ÔØ×Ñ˜X¤x°·±³Ó'>À
ÔKØ×Ñ˜˜T×3Ñ3´LÓAÖBr.   r(   N)rS   rT   rU   rV   rW   r  r  r  r  r0  r6  r;  rA  rF  rI  rO  rU  r[  r^  rh  rY   rZ   r[   s   @r+   r  r  G  s`   ø‡ € ñòò"8ò8ò"Aò
ò4?ò?ò	5ò	?ò	-ò
4òHòJòB÷Cð Cr.   r  ):rW   rH   Úior   r   Útypingr   Úunittestr   rž   Úzope.interface.verifyr   Úhamcrestr   r   r	   r
   Útwisted.internet.deferr   r   Útwisted.internet.errorr   r   Útwisted.internet.interfacesr   r   Útwisted.python.failurer   Útwisted.python.filepathr   Útwisted.test.iosimr   Útwisted.trial._distr   Útwisted.trial._dist.workerr   r   r   r   r   r   Útwisted.trial.reporterr   Útwisted.trial.testr   r   Útwisted.trial.unittestr   Úmatchersr   r    r!   r#   r]   r•   rî   rø   r  r(   r.   r+   Ú<module>r{     s¦   ðñó 
ß  Ý Ý /å .ç @Ó @ç 1ß >ß <Ý *Ý ,Ý 7Ý /÷÷ õ .ß 4ß 5ß =Ñ =ô#F˜(ô #FôL]K˜xô ]Kô@|/˜(ô |/ô~
 ˜Nô 
 ÷ñ ôMC�xö MCr.   