
    4                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlZddlZddl	Z	ddl
mZ ddl
mZ dd	l
mZ dd
l
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ej0                   G d dej2                               Zy)zThe `gcloud meta test` command.    )absolute_import)division)print_function)unicode_literalsN)arg_parsers)base)parser_completer)parser_errors)
completers)
exceptions)execution_utils)module_util)
console_io)progress_trackerc                   n    e Zd ZdZed        Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zy)TestzRun miscellaneous gcloud command and CLI test scenarios.

  This command sets up scenarios for testing the gcloud command and CLI.
  c                    | j                  ddt        j                  d       | j                  dd      }|j                  dt	        j
                         dd	
       |j                  dt	        j                         dd
       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  dd t        d!d"#       |j                  d$d t        d!d%#       |j                  d&dd'       |j                  d(dd)       |j                  d*dd+       y ),Nname*z5command_lib.compute.TestCompleter instance name test.)nargs	completerhelpT)mutexrequiredz
--arg-dict
ATTRIBUTESzArgDict flag value test.)typemetavarr   z
--arg-listITEMSzArgList flag value test.z --argumenterror-outside-argparse
store_truezMTrigger a calliope.parser_errors.ArgumentError exception outside of argparse.)actionr   z--core-exceptionzTrigger a core exception.z--exec-fileSCRIPT_FILEzRuns `bash SCRIPT_FILE`.)r   r   z--interruptzKill the command with SIGINT.z--is-interactivezaCall console_io.IsInteractive(heuristic=True) and exit 0 if the return value is True, 1 if False.z--prompt-completerMODULE_PATHzlCall console_io.PromptResponse() with a MODULE_PATH completer and print the response on the standard output.z--progress-trackerSECONDSg        z6Run the progress tracker for SECONDS seconds and exit.)r   r   defaultr   z--sleepz#Sleep for SECONDS seconds and exit.z--uncaught-exceptionz(Trigger an exception that is not caught.z--staged-progress-trackerz$Run example staged progress tracker.z--feature-flagz"Print the value of a feature flag.)add_argumentr   TestCompleter	add_groupr   ArgDictArgListfloat)parser	scenarioss     lib/surface/meta/test.pyArgsz	Test.Args.   s   
**D	  F
   td ;I  "'	  )
   "'	  )
 *%  '
 (  * '  ) ,  . 9  ;
 ?  A
 E  G 2  4 7  9 #3  5 1  3    c                     |j                   S N)arg_dictselfargss     r-   _RunArgDictzTest._RunArgDictt       ==r/   c                     |j                   S r1   )arg_listr3   s     r-   _RunArgListzTest._RunArgListw   r7   r/   c                 .    t        j                  d      )Nz--some-flag)argument)r
   RequiredErrorr3   s     r-    _RunArgumenterrorOutsideArgparsez%Test._RunArgumenterrorOutsideArgparsez   s    

%
%}
==r/   c                 ,    t        j                  d      )NzSome core exception.)r   Errorr3   s     r-   _RunCoreExceptionzTest._RunCoreException}   s    


1
22r/   c                 F    t        j                  d|j                  g       y )Nbash)r   Exec	exec_filer3   s     r-   _RunExecFilezTest._RunExecFile   s    &$..12r/   c                 j    t        j                  t        t        j                  d                    y )NT)	heuristic)sysexitintr   IsInteractiver3   s     r-   _RunIsInteractivezTest._RunIsInteractive   s!    HHSZ--==>?r/   c                 N   	 t        j                  t        j                         t        j                         t        j                  d       t        j                  d      # t        $ r9 t        j                  t        j                         t        j                         Y Vw xY w)N   zSIGINT delivery failed.)oskillgetpidsignalCTRL_C_EVENTtimesleepAttributeErrorSIGINTr   r@   r3   s     r-   _RunInterruptzTest._RunInterrupt   sk    * 	ggbiik6../
jjm 

4
55  *ggbiik6==)*s   AA" "?B$#B$c                     t        j                  |j                        }t        j                  ||      }t        j                  d|      }t        |       y )NzComplete this: )choices)r   ImportModuleprompt_completerr	   ArgumentCompleterr   PromptResponseprint)r4   r5   completer_classr[   responses        r-   _RunPromptCompleterzTest._RunPromptCompleter   sD    !..t/D/DEO00$GG(():GLH	(Or/   c                     t        j                          fd}t        j                  d|      5  t        j                  j                         d d d        y # 1 sw Y   y xY w)Nc                  n    j                   t        j                         z
  z
  } dj                  |       S )Nz{0:.1f}s remaining)r   rU   format)remaining_timer5   
start_times    r-   message_callbackz2Test._RunProgressTracker.<locals>.message_callback   s/    ,,		j0HIn!((88r/   zThis is a progress tracker.)messagedetail_message_callback)rU   r   ProgressTrackerrV   )r4   r5   ri   rh   s    ` @r-   _RunProgressTrackerzTest._RunProgressTracker   sM    J9 
	)	)- 0
2 jj&&'
2 
2 
2s    AA&c                 B    t        j                  |j                         y r1   )rU   rV   r3   s     r-   	_RunSleepzTest._RunSleep   s    JJtzzr/   c                     t        d      )NzCatch me if you can.)
ValueErrorr3   s     r-   _RunUncaughtExceptionzTest._RunUncaughtException   s    
+
,,r/   c                    t        j                  dd      }t        j                  dd      }t        j                  dd      }|||g}t        j                  d|dd	d
      5 }|j                  d       t	        j
                  d       |j                  dd       t	        j
                  d       |j                  dd       |j                  d       t	        j
                  d       |j                  d       |j                  d       t	        j
                  d       |j                  d       d d d        y # 1 sw Y   y xY w)NzGetting bread...bread)keyzGetting peanut butter...pbzMaking sandwich...makezTime to eat!zTime to order delivery..!zmeta.make_sandwich)success_messagefailure_message
tracker_idg      ?zLooking for bread in the pantryzGot some whole wheat bread!rO   )r   StageStagedProgressTracker
StartStagerU   rV   UpdateStageCompleteStage)r4   r5   	get_breadget_pb_and_jmake_sandwichstagestrackers          r-   _RunStagedProgressTrackerzTest._RunStagedProgressTracker   s    &&'9wGI#))*D$OL$**+?VLM}5F		/	/&3'
)
 -4!
jjo'#DE
jjoG%BC
jjmD! 
jjmF#!
) 
) 
)s   %CD<<Ec                 
   |j                   r| j                  |      }|S |j                  r| j                  |      }|S |j                  r| j                  |      }|S |j                  r| j                  |       d }|S |j                  r| j                  |       d }|S |j                  r| j                  |       d }|S |j                  r| j                  |       d }|S |j                  r| j                  |       d }|S |j                   r| j#                  |       d }|S |j$                  r| j'                  |       d }|S |j(                  r| j+                  |      }|S |j,                  r| j/                  |       d }S r1   )r2   r6   r9   r:   argumenterror_outside_argparser>   core_exceptionrA   rE   rF   	interruptrY   is_interactiverM   r]   rc   r   rm   rV   ro   uncaught_exceptionrr   staged_progress_trackerr   )r4   r5   rs      r-   RunzTest.Run   s   }}


4
 a> H= 



4
 a: H9 
	,	,

/
/
5a6 H5 
		
T"
a0 H/ 


a* H) 


a$ H# 
		
T"
a H 
		
t$
a H 
		
t$
a H 

nnT
a H 
	 	 

$
$T
*a H 
	%	%
$$T*
aHr/   N)__name__
__module____qualname____doc__staticmethodr.   r6   r:   r>   rA   rF   rM   rY   rc   rm   ro   rr   r   r    r/   r-   r   r   '   s`    
 C3 C3J>33@	6(-$.!r/   r   )r   
__future__r   r   r   r   rP   rS   rI   rU   googlecloudsdk.callioper   r   r	   r
   "googlecloudsdk.command_lib.computer   googlecloudsdk.corer   r   r   googlecloudsdk.core.consoler   r   UniverseCompatibleCommandr   r   r/   r-   <module>r      sh    & &  % ' 	  
  / ( 4 1 9 * / + 2 8 x4<< x xr/   