+
    DfjH                     J   R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	H
t
Ht ^ RIHt  ^ RIt^ RIt]t]t^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IH t  ^ RI!H"t" ^ RI#H$t$H%t% ^ RI&H't( ] ! ]PR                  4      PU                  4       t+ ! R R]%4      t, ! R R]%4      t- ! R R]%4      t.]! ]/! ]RR4      '       * R4       ! R R]%4      4       t0 ! R R]%4      t1 ! R R]%4      t2 ! R R]%4      t3 ! R R]4      t4]! ]Pj                  ! ]4      '       * R 4       ! R! R"]%4      4       t6 ! R# R$]%4      t7 ! R% R&]%4      t8 ! R' R(]Pr                  4      t: ! R) R*]Pr                  4      t; ! R+ R,]:4      t< ! R- R.4      t= ! R/ R04      t> ! R1 R2]%4      t?]! ]/! ]R3R4      '       * R44       ! R5 R6]%4      4       t@]! ]P                  '       * R74       ! R8 R9]%4      4       tB ! R: R;]%4      tC ! R< R=]%4      tD ! R> R?]%4      tE ! R@ RA]%4      tFR#   ] d	    RtRt ELi ; i)Bz#
Tests for L{twisted.python.util}.
N)IterableMappingMutableMappingSequence)skipIf)reactor)Deferred)ProcessDone)IReactorProcess)ProcessProtocol)util)FilePath)MockOS)FailTestTestCase)suppressc                   |   a  ] tR t^*t o R tR tR t]! ]RJ R4      R 4       t	R t
]! ]RJ R4      R	 4       tR
tV tR# )	UtilTestsc                ^    . ROpV P                  \        P                  ! V4      . RO4       R# )aN)r      abr         r      r   r      )r   r   r   r   r   r   r   )assertEqualr   uniquify)selflistWithDupess   & ?/usr/lib/python3/dist-packages/twisted/python/test/test_util.pytestUniqUtilTests.testUniq+   s!    @}57QR    c                @   V P                  \        P                  ! \        \        ^^ 4      4       V P                  \        P                  ! \        \        ^ ^4      4        \        P                  ! \        \        ^^ 4       \        R4      h  \         d     R# i ; i)r   z,util.raises didn't raise when it should haveN)
assertTruer   raisesZeroDivisionErrordivmodassertFalse	TypeErrorr   r   s   &r    
testRaisesUtilTests.testRaises/   sv    $5vq!DE%61EF	KKK	61a0 IJJ ! 		s   "!B BBc                R    V P                  \        P                  ! R4      ^d4       R# )n
When L{uidFromString} is called with a base-ten string representation
of an integer, it returns the integer.
100N)r   r   uidFromStringr+   s   &r    test_uidFromNumericString#UtilTests.test_uidFromNumericString:       
 	++E2C8r#   Nz0Username/UID conversion requires the pwd module.c                    \         P                  \        P                  ! 4       4      pV P	                  \
        P                  ! VP                  4      VP                  4       R# )r/   N)	pwdgetpwuidosgetuidr   r   r1   pw_namepw_uid)r   pwents   & r    test_uidFromUsernameString$UtilTests.test_uidFromUsernameStringA   ;     RYY[)++EMM:ELLIr#   c                R    V P                  \        P                  ! R4      ^d4       R# )n
When L{gidFromString} is called with a base-ten string representation
of an integer, it returns the integer.
r0   N)r   r   gidFromStringr+   s   &r    test_gidFromNumericString#UtilTests.test_gidFromNumericStringJ   r4   r#   z2Group Name/GID conversion requires the grp module.c                    \         P                  \        P                  ! 4       4      pV P	                  \
        P                  ! VP                  4      VP                  4       R# )rA   N)	grpgetgrgidr8   getgidr   r   rB   gr_namegr_gid)r   grents   & r    test_gidFromGroupnameString%UtilTests.test_gidFromGroupnameStringQ   r?   r#    )__name__
__module____qualname____firstlineno__r!   r,   r2   r   r6   r=   rC   rF   rL   __static_attributes____classdictcell____classdict__s   @r    r   r   *   sa     S	K9 C4KKLJ MJ9 C4KMNJ OJr#   r   c                   *   a  ] tR t^[t o RtR tRtV tR# )NameToLabelTestsz
Tests for L{nameToLabel}.
c                    . ROpV F9  w  r#\         P                  ! V4      pV P                  WCRV: RV: RV: 24       K;  	  R# )z;
Test the various kinds of inputs L{nameToLabel} supports.
znameToLabel(z) == z != N))fF)foFo)fooFoo)fooBarzFoo Bar)	fooBarBazzFoo Bar Baz)r   nameToLabelr   )r   nameDatainpoutgots   &    r    test_nameToLabel!NameToLabelTests.test_nameToLabel`   sJ    
 !HC""3'CScWE#SG'TU !r#   rN   N)rO   rP   rQ   rR   __doc__rg   rS   rT   rU   s   @r    rX   rX   [   s     V Vr#   rX   c                   *   a  ] tR t^pt o RtR tRtV tR# )UntilConcludesTestsz2
Tests for L{untilConcludes}, an C{EINTR} helper.
c                t  a  V 3R lpR.S n         ^ S n        S P                  \        P                  ! V^^4      ^4       S P                  S P                  ^4       R\
        \        .S n         ^ S n        S P                  \        P                  ! V^^4      ^4       S P                  S P                  ^4       R# )z
L{untilConcludes} calls the function passed to it until the function
does not raise either L{OSError} or L{IOError} with C{errno} of
C{EINTR}.  It otherwise completes with the same result as the function
passed to it.
c                    < S;P                   ^,          un         SP                  P                  4       pVe   V! \        P                  R4      hW,           # )r   zInterrupted system call!)calls
exceptionspoperrnoEINTR)r   bexcr   s   && r    rZ   3UntilConcludesTests.test_uninterruptably.<locals>.f}   s@    JJ!OJ//%%'C%++'ABB5Lr#   N)ro   rn   r   r   untilConcludesOSErrorIOError)r   rZ   s   f r    test_uninterruptably(UntilConcludesTests.test_uninterruptablyu   s    	  &
,,Q15q9Q''2
,,Q15q9Q'r#   )rn   ro   N)rO   rP   rQ   rR   ri   ry   rS   rT   rU   s   @r    rk   rk   p   s     ( (r#   rk   r9   zgetuid/setuid not availablec                   H   a  ] tR t^t o RtR tR tR tR tR t	R t
RtV tR	# )
SwitchUIDTestsz
Tests for L{util.switchUID}.
c                    \        4       V n        V P                  \        R V P                  4       V P                  \        RV P                  4       . V n        R# )r8   
initgroupsN)r   mockospatchr   r~   initgroupsCallsr+   s   &r    setUpSwitchUIDTests.setUp   s;    h

4t{{+

4t7!r#   c                >    V P                   P                  W34       R# )z;
Save L{util.initgroups} calls in C{self.initgroupsCalls}.
N)r   append)r   uidgids   &&&r    r~   SwitchUIDTests.initgroups   s     	##SJ/r#   c                    \         P                  ! RR4       V P                  V P                  R.4       V P                  V P                  P
                  R.4       R# )zV
L{util.switchUID} calls L{util.initgroups} and then C{os.setuid} with
the given uid.
.  Nr   N)setuidr   )r   	switchUIDr   r   r   actionsr+   s   &r    test_uidSwitchUIDTests.test_uid   sH    
 	ud#--?,,/@.ABr#   c                    \         P                  ! RRR4       V P                  V P                  R.4       V P                  V P                  P
                  R.4       R# )z
L{util.switchUID} calls L{util.initgroups} and then C{os.seteuid} with
the given uid if the C{euid} parameter is set to C{True}.
r   NTr   )r   r   r   r   r   seteuidCallsr+   s   &r    	test_euidSwitchUIDTests.test_euid   sH    
 	udD)--?11E7;r#   c                   V P                   P                  4       p\        P                  ! VR4       V P	                  V P
                  . 4       V P	                  V P                   P                  . 4       V P                  \        P                  .4      pV P	                  \        V4      ^4       V P                  RV,          V^ ,          R,          4       V P                  RV,          V^ ,          R,          4       R# )z
If the current uid is the same as the uid passed to L{util.switchUID},
then initgroups does not get called, but a warning is issued.
Nz&tried to drop privileges and setuid %imessagezbut uid is already %i)
r   r9   r   r   r   r   r   flushWarningslenassertIn)r   r   currentWarningss   &  r    test_currentUIDSwitchUIDTests.test_currentUID   s    
 kk  "sD!--r2,,b1,,dnn-=>_-q14s:Ay)	
 	-3_Q5G	5RSr#   c                    V P                   P                  4       p\        P                  ! VRR4       V P	                  V P
                  . 4       V P	                  V P                   P                  . 4       V P                  \        P                  .4      pV P	                  \        V4      ^4       V P                  RV,          V^ ,          R,          4       V P                  RV,          V^ ,          R,          4       R# )z
If the current euid is the same as the euid passed to L{util.switchUID},
then initgroups does not get called, but a warning is issued.
NTz'tried to drop privileges and seteuid %ir   zbut euid is already %i)
r   geteuidr   r   r   r   r   r   r   r   )r   euidr   s   &  r    test_currentEUIDSwitchUIDTests.test_currentEUID   s    
 {{""$tT4(--r21126,,dnn-=>_-q15<Ay)	
 	.5q7I)7TUr#   )r   r   N)rO   rP   rQ   rR   ri   r   r~   r   r   r   r   rS   rT   rU   s   @r    r|   r|      s1     "0C<T"V Vr#   r|   c                   B   a  ] tR t^t o RtR tR tR tR tR t	Rt
V tR# )	MergeFunctionMetadataTestsz%
Tests for L{mergeFunctionMetadata}.
c           	        aa \        4       o\        4       oV3R lpRV3R llp\        P                  ! W4      pV P                  V! ^^R^
R7      S4       R# )z\
After merging C{foo}'s data into C{bar}, the returned function behaves
as if it is C{bar}.
c                     < S # NrN   )
foo_objects   r    r^   QMergeFunctionMetadataTests.test_mergedFunctionBehavesLikeMergeTarget.<locals>.foo   s	    r#   c                    < Vw  rgS# r   rN   )	xyr   cder   rs   
bar_objects	   &&&&*,  r    barQMergeFunctionMetadataTests.test_mergedFunctionBehavesLikeMergeTarget.<locals>.bar   s    FQr#   )quuxN)
   )r   r   )objectr   mergeFunctionMetadataassertIs)r   r^   r   bazr   r   s   &   @@r    )test_mergedFunctionBehavesLikeMergeTargetDMergeFunctionMetadataTests.test_mergedFunctionBehavesLikeMergeTarget   sH    
 X
X
		 ((2c!QR0*=r#   c                    R pR pRVn         \        P                  ! W4      pV P                  VP                   VP                   4       R# )zL
Merging C{foo} into C{bar} returns a function with C{foo}'s
C{__module__}.
c                      R # r   rN   rN   r#   r    r^   ;MergeFunctionMetadataTests.test_moduleIsMerged.<locals>.foo       r#   c                      R # r   rN   rN   r#   r    r   ;MergeFunctionMetadataTests.test_moduleIsMerged.<locals>.bar   r   r#   zsomewhere.elseN)rP   r   r   r   r   r^   r   r   s   &   r    test_moduleIsMerged.MergeFunctionMetadataTests.test_moduleIsMerged   s=    		 *((28r#   c                    R pR p\         P                  ! W4      pV P                  VP                  VP                  4       R# )zH
Merging C{foo} into C{bar} returns a function with C{foo}'s docstring.
c                     R# )z
This is foo.
NrN   rN   r#   r    r^   >MergeFunctionMetadataTests.test_docstringIsMerged.<locals>.foo      r#   c                     R# )z
This is bar.
NrN   rN   r#   r    r   >MergeFunctionMetadataTests.test_docstringIsMerged.<locals>.bar  r   r#   N)r   r   r   ri   r   s   &   r    test_docstringIsMerged1MergeFunctionMetadataTests.test_docstringIsMerged   s6    
	
	
 ((2ckk2r#   c                    R pR p\         P                  ! W4      pV P                  VP                  VP                  4       R# )zC
Merging C{foo} into C{bar} returns a function with C{foo}'s name.
c                      R # r   rN   rN   r#   r    r^   9MergeFunctionMetadataTests.test_nameIsMerged.<locals>.foo  r   r#   c                      R # r   rN   rN   r#   r    r   9MergeFunctionMetadataTests.test_nameIsMerged.<locals>.bar  r   r#   N)r   r   r   rO   r   s   &   r    test_nameIsMerged,MergeFunctionMetadataTests.test_nameIsMerged  s6    
		 ((2s||4r#   c                Z   R p^Vn         ^Vn        R p^Vn        ^Vn        \        P                  ! W4      pV P                  VP                   VP                   4       V P                  VP                  VP                  4       V P                  VP                  VP                  4       R# )z^
Merging C{foo} into C{bar} returns a function with C{bar}'s
dictionary, updated by C{foo}'s.
c                      R # r   rN   rN   r#   r    r^   GMergeFunctionMetadataTests.test_instanceDictionaryIsMerged.<locals>.foo$  r   r#   c                      R # r   rN   rN   r#   r    r   GMergeFunctionMetadataTests.test_instanceDictionaryIsMerged.<locals>.bar*  r   r#   N)r   rs   r   r   r   r   r   s   &   r    test_instanceDictionaryIsMerged:MergeFunctionMetadataTests.test_instanceDictionaryIsMerged  s    	 	 ((2&&&r#   rN   N)rO   rP   rQ   rR   ri   r   r   r   r   r   rS   rT   rU   s   @r    r   r      s(     >$9"3$5' 'r#   r   c                   *   a  ] tR tRt o RtR tRtV tR# )OrderedDictTestsi6  z 
Tests for L{util.OrderedDict}.
c                   ^ RI Hp V V P                  V P                  .R7      pV P	                  V^ ,          R,          R4       V P	                  V^ ,          R,          \
        4       V P	                  \        V4      ^4       R# )z$
L{util.OrderedDict} is deprecated.
)OrderedDictoffendingFunctionsr   zftwisted.python.util.OrderedDict was deprecated in Twisted 15.5.0: Use collections.OrderedDict instead.categoryN)twisted.python.utilr   r   test_deprecatedr   DeprecationWarningr   )r   r   r   s   &  r    r    OrderedDictTests.test_deprecated;  sx     	4,,AUAU@V,WAy);	

 	+J79KL_-q1r#   rN   N)rO   rP   rQ   rR   ri   r   rS   rT   rU   s   @r    r   r   6  s     2 2r#   r   c                   B   a  ] tR tRt o RtR tR tR tR tR t	Rt
V tR	# )
InsensitiveDictTestsiM  z$
Tests for L{util.InsensitiveDict}.
c                (   \         P                  ! 4       pV P                  \        V\        4      4       V P                  \        V\
        4      4       V P                  \        V\        4      4       V P                  \        V\        4      4       R# )z>
L{util.InsensitiveDict} implements L{typing.MutableMapping}.
N)	r   InsensitiveDictr%   
isinstancer   r   r   r)   r   )r   dcts   & r    test_abcInsensitiveDictTests.test_abcR  s`     ""$
312
301
378C23r#   c           	     4   \         P                  ! RR^^R^^//^R7      pV P                  VR,          ^^/4       V P                  VR,          R4       V P                  VP                  4       V4       V P                  VR,          VP	                  R4      4       V P                  ^V4       V P                  RV4       \        \        V4      RVR\         P                  /4      pV P                  W!4       . R	OpV FJ  pV P                  WAP                  4       4       V P                  WAV,          3VP                  4       4       KL  	  V P                  \        V4      \        V4      4       V^ VR V P                  VP                  4       R.4       R# )
zZ
L{util.InsensitiveDict} preserves the case of keys if constructed with
C{preserve=True}.
r_   r   fnzpreserver^   r   r   N)r_   r   r   )r   r   r   copygetr   evalreprkeysitemsr   )r   r   resultr   r   s   &    r    test_preserve"InsensitiveDictTests.test_preserve\  sS   
 ""E5!Q1v#FQRSUaV,UU+S)USWWU^4aeS!Is!4#7#7
 	% AMM!XXZ(MM1!f+syy{3  	TCH-FJeW-r#   c           	        \         P                  ! RR^^R^^//^ R7      p. ROpV FJ  pV P                  W1P                  4       4       V P                  W1V,          3VP	                  4       4       KL  	  V P                  \        V4      \        V4      4       V^ VR V P                  VP                  4       R.4       R# )zd
L{util.InsensitiveDict} does not preserves the case of keys if
constructed with C{preserve=False}.
r_   r   r   r   r^   N)r^   r   r   )r   r   r   r   r   r   r   )r   r   r   r   s   &   r    test_noPreserve$InsensitiveDictTests.test_noPreserve{  s    
 ""E5!Q1v#FQRS AMM!XXZ(MM1!f+syy{3  	TCH-FJeW-r#   c                    \         P                  ! RR7      p^VR&   V P                  VR,          ^4       V P                  VP                  4       R.4       R# )z$
Unicode keys are case insensitive.
Fr   r_   FOOr^   Nr   r   r   r   r   r   s   & r    test_unicode!InsensitiveDictTests.test_unicode  sI       %0%51%E7+r#   c                    \         P                  ! RR7      p^VR&   V P                  VR,          ^4       V P                  VP                  4       R.4       R# )z"
Bytes keys are case insensitive.
Fr   s   Foos   FOOs   fooNr   r   s   & r    
test_bytesInsensitiveDictTests.test_bytes  sI       %0&	6A&F8,r#   rN   N)rO   rP   rQ   rR   ri   r   r   r   r   r  rS   rT   rU   s   @r    r   r   M  s(     4.>.,- -r#   r   c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )PasswordTestingProcessProtocoli  z
Write the string C{"secret\n"} to a subprocess and then collect all of
its output and fire a Deferred with it when the process ends.
c                J    . V n         V P                  P                  R 4       R# )s   secret
N)output	transportwriter+   s   &r    connectionMade-PasswordTestingProcessProtocol.connectionMade  s    [)r#   c                >    V P                   P                  W34       R # r   )r  r   )r   fdr  s   &&&r    childDataReceived0PasswordTestingProcessProtocol.childDataReceived  s    B<(r#   c                R    V P                   P                  WP                  34       R # r   )finishedcallbackr  )r   reasons   &&r    processEnded+PasswordTestingProcessProtocol.processEnded  s    45r#   )r  N)
rO   rP   rQ   rR   ri   r  r  r  rS   rT   rU   s   @r    r  r    s     
*)6 6r#   r  z,Process support required to test getPasswordc                   &   a  ] tR tRt o R tRtV tR# )GetPasswordTestsi  c           	     :  a  \        4       p\        4       Vn        \        P                  ! V\
        \
        RR.R\        P                  P                  \        P                  4      P                  R4      /R7       V 3R lpVP                  P                  V4      # )a  
Making sure getPassword accepts a password from standard input by
running a child process which uses getPassword to read in a string
which it then writes it out again.  Write a string to the child
process and then read one and make sure it is the right string.
s   -csj   import sys
from twisted.python.util import getPassword
sys.stdout.write(getPassword())
sys.stdout.flush()
s
   PYTHONPATHutf8)envc                 ^   < V w  rVP                  \        4       SP                  RV4       R# )r   N)r   s   secret)trapr	   r   )r   r  r  r   s   &  r    processFinished4GetPasswordTests.test_stdin.<locals>.processFinished  s%    %VKK$MM.&1r#   )r  r   r  r   spawnProcesspyExer8   pathsepjoinsyspathencodeaddCallback)r   pr  s   f  r    
test_stdinGetPasswordTests.test_stdin  s|     +,Z
,		 

 9 @ @ HI	
 	2
 zz%%o66r#   rN   N)rO   rP   rQ   rR   r)  rS   rT   rU   s   @r    r  r    s     
7 7r#   r  c                   &   a  ] tR tRt o R tRtV tR# )SearchUpwardsTestsi  c                   \         P                  ! R 4       \        RR4      P                  4        \        RR4      P                  4        \        RR4      P                  4        \         P                  ! R4       \         P                  ! R4       \         P                  ! R4       \         P                  ! R4       \
        P                  ! R R	.R
R.R7      p\         P                  P                  R4      \         P                  ,           pV P                  W4       \        P                  ! R4       \
        P                  ! R R	.R
R.R7      pRpV P                  W4       R# )zsearchupwards/a/b/czsearchupwards/foo.txtwzsearchupwards/a/foo.txtzsearchupwards/a/b/c/foo.txtzsearchupwards/barzsearchupwards/bamzsearchupwards/a/barzsearchupwards/a/b/bamzfoo.txtr   bam)filesdirssearchupwardsN)r8   makedirsopenclosemkdirr   r2  r%  abspathsepr   shutilrmtree)r   actualexpecteds   &  r    testSearchupwards$SearchUpwardsTests.testSearchupwards  s   
)*$c*002&,224*C0668
$%
$%
&'
()##!)E5>
 77???3bff<*o&##!)E5>
 *r#   rN   N)rO   rP   rQ   rR   r=  rS   rT   rU   s   @r    r,  r,    s     + +r#   r,  c                   D   a  ] tR tRt o R tR tR tR tR tR t	Rt
V tR	# )
IntervalDifferentialTestsi  c                    \        \        P                  ! . ^
4      4      p\        ^d4       F  pV P	                  \        V4      R4       K   	  R# )r   Nr   Niterr   IntervalDifferentialranger   nextr   r   is   &  r    testDefault%IntervalDifferentialTests.testDefault  s;    **2r23sAT!Wj1 r#   c                    \        \        P                  ! ^.^
4      4      p\        ^d4       F  pV P	                  \        V4      R4       K   	  R# )   NrM      rC  rH  s   &  r    
testSingle$IntervalDifferentialTests.testSingle  s=    **A334sAT!Wf- r#   c                   \        \        P                  ! ^^.^
4      4      p\        ^d4       EFH  pV P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R	4       V P	                  \        V4      R
4       V P	                  \        V4      R4       V P	                  \        V4      R4       EKK  	  R# )rM  NrN  r   r   r   rO  )r   r   r   rO  r   r   r   rO  )r   r   r   rO  rO  r   rC  rH  s   &  r    testPair"IntervalDifferentialTests.testPair  s   **Aq6267sAT!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf- r#   c                t   \        \        P                  ! . RO^
4      4      p\        ^d4       EF  pV P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       V P	                  \        V4      R4       EK  	  R# )r   N)r   r   rM  rX  rY  )r   r   rU  )rO  r   rC  rH  s   &  r    
testTriple$IntervalDifferentialTests.testTriple  s   **9b9:sAT!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-T!Wf-' r#   c                p   \        \        P                  ! . ^
4      4      pV P                  \	        V4      R4       VP                  ^4       V P                  \	        V4      R4       V P                  \	        V4      R4       VP                  ^4       V P                  \	        V4      R4       V P                  \	        V4      R4       V P                  \	        V4      R4       V P                  \	        V4      R4       V P                  \	        V4      R4       V P                  \	        V4      R4       R# )r   NrB  rT  rY  )rD  r   rE  r   rG  addIntervalr   s   & r    
testInsert$IntervalDifferentialTests.testInsert  s    **2r23a*-	aa&)a&)	aa&)a&)a&)a&)a&)a&)r#   c                   \        \        P                  ! ^^.^
4      4      pV P                  \	        V4      R4       V P                  \	        V4      R4       V P                  \	        V4      R4       VP                  ^4       V P                  \	        V4      R4       V P                  \	        V4      R4       VP                  ^4       V P                  \	        V4      R4       V P                  \        VP
                  ^
4       R# )r   NrT  rS  rU  rW  rN  rB  )rD  r   rE  r   rG  removeIntervalassertRaises
ValueErrorr   s   & r    
testRemove$IntervalDifferentialTests.testRemove+  s    **Aq6267a&)a&)a&)	a&)a&)	a*-*a&6&6;r#   rN   N)rO   rP   rQ   rR   rJ  rP  rZ  r]  ra  rg  rS   rT   rU   s   @r    r@  r@    s(     2
.
. ..*
< 
<r#   r@  c                   .   a  ] tR tRt o RtRtR tRtV tR# )Recordi8  z0
Trivial user of L{FancyEqMixin} used by tests.
c                    Wn         W n        R # r   r   rs   r   r   rs   s   &&&r    __init__Record.__init__?      r#   rl  N	rO   rP   rQ   rR   ri   compareAttributesrn  rS   rT   rU   s   @r    rj  rj  8        # r#   rj  c                   .   a  ] tR tRt o RtRtR tRtV tR# )DifferentRecordiD  zD
Trivial user of L{FancyEqMixin} which is not related to L{Record}.
c                    Wn         W n        R # r   rl  rm  s   &&&r    rn  DifferentRecord.__init__K  rp  r#   rl  Nrq  rU   s   @r    ru  ru  D  rs  r#   ru  c                       ] tR tRtRtRtR# )DerivedRecordiP  z8
A class with an inheritance relationship to L{Record}.
rN   N)rO   rP   rQ   rR   ri   rS   rN   r#   r    ry  ry  P  s    r#   ry  c                   6   a  ] tR tRt o RtV 3R lR ltRtV tR# )EqualToEverythingiV  zI
A class the instances of which consider themselves equal to everything.
c                &   < V ^8  d   QhRS[ RS[/# r   otherreturnr   bool)formatrV   s   "r    __annotate__EqualToEverything.__annotate__[  s      F t r#   c                    R # )TrN   r   r~  s   &&r    __eq__EqualToEverything.__eq__[  s    r#   rN   NrO   rP   rQ   rR   ri   r  rS   rT   rU   s   @r    r{  r{  V  s      r#   r{  c                   6   a  ] tR tRt o RtV 3R lR ltRtV tR# )EqualToNothingi_  zF
A class the instances of which consider themselves equal to nothing.
c                &   < V ^8  d   QhRS[ RS[/# r}  r  )r  rV   s   "r    r  EqualToNothing.__annotate__d  s      F t r#   c                    R # )FrN   r  s   &&r    r  EqualToNothing.__eq__d  s    r#   rN   Nr  rU   s   @r    r  r  _  s      r#   r  c                   Z   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V tR# )EqualityTestsih  z
Tests for L{FancyEqMixin}.
c                
    ! R R\         P                  4      pV P                  V! 4       V! 4       8H  4       V P                  V! 4       V! 4       8g  4       V! 4       pV P                  W"8H  4       V P                  W"8g  4       R# )zu
Instances of a class which mixes in L{FancyEqMixin} but which
defines no comparison attributes compare by identity.
c                       ] tR tRtRtR# )*EqualityTests.test_identity.<locals>.Emptyis  rN   N)rO   rP   rQ   rR   rS   rN   r#   r    Emptyr  s  s    r#   r  N)r   FancyEqMixinr)   r%   )r   r  emptys   &  r    test_identityEqualityTests.test_identitym  sg    	D%% 	 	EG+,57*+'(r#   c                F   V P                  \        ^^4      \        ^^4      8H  4       V P                  \        ^^4      \        ^^4      8H  4       V P                  \        ^^4      \        ^^4      8H  4       V P                  \        ^^4      \        ^^4      8H  4       R# )z
Instances of a class which mixes in L{FancyEqMixin} should compare
equal if all of their attributes compare equal.  They should not
compare equal if any of their attributes do not compare equal.
N)r%   rj  r)   r+   s   &r    test_equalityEqualityTests.test_equality|  s~     	q!q!45115611561156r#   c                F   V P                  \        ^^4      \        ^^4      8g  4       V P                  \        ^^4      \        ^^4      8g  4       V P                  \        ^^4      \        ^^4      8g  4       V P                  \        ^^4      \        ^^4      8g  4       R# )zg
Inequality between instances of a particular L{record} should be
defined as the negation of equality.
N)r)   rj  r%   r+   s   &r    test_unequalityEqualityTests.test_unequality  sz    
 	1156q!q!45q!q!45q!q!45r#   c                V    V P                  \        ^^4      \        ^^4      8H  4       R# )zW
Instances of different classes which mix in L{FancyEqMixin} should not
compare equal.
N)r)   rj  ru  r+   s   &r    test_differentClassesEquality+EqualityTests.test_differentClassesEquality  s$    
 	1A)>>?r#   c                V    V P                  \        ^^4      \        ^^4      8g  4       R# )zU
Instances of different classes which mix in L{FancyEqMixin} should
compare unequal.
N)r%   rj  ru  r+   s   &r    test_differentClassesInequality-EqualityTests.test_differentClassesInequality  s"    
 	q!1(==>r#   c                F   V P                  \        ^^4      \        ^^4      8H  4       V P                  \        ^^4      \        ^^4      8H  4       V P                  \        ^^4      \        ^^4      8H  4       V P                  \        ^^4      \        ^^4      8H  4       R# )z
An instance of a class which derives from a class which mixes in
L{FancyEqMixin} should compare equal to an instance of the base class
if and only if all of their attributes compare equal.
N)r%   rj  ry  r)   r+   s   &r    test_inheritedClassesEquality+EqualityTests.test_inheritedClassesEquality  s     	q!a(;;<1q!)<<=1q!)<<=1q!)<<=r#   c                F   V P                  \        ^^4      \        ^^4      8g  4       V P                  \        ^^4      \        ^^4      8g  4       V P                  \        ^^4      \        ^^4      8g  4       V P                  \        ^^4      \        ^^4      8g  4       R# )z
An instance of a class which derives from a class which mixes in
L{FancyEqMixin} should compare unequal to an instance of the base
class if any of their attributes compare unequal.
N)r)   rj  ry  r%   r+   s   &r    test_inheritedClassesInequality-EqualityTests.test_inheritedClassesInequality  s~     	1q!)<<=q!a(;;<q!a(;;<q!a(;;<r#   c                    V P                  \        ^^4      \        4       8H  4       V P                  \        ^^4      \	        4       8H  4       R# )z
The right-hand argument to the equality operator is given a chance
to determine the result of the operation if it is of a type
unrelated to the L{FancyEqMixin}-based instance on the left-hand
side.
N)r%   rj  r{  r)   r  r+   s   &r    (test_rightHandArgumentImplementsEquality6EqualityTests.test_rightHandArgumentImplementsEquality  s;     	q!(9(;;<1)99:r#   c                    V P                  \        ^^4      \        4       8g  4       V P                  \        ^^4      \	        4       8g  4       R# )z
The right-hand argument to the non-equality operator is given a
chance to determine the result of the operation if it is of a type
unrelated to the L{FancyEqMixin}-based instance on the left-hand
side.
N)r)   rj  r{  r%   r  r+   s   &r    *test_rightHandArgumentImplementsUnequality8EqualityTests.test_rightHandArgumentImplementsUnequality  s;     	1):)<<=q!(889r#   rN   N)rO   rP   rQ   rR   ri   r  r  r  r  r  r  r  r  r  rS   rT   rU   s   @r    r  r  h  s=     )	76@?	>	=;: :r#   r  r   zgeteuid/seteuid not availablec                   `   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V tR# )RunAsEffectiveUserTestsi  z3
Test for the L{util.runAsEffectiveUser} function.
c                |   \        4       V n        V P                  \        R V P                  P                  4       V P                  \        RV P                  P
                  4       V P                  \        RV P                  P                  4       V P                  \        RV P                  P                  4       R# )r   getegidseteuidsetegidN)r   r   r   r8   r   r  r  r  r+   s   &r    r   RunAsEffectiveUserTests.setUp  ss    h

2y$++"5"56

2y$++"5"56

2y$++"5"56

2y$++"5"56r#   c                    T P                  W18H  ;'       g     W0P                  P                  R,          8H  4       T P                  WB8H  ;'       g     W@P                  P                  R,          8H  4       R# )z6
Check if wanted UID/GID matched start or saved ones.
N)r%   r   r   setegidCalls)r   startUIDstartGIDwantUIDwantGIDs   &&&&&r    _securedFunction(RunAsEffectiveUserTests._securedFunction  sX     	+VVw++:R:RSU:V/VW+VVw++:R:RSU:V/VWr#   c                \    \         P                  ! ^ ^ R 4      pV P                  V^4       R# )zW
L{util.runAsEffectiveUser} forwards the result obtained by calling the
given function
c                      ^# )r   rN   rN   r#   r    <lambda><RunAsEffectiveUserTests.test_forwardResult.<locals>.<lambda>  s    qr#   Nr   runAsEffectiveUserr   r   r   s   & r    test_forwardResult*RunAsEffectiveUserTests.test_forwardResult  s(    
 ((Ay9#r#   c                ^    \         P                  ! ^ ^ R ^4      pV P                  V^4       R# )zM
L{util.runAsEffectiveUser} pass the given parameters to the given
function.
c                     ^V ,          # )r   rN   )r   s   &r    r  =RunAsEffectiveUserTests.test_takeParameters.<locals>.<lambda>  s    Qr#   Nr  r  s   & r    test_takeParameters+RunAsEffectiveUserTests.test_takeParameters  s*    
 ((AB#r#   c                f    \         P                  ! ^ ^ RR l^^R7      pV P                  V^4       R# )zO
L{util.runAsEffectiveUser} pass the keyword parameters to the given
function.
c                      W,          V,          # r   rN   )r   r   zs   &&&r    r  DRunAsEffectiveUserTests.test_takesKeyworkArguments.<locals>.<lambda>  s
    1519r#   )r  NrV  r  r  s   & r    test_takesKeyworkArguments2RunAsEffectiveUserTests.test_takesKeyworkArguments  s.    
 ((A/LaSTU#r#   c           	     n   WP                   n        W P                   n        \        P                  ! VVV P
                  VVVV4       V P                  V P                   P                  V4       V P                  V P                   P                  V4       . V P                   n        . V P                   n        R# )z
Helper method checking the calls to C{os.seteuid} and C{os.setegid}
made by L{util.runAsEffectiveUser}, when switching from startUID to
wantUID and from startGID to wantGID.
N)	r   r   egidr   r  r  r   r   r  )r   r  r  r  r  expectedUIDSwitchesexpectedGIDSwitchess   &&&&&&&r    _testUIDGIDSwitch)RunAsEffectiveUserTests._testUIDGIDSwitch  s     $#!!	
 	113FG113FG#% #% r#   c           	         V P                  ^ ^ ^ ^ . . 4       V P                  ^ ^ ^^ ^^ .. 4       V P                  ^ ^ ^ ^. ^^ .4       V P                  ^ ^ ^^^^ .^^ .4       R# )z<
Check UID/GID switches when current effective UID is root.
Nr  r+   s   &r    	test_root!RunAsEffectiveUserTests.test_root  st     	q!Q2r2q!QAq626q!Q21v6q!QAq6Aq6:r#   c           	         V P                  ^^ ^ ^ ^ ^.. 4       V P                  ^^ ^^ . . 4       V P                  ^^ ^^. RO^^ .4       V P                  ^^ ^^. RO^^ .4       R# )z@
Check UID/GID switches when current effective UID is non-root.
NrO  r   rO  r   rO  r   rO  r   r  r+   s   &r    test_UID RunAsEffectiveUserTests.test_UID  sp     	q!QAq626q!Q2r2q!Q<!Q@q!Q<!Q@r#   c           	         V P                  ^ ^^ ^ . ^ ^.4       V P                  ^ ^^ ^. . 4       V P                  ^ ^^^^^ .. 4       V P                  ^ ^^^^^ .^^.4       R# )z@
Check UID/GID switches when current effective GID is non-root.
Nr  r+   s   &r    test_GID RunAsEffectiveUserTests.test_GID&  st     	q!Q21v6q!Q2r2q!QAq626q!QAq6Aq6:r#   c           	     b   V P                  ^^^ ^ ^ ^.^ ^.4       V P                  ^^^ ^^ ^.. 4       V P                  ^^^^ . RO^ ^.4       V P                  ^^^^. . 4       V P                  ^^^^. RO. 4       V P                  ^^^^. RO^^.4       V P                  ^^^^. RO^^.4       R# )zD
Check UID/GID switches when current effective UID/GID is non-root.
Nr  r  r  r+   s   &r    test_UIDGID#RunAsEffectiveUserTests.test_UIDGID/  s     	q!QAq6Aq6:q!QAq626q!Q<!Q@q!Q2r2q!Q<<q!Q<!Q@q!Q<!Q@r#   )r   N)rO   rP   rQ   rR   ri   r   r  r  r  r  r  r  r  r  r  rS   rT   rU   s   @r    r  r    sE     7X$$$&<;A;
A 
Ar#   r  z.stdlib support for initgroups is not availablec                   0   a  ] tR tRt o RtR tR tRtV tR# )InitGroupsTestsi<  z
Tests for L{util.initgroups}.
c                  a . oV3R lpV P                  \        RV4       . pV P                  \        RVP                  4       \        P                  ! \        P
                  ! 4       ^4       V P                  S\        P                  \        P
                  ! 4       4      P                  ^3.4       V P                  V4       R# )zK
Calling L{util.initgroups} will call the underlying stdlib
implmentation.
c                 ,   < SP                  W34       R # r   )r   )r   r   rn   s   &&r    mockInitgroups?InitGroupsTests.test_initgroupsInStdlib.<locals>.mockInitgroupsI  s    LL! r#   _initgroups	setgroupsN)r   r   r   r~   r8   r9   r   r6   r7   r:   r)   )r   r  setgroupsCallsrn   s   &  @r    test_initgroupsInStdlib'InitGroupsTests.test_initgroupsInStdlibB  s    
 	! 	

47

4n&;&;<		Q'#,,ryy{";"C"CQ!G HI(r#   c                x    V P                  \        \        P                  \        P
                  ! 4       R4       R# )z>
Calling L{util.initgroups} with None for gid gives an error.
N)re  r*   r   r~   r8   r9   r+   s   &r    test_initgroupsNoneGid&InitGroupsTests.test_initgroupsNoneGidT  s"     	)T__biik4Hr#   rN   N)	rO   rP   rQ   rR   ri   r  r  rS   rT   rU   s   @r    r  r  <  s     )$I Ir#   r  c                   P   a  ] tR tRt o RtR tR t]! ]RR7      .]n	        Rt
V tR# )	DeprecationTestsi[  z3
Tests for deprecations in C{twisted.python.util}.
c                (   \         P                  ! 4        V P                  V P                  .R7      pV P	                  V^ ,          R,          R4       V P	                  V^ ,          R,          \
        4       V P	                  \        V4      ^4       R# )z&
L{util.getPluginDirs} is deprecated.
r   r   zCtwisted.python.util.getPluginDirs is deprecated since Twisted 12.2.r   N)r   getPluginDirsr   test_getPluginDirsr   r   r   r   r   s   & r    r  #DeprecationTests.test_getPluginDirs`  s     	,, $ 7 78 - 
 	Ay)T	
 	+J79KL_-q1r#   c                (   \         P                  ! 4        V P                  V P                  .R7      pV P	                  V^ ,          R,          R4       V P	                  V^ ,          R,          \
        4       V P	                  \        V4      ^4       R# )z%
L{util.addPluginDir} is deprecated.
r   r   zBtwisted.python.util.addPluginDir is deprecated since Twisted 12.2.r   N)r   addPluginDirr   test_addPluginDirr   r   r   r  s   & r    r  "DeprecationTests.test_addPluginDiro  s     	,, $ 6 67 - 
 	Ay)S	
 	+J79KL_-q1r#   z/twisted.python.util.getPluginDirs is deprecated)r   r   rN   N)rO   rP   rQ   rR   ri   r  r  SUPPRESSr   r   rS   rT   rU   s   @r    r  r  [  s2     22  	'E	
"r#   r  c                   `   a  ] tR tRt o Rt]! ]P                  4      tR tR t	R t
R tRtV tR# )	SuppressedWarningsTestsi  z.
Tests for L{util.runWithWarningsSuppressed}.
c                    R/ 3R/ 3.pV P                  V\        P                  R4       V P                  V\        P                  R4       V P                  . V P	                  4       4       R# )zv
Warnings from the function called by C{runWithWarningsSuppressed} are
suppressed if they match the passed in filter.

ignore fooz
ignore barNignorez.*foo.*r
  z.*bar.*runWithWarningsSuppressedwarningswarnr   r   )r   filterss   & r    &test_runWithWarningsSuppressedFiltered>SuppressedWarningsTests.test_runWithWarningsSuppressedFiltered  s^    
 *2.1F0KL&&w|L&&w|LT//12r#   c                    R/ 3R/ 3.pV P                  V\        P                  R4       T P                  R.V P	                  4        Uu. uF  q"R,          NK  	  up4       R# u upi )z
Warnings from the function called by C{runWithWarningsSuppressed} are
not suppressed if they do not match the passed in filter.
zdon't ignorer   Nr	  r  r  r   r  r.  s   &  r    (test_runWithWarningsSuppressedUnfiltered@SuppressedWarningsTests.test_runWithWarningsSuppressedUnfiltered  sc    
 *2.1F0KL&&w~N.)$BTBTBV+WBVQiLLBV+WX+Ws   	A#
c                L    V P                  V P                  . R 4      ^4       R# )zL
C{runWithWarningsSuppressed} returns the result of the function it
called.
c                      ^# )r   rN   rN   r#   r    r  :SuppressedWarningsTests.test_passThrough.<locals>.<lambda>  s    Ar#   N)r   r  r+   s   &r    test_passThrough(SuppressedWarningsTests.test_passThrough  s!    
 	77IFJr#   c                    R/ 3R/ 3.pV P                  VR 4       \        P                  ! R4       T P                  R.V P	                  4        Uu. uF  q"R,          NK  	  up4       R# u upi )zS
Once C{runWithWarningsSuppressed} has returned, it no longer
suppresses warnings.
c                      R # r   rN   rN   r#   r    r  <SuppressedWarningsTests.test_noSideEffects.<locals>.<lambda>  s    r#   r  r   Nr	  r  r  r  s   &  r    test_noSideEffects*SuppressedWarningsTests.test_noSideEffects  sh    
 *2.1F0KL&&w=l#,@R@R@T)U@T1I,,@T)UV)Us   A+
rN   N)rO   rP   rQ   rR   ri   staticmethodr   r  r  r  r  r  rS   rT   rU   s   @r    r  r    s:      !-T-K-K L3YKW Wr#   r  c                   B   a  ] tR tRt o RtR tR tR tR tR t	Rt
V tR	# )
FancyStrMixinTestsi  z"
Tests for L{util.FancyStrMixin}.
c                x     ! R R\         P                  4      pV P                  \        V! 4       4      R4       R# )z
If C{showAttributes} is set to a sequence of strings, C{__str__}
renders using those by looking them up as attributes on the object.
c                   "    ] tR tRtRt^tRtRtR# )6FancyStrMixinTests.test_sequenceOfStrings.<locals>.Fooi  hellorN   NfirstsecondrO   rP   rQ   rR   showAttributesr)  r*  rS   rN   r#   r    r_   r&        0NEFr#   r_   z<Foo first=1 second='hello'>Nr   FancyStrMixinr   strr   r_   s   & r    test_sequenceOfStrings)FancyStrMixinTests.test_sequenceOfStrings  s-    	$$$ 	
 	SU%CDr#   c                x     ! R R\         P                  4      pV P                  R\        V! 4       4      4       R# )z
If C{showAttributes} has an item that is a 2-tuple, C{__str__} renders
the first item in the tuple as a key and the result of calling the
second item with the value of the attribute named by the first item as
the value.
c                   ,    ] tR tRtRRR 33tRtRtRtR# )	.FancyStrMixinTests.test_formatter.<locals>.Fooi  r)  r*  c                ,    \        V R R R1,          4      # )Nr  )r   )values   &r    r  7FancyStrMixinTests.test_formatter.<locals>.Foo.<lambda>  s    U4R4[@Qr#   r'  worldrN   Nr+  rN   r#   r    r_   r6    s    %2Q'RSNEFr#   r_   z"<Foo first='hello' second='dlrow'>Nr.  r1  s   & r    test_formatter!FancyStrMixinTests.test_formatter  s-    	$$$ 	
 	=s35zJr#   c                x     ! R R\         P                  4      pV P                  \        V! 4       4      R4       R# )z
If C{showAttributes} has an item that is a 3-tuple, C{__str__} renders
the second item in the tuple as a key, and the contents of the
attribute named in the first item are rendered as the value. The value
is formatted using the third item in the tuple.
c                   "    ] tR tRtRt^tRtRtR# )-FancyStrMixinTests.test_override.<locals>.Fooi  gS @rN   N)r)  )r*  2ndz%.1fr+  rN   r#   r    r_   r?    s    ANEFr#   r_   z<Foo first=1 2nd=2.1>Nr.  r1  s   & r    test_override FancyStrMixinTests.test_override  s-    	$$$ 	
 	SU%<=r#   c                x     ! R R\         P                  4      pV P                  \        V! 4       4      R4       R# )zO
If C{fancybasename} is present, C{__str__} uses it instead of the class name.
c                       ] tR tRtRtRtR# )2FancyStrMixinTests.test_fancybasename.<locals>.Fooi  BarrN   N)rO   rP   rQ   rR   fancybasenamerS   rN   r#   r    r_   rE    s    !Mr#   r_   z<Bar>Nr.  r1  s   & r    test_fancybasename%FancyStrMixinTests.test_fancybasename  s,    
	"$$$ 	" 	SUW-r#   c                     ! R R\         P                  4      pV! 4       pV P                  \        V4      \	        V4      4       R# )z5
C{__repr__} outputs the same content as C{__str__}.
c                   "    ] tR tRtRt^tRtRtR# ))FancyStrMixinTests.test_repr.<locals>.Fooi  r'  rN   Nr(  r+  rN   r#   r    r_   rL    r-  r#   r_   N)r   r/  r   r0  r   )r   r_   objs   &  r    	test_reprFancyStrMixinTests.test_repr  s5    
	$$$ 	
 eS49-r#   rN   N)rO   rP   rQ   rR   ri   r2  r;  rA  rH  rN  rS   rT   rU   s   @r    r#  r#    s*     EK>.. .r#   r#  c                   N   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V tR# )
PadToTestsi  z
Tests for L{util.padTo}.
c                h    \         P                  ! ^. 4      pV P                  R.^,          V4       R# )zM
L{None} values can be added to a list to cause it to have a certain
length.
Nr   padTor   r   paddeds   & r    test_defaultPadToTests.test_default  s*    
 Ar"$!V,r#   c                j    \         P                  ! ^. R4      pV P                  R.^,          V4       R# )zO
A specific value can be added to a list to cause it to have a certain
length.
r   NrS  rU  s   & r    test_specificDefaultValue$PadToTests.test_specificDefaultValue  s,    
 Ar3'#F+r#   c                b    \         P                  ! ^^^.R4      pV P                  . ROV4       R# )zT
A list which already has some items has the padding value added after
those items.
r  N)r   r   r  rS  rU  s   & r    test_padNonEmptyListPadToTests.test_padNonEmptyList  s*    
 A1vs+f-r#   c                V    V P                  \        \        P                  ^^^.4       R# )zc
L{util.padTo} can't pad a list if the size requested is smaller than
the size of the list to pad.
N)re  rf  r   rT  r+   s   &r    test_padToSmallerSize PadToTests.test_padToSmallerSize  s     
 	*djj!aV<r#   c                p    ^^.p\         P                  ! \        V4      V4      pV P                  W4       R# )zr
If the list is already the length indicated by the padding argument
then a list with the same value is returned.
N)r   rT  r   r   r   r   rV  s   &  r    test_alreadyPaddedPadToTests.test_alreadyPadded  s/    
 ACJ.'r#   c                p    ^^.p\         P                  ! \        V4      V4      pV P                  W!4       R# )zs
If the list is already the length indicated by the padding argument
then the return value is a copy of the input.
N)r   rT  r   assertIsNotrc  s   &  r    test_alreadyPaddedCopies#PadToTests.test_alreadyPaddedCopies'  s/    
 ACJ.'r#   c                \    . p\         P                  ! ^V4       V P                  . V4       R# )z?
L{util.padTo} doesn't modify the input list but makes a copy.
NrS  )r   r   s   & r    test_makeCopyPadToTests.test_makeCopy0  s'     

1eU#r#   rN   N)rO   rP   rQ   rR   ri   rW  rZ  r]  r`  rd  rh  rk  rS   rT   rU   s   @r    rQ  rQ    s2     -,.=(($ $r#   rQ  )Gri   rq   os.pathr8   r9  r$  r  typingr   r   r   r   unittestr   rF   _grpr6   _pwdImportErrortwisted.internetr   twisted.internet.deferr   twisted.internet.errorr	   twisted.internet.interfacesr
   twisted.internet.protocolr   twisted.pythonr   twisted.python.filepathr   twisted.test.test_processr   twisted.trial.unittestr   r   twisted.trial.utilr   r  
executable_asBytesPathr!  r   rX   rk   getattrr|   r   r   r   r  
providedByr  r,  r@  r  rj  ru  ry  r{  r  r  r  r  r  r  r  r#  rQ  rN   r#   r    <module>r     sc  

    
  > > 
 C
C $ + . 7 5  , , 5 3 --/.J .JbVx V*(( (> GB$'')FGCVX CV HCVL]' ]'@2x 2.M-8 M-`6_ 6" ""7++27x 7	7D+ +.J< J<Z	T 		d'' 	F   _:H _:D GB	4((*IJnAh nA KnAb DNOIh I PI<(x (V)Wh )WXE. E.P<$ <$K  
C
Cs   H H"!H"