+
    Dfj,                     0   R t ^ RIHtHt ^ RIHtHtHtHtH	t	H
t
 ^ RI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 ^ 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 R]PN                  PP                  PR                  4      t*R# )z2
Tests for L{twisted.application.twist._options}.
)stderrstdout)CallableDictListOptionalTextIOTupleN)version)reactor)IReactorCore)MemoryReactor)FileLogObserverLogLeveljsonFileLogObservertextFileLogObserver)
UsageError)NoSuchReactor)
ExitStatus)	DummyExit)ServiceMaker)_options)TwistOptionsc                     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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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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R0 lR1 ltV 3R2 lR3 ltV 3R4 lR5 ltV 3R6 lR7 ltV 3R8 lR9 lt R:t!V t"R;# )<OptionsTestsz
Tests for L{TwistOptions}.
c                   < V ^8  d   QhRR/#    returnN )format__classdict__s   "M/usr/lib/python3/dist-packages/twisted/application/twist/test/test_options.py__annotate__OptionsTests.__annotate__$   s     0 04 0    c                f    \        4       V n        V P                  \        RV P                  4       R# )zH
Patch L{_twist.exit} so we can capture usage and prevent actual exits.
exitN)r   r'   patchr   selfs   &r"   	patchExitOptionsTests.patchExit$   s!     K	

8VTYY/r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   +   s     3 34 3r%   c                Z   a  . S n         RR V 3R lllpS P                  \        RV4       R# )zJ
Patch L{_options.open} so we can capture usage and prevent actual opens.
Nc                R    V ^8  d   QhR\         R\        \         ,          R\        /# )r   namemoder   )strr   r   )r    s   "r"   r#   ,OptionsTests.patchOpen.<locals>.__annotate__1   s%     	" 	"3 	"hsm 	"v 	"r%   c                 p   < V R 8X  d   \        RRV 4      hSP                  P                  W34       \        # )	nocanopenN)OSErroropenedappendNotImplemented)r0   r1   r*   s   &&r"   fakeOpen(OptionsTests.patchOpen.<locals>.fakeOpen1   s4    {"dD$//KK|,!!r%   openFile)N)r7   r(   r   )r*   r:   s   f r"   	patchOpenOptionsTests.patchOpen+   s(     8:	" 	" 	

8Z2r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   :   s     ? ?T ?r%   c                V   a  / S n         R V 3R llpS P                  \        RV4       R# )zW
Patch C{_options.installReactor} so we can capture usage and prevent
actual installs.
c                0    V ^8  d   QhR\         R\        /# )r   r0   r   )r2   r   )r    s   "r"   r#   6OptionsTests.patchInstallReactor.<locals>.__annotate__A   s     	 	 	 	r%   c                 \   < V R 8w  d   \        4       h\        4       pVSP                  V &   V# )fusion)r   r   installedReactors)r0   r   r*   s   & r"   installReactor8OptionsTests.patchInstallReactor.<locals>.installReactorA   s/    x#o%#oG+2D""4(Nr%   rF   N)rE   r(   r   )r*   rF   s   f r"   patchInstallReactor OptionsTests.patchInstallReactor:   s*    
 ;=	 	 	

8-~>r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   K   s     T Tt Tr%   c                v    \        4       pV P                  VP                  4       P                  R4      4       R# )z0
L{TwistOptions.getSynopsis} appends arguments.
z plugin [plugin_options]N)r   
assertTruegetSynopsisendswithr*   optionss   & r"   test_synopsisOptionsTests.test_synopsisK   s,     .++-667QRSr%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   S   s     6 6d 6r%   c                   V P                  4        \        4       pVP                  4        V P                  V P                  P
                  \        P                  4       V P                  V P                  P                  \        4       R# )zT
L{TwistOptions.opt_version} exits with L{ExitStatus.EX_OK} and prints
the version.
N)
r+   r   opt_versionassertEqualsr'   statusr   EX_OKmessager
   rO   s   & r"   test_versionOptionsTests.test_versionS   s[    
 	.$))**J,<,<=$))++W5r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   `   s     < <d <r%   c                    V P                  4        \        4       pVP                  R4       V P                  \	        V P
                  4      R04       V P                  VR,          R4       R# )zW
L{TwistOptions.installReactor} installs the chosen reactor and sets
the reactor name.
rD   reactorNameN)rH   r   opt_reactorassertEqualsetrE   rV   rO   s   & r"   test_reactorOptionsTests.test_reactor`   sW    
 	  ".H%T334xjA'-0(;r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   m   s     B BD Br%   c                    V P                  4        \        4       pRVn        VP                  R.4       V P	                  \        V P                  4      R04       R# )zm
L{TwistOptions.installReactor} installs the chosen reactor after the
command line options have been parsed.
ztest-subcommandz--reactor=fusionrD   N)rH   r   
subCommandparseOptionsr`   ra   rE   rO   s   & r"   test_installCorrectReactor'OptionsTests.test_installCorrectReactorm   sN    
 	  "..012T334xjAr%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   z   s     C C$ Cr%   c                |    V P                  4        \        4       pV P                  \        VP                  R4       R# )zV
L{TwistOptions.installReactor} raises UsageError if an unknown reactor
is specified.
coalN)rH   r   assertRaisesr   r_   rO   s   & r"   test_installReactorBogus%OptionsTests.test_installReactorBogusz   s/    
 	  ".*g&9&96Br%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      s     I ID Ir%   c                d    \        4       pV P                  \        VP                  R4      4       R# )zt
L{TwistOptions.installReactor} returns the currently installed reactor
when the default reactor name is specified.
defaultN)r   assertIdenticalr   rF   rO   s   & r"   test_installReactorDefault'OptionsTests.test_installReactorDefault   s&    
 .Wg&<&<Y&GHr%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      s     A AD Ar%   c                    \        4       pVP                  R4       V P                  VR,          \        P                  4       R# )zA
L{TwistOptions.opt_log_level} sets the corresponding log level.
warnlogLevelN)r   opt_log_levelrs   r   rx   rO   s   & r"   test_logLevelValidOptionsTests.test_logLevelValid   s2     .f%WZ0(--@r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      s     G Gd Gr%   c                \    \        4       pV P                  \        VP                  R4       R# )zQ
L{TwistOptions.opt_log_level} with an invalid log level name raises
UsageError.
cheeseN)r   rm   r   rz   rO   s   & r"   test_logLevelInvalid!OptionsTests.test_logLevelInvalid   s#    
 .*g&;&;XFr%   c                *   < V ^8  d   QhRS[ RS[RR/# )r   r0   expectedStreamr   N)r2   r   )r    r!   s   "r"   r#   r$      s'     
A 
A 
Af 
A 
Ar%   c                n    \        4       pVP                  V4       V P                  VR,          V4       R# )z
Set log file name and check the selected output stream.

@param name: The name of the file.
@param expectedStream: The expected stream.
logFileN)r   opt_log_filers   )r*   r0   r   rP   s   &&& r"   _testLogFileOptionsTests._testLogFile   s.     .T"WY/@r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$           ' 'D 'r%   c                2    V P                  R\        4       R# )zG
L{TwistOptions.opt_log_file} given C{"-"} as a file name uses stdout.
-N)r   r   r)   s   &r"   test_logFileStdoutOptionsTests.test_logFileStdout        	#v&r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      r   r%   c                2    V P                  R\        4       R# )zG
L{TwistOptions.opt_log_file} given C{"+"} as a file name uses stderr.
+N)r   r   r)   s   &r"   test_logFileStderrOptionsTests.test_logFileStderr   r   r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      s     	8 	84 	8r%   c                    V P                  4        \        4       pVP                  R4       V P                  R.V P                  4       R# )zH
L{TwistOptions.opt_log_file} opens the given file name in append mode.
mylogN)r   a)r=   r   r   r`   r7   rO   s   & r"   test_logFileNamedOptionsTests.test_logFileNamed   s:     	.W%.)4;;7r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      s     
 
d 
r%   c                   V P                  4        V P                  4        \        4       pVP                  R4       V P	                  V P
                  P                  \        P                  4       V P                  V P
                  P                  4       V P                  V P
                  P                  P                  R4      4       R# )z~
L{TwistOptions.opt_log_file} exits with L{ExitStatus.EX_IOERR} if
unable to open the log file due to an L{EnvironmentError}.
r5   z%Unable to open log file 'nocanopen': N)r+   r=   r   r   rV   r'   rW   r   EX_IOERRassertIsNotNonerY   rL   
startswithrO   s   & r"   test_logFileCantOpen!OptionsTests.test_logFileCantOpen   s    
 	.[)$))**J,?,?@TYY../II((7	
r%   c                B   < V ^8  d   QhRS[ RS[S[.S[3,          RR/# )r   r    expectedObserverFactoryr   N)r2   r   r   r   )r    r!   s   "r"   r#   r$      s1     7 774<fX=V4W7	7r%   c                    \        4       pVP                  V4       V P                  VR,          V4       V P                  VR,          V4       R# )z
Set log file format and check the selected observer factory.

@param format: The format of the file.
@param expectedObserverFactory: The expected observer factory.
fileLogObserverFactory	logFormatN)r   opt_log_formatrs   r`   )r*   r    r   rP   s   &&& r"   _testLogFormatOptionsTests._testLogFormat   sE     .v&W%=>@WX-v6r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$           9 9D 9r%   c                2    V P                  R\        4       R# )O
L{TwistOptions.opt_log_format} given C{"text"} uses a
L{textFileLogObserver}.
textN)r   r   r)   s   &r"   test_logFormatTextOptionsTests.test_logFormatText       
 	F$78r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      r   r%   c                2    V P                  R\        4       R# )r   jsonN)r   r   r)   s   &r"   test_logFormatJSONOptionsTests.test_logFormatJSON   r   r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      s     J Jt Jr%   c                \    \        4       pV P                  \        VP                  R4       R# )zS
L{TwistOptions.opt_log_format} given an invalid format name raises
L{UsageError}.
frommageN)r   rm   r   r   rO   s   & r"   test_logFormatInvalid"OptionsTests.test_logFormatInvalid   s#    
 .*g&<&<jIr%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$      s     7 7 7r%   c                
   V P                  4        \        4       pVP                  R4       VP                  R4       VP	                  4        V P                  VR,          \        4       V P                  VR,          R4       R# )Z
L{TwistOptions.selectDefaultLogObserver} will not override an already
selected observer.
r   quesor   r   N)r=   r   r   r   selectDefaultLogObserverrs   r   r`   rO   s   & r"   'test_selectDefaultLogObserverNoOverride4OptionsTests.test_selectDefaultLogObserverNoOverride   sk    
 	.v&W%((* 	W%=>@ST-v6r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$     s     7 7T 7r%   c                    ! R R4      pV P                  \        RV! 4       4       \        4       pVP                  R4       VP	                  4        V P                  VR,          \        4       V P                  VR,          R4       R# )	r   c                   2   a  ] tR tRt o V 3R lR ltRtV tR# )IOptionsTests.test_selectDefaultLogObserverDefaultWithTTY.<locals>.TTYFilei  c                    < V ^8  d   QhRS[ /# )r   r   )bool)r    r!   s   "r"   r#   VOptionsTests.test_selectDefaultLogObserverDefaultWithTTY.<locals>.TTYFile.__annotate__  s       r%   c                    R # )Tr   r)   s   &r"   isattyPOptionsTests.test_selectDefaultLogObserverDefaultWithTTY.<locals>.TTYFile.isatty  s    r%   r   N)__name__
__module____qualname____firstlineno__r   __static_attributes____classdictcell__r!   s   @r"   TTYFiler     s      r%   r   r   r   r   r   r   N)r(   r   r   r   r   rs   r   r`   )r*   r   rP   s   &  r"   +test_selectDefaultLogObserverDefaultWithTTY8OptionsTests.test_selectDefaultLogObserverDefaultWithTTY  sm    	 	
 	

8Xwy1.S!((*W%=>@ST-v6r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$     s     7 7 7r%   c                    V P                  4        \        4       pVP                  R4       VP                  4        V P	                  VR,          \
        4       V P                  VR,          R4       R# )r   r   r   r   r   N)r=   r   r   r   rs   r   r`   rO   s   & r"   .test_selectDefaultLogObserverDefaultWithoutTTY;OptionsTests.test_selectDefaultLogObserverDefaultWithoutTTY  s[    
 	.W%((*W%=>@ST-v6r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   -  s     	? 	?$ 	?r%   c                    \        4       pVP                  pV F5  pV P                  V\        4       V P                  W#,          \        4       K7  	  R# )z=
L{TwistOptions.plugins} is a mapping of available plug-ins.
N)r   pluginsassertIsInstancer2   r   )r*   rP   r   r0   s   &   r"   test_pluginsTypeOptionsTests.test_pluginsType-  s@     .//D!!$,!!'-> r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   8  s     . . .r%   c                R    \        4       pV P                  RVP                  4       R# )z
L{TwistOptions.plugins} includes a C{"web"} plug-in.
This is an attempt to verify that something we expect to be in the list
is in there without enumerating all of the built-in plug-ins.
webN)r   assertInr   rO   s   & r"   test_pluginsIncludeWeb#OptionsTests.test_pluginsIncludeWeb8  s     .eW__-r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   B  s     , ,d ,r%   c                    \        4       pVP                   F^  w  r#rEV P                  V\        4       V P	                  VR4       V P                  \        V4      4       V P                  V\        4       K`  	  R# )zf
L{TwistOptions.subCommands} is an iterable of tuples as expected by
L{twisted.python.usage.Options}.
N)r   subCommandsr   r2   rs   rL   callable)r*   rP   r0   shortcutparserdocs   &     r"   test_subCommandsType!OptionsTests.test_subCommandsTypeB  sa    
 .+2+>+>'DF!!$,  40OOHV,-!!#s+	 ,?r%   c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   O  s     	/ 	/D 	/r%   c           
         \        4       p\        VP                  4      pVP                   UUUUu0 uF  w  r4rVVkK
  	  pppppV P	                  Wr4       R# u uppppi )zG
L{TwistOptions.subCommands} includes a sub-command for every plug-in.
N)r   ra   r   r   r`   )r*   rP   r   r0   r   r   r   r   s   &       r"   test_subCommandsIncludeWeb'OptionsTests.test_subCommandsIncludeWebO  sN     .goo&?F?R?RS?R ;t?RS. Ts   A
c                   < V ^8  d   QhRR/# r   r   )r    r!   s   "r"   r#   r$   Z  s     	; 	;d 	;r%   c                z    V P                  4        \        4       pV P                  \        VP                  4       R# )zL
L{TwistOptions.postOptions} raises L{UsageError} is it has no
sub-command.
N)rH   r   rm   r   postOptionsrO   s   & r"   test_postOptionsNoSubCommand)OptionsTests.test_postOptionsNoSubCommandZ  s-    
 	  ".*g&9&9:r%   )r'   rE   r7   N)#r   r   r   r   __doc__r+   r=   rH   rQ   rZ   rb   rh   rn   rt   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r"   r   r      s2    0 03 3? ?"T T6 6< <B BC CI IA AG G
A 
A' '' '	8 	8
 
&7 79 99 9J J7 7"7 7(7 7	? 	?. ., ,	/ 	/	; 	;r%   r   )+r   sysr   r   typingr   r   r   r   r   r	   twisted.trial.unittesttwistedtwisted.copyrightr
   twisted.internetr   twisted.internet.interfacesr   twisted.internet.testingr   twisted.loggerr   r   r   r   twisted.python.usager   reactorsr   runner._exitr   runner.test.test_runnerr   servicer   twistr   r   trialunittestTestCaser   r   r%   r"   <module>r     sc     @ @  % $ 4 2  , % & 0 #  #D;7==))22 D;r%   