
    LZh                         S SK r S SKrS SKJr  S SKJrJrJrJr  S r	S r
S rS rS rS	 rS
 rS rS rS rS rS rg)    N)__version__)
controllerviews	operatorsutilsc                 .    [        5       n[        U5        g N)build_parser	run_mutpy)argvparsers     -/home/xtuchyna/git/mutpy/mutpy/commandline.pymainr      s    ^Ff    c            	      b   Sn [         R                  " SSS9nUR                  SSSSR                  [        5      S	9  UR                  S
S[
        SSS9  UR                  SS[
        SSS9  UR                  S[
        SS/SSSS9  UR                  SS[
        SSS9  UR                  S[
        SSS9  UR                  S S![        U S"R                  U 5      S#9  UR                  S$S%S&S'S(9  UR                  S)S*S&S+S(9  UR                  S,S&S-S(9  UR                  S.S/S&S0S(9  UR                  S1S2S&S3S(9  UR                  S4S5S&S6S(9  UR                  S7S8[
        SS9S:S;9  UR                  S<[
        S/ S=S:S>9  UR                  S?S@S&SAS(9  UR                  SBSC[
        SDSESF9  UR                  SG[        SHSISJSK9  UR                  SLS&SMS(9  UR                  SN[        SOSPSQSK9  UR                  SR[
        SSSTSUSV9  UR                  SWS&SXS(9  UR                  SY[        SZS[SF9  UR                  S\S][
        S^S_9  U$ )`N   z2Mutation testing tool for Python 3.x source code. @)descriptionfromfile_prefix_charsz	--versionz-vversionz%(prog)s {})actionr   z--targetz-t+z"target module or package to mutate)typenargshelpz--unit-testz-uz:test class, test method, module or package with unit testsz--runnerunittestpytestRUNNERztest runner)r   choicesdefaultmetavarr   z--reportz-rzgenerate YAML reportREPORT_FILE)r   r   r!   z--report-htmlzgenerate HTML reportDIR_NAMEz--timeout-factorz-fzmax timeout factor (default {}))r   r    r   z--show-mutantsz-m
store_truezshow mutants source code)r   r   z--quietz-qz
quiet modez--debugz
dubug modez--colored-outputz-cztry print colored outputz--disable-stdoutz-dzftry disable stdout during mutation (this option can damage your tests if you interact with sys.stdout)z--experimental-operatorsz-ezuse experimental operatorsz
--operatorz-ozuse only selected operatorsOPERATOR)r   r   r   r!   z--disable-operatorzdisable selected operators)r   r   r    r   r!   z--list-operatorsz-lzlist available operatorsz--pathz-pDIRzextend Python path)r   r!   r   z--percentage
PERCENTAGEd   z7percentage of the generated mutants (mutation sampling))r   r!   r    r   z
--coveragezmutate only covered codez--orderORDER   zmutation orderz--hom-strategyHOM_STRATEGYzHOM strategyFIRST_TO_LAST)r   r!   r   r    z--list-hom-strategieszlist available HOM strategiesz--mutation-numberMUTATION_NUMBERz%run only one mutation (debug purpose)z--eda-folderz<save results to this folder under csv files for EDA analysis
EDA_FOLDER)r   r   r!   )argparseArgumentParseradd_argumentformatr   strfloatint)DEF_TIMEOUT_FACTORr   s     r   r
   r
      s   $$1e;>@F
T)]EYEYZaEbc

Ds#Dhi
t#SY  [

z86LV` (}  >

Ds9OYfg
c8NXbc
*DuFX>EEFXY  [
($|Jde
	4<P
	,\J
*DLfg
*Dc  d 2DTpq
dC:J  P
,3c29:  O
*DLfg
$S%FZ[
S,PSV  X
\7  9
	WaN^_
(sNQ_ /  1
/Kjk
+#?PD  F
-k ,  8Mr   c                    U R                  5       nUR                  (       a  [        5         g UR                  (       a  [        5         g UR                  (       aZ  UR                  (       aI  [        U5      nUR                  5         UR                  (       a  UR                  UR                  5        g g U R                  5         g r	   )

parse_argslist_operatorslist_hom_strategiestarget	unit_testbuild_controllerrun
eda_foldersave_edaprint_usage)r   cfgmutation_controllers      r   r   r   8   s~    



C
		 	 	.s3!>>((8  	r   c                    [        U R                  5      n[        U 5      n[        U 5      n[        R
                  " U R                  U R                  5      n[        R
                  " U R                  U R                  5      n[        R                  " UUUUUU R                  U R                  U R                  U R                  S9	$ )N)	
runner_clstarget_loadertest_loaderr   mutant_generatortimeout_factordisable_stdoutmutate_coveredmutation_number)get_runner_clsrunnerbuild_viewsbuild_mutatorr   ModulesLoaderr;   pathr<   r   MutationControllerrI   rJ   coveragerL   )rB   rE   built_viewsrH   rF   rG   s         r   r=   r=   I   s    

+Jc"K$S)''

CHH=M%%cmmSXX>K((#)))))||++
 
r   c                 n    U S:X  a  SSK Jn  U$ U S:X  a  SSK Jn  U$ [        SR	                  U 5      5      e)Nr   r   )UnittestTestRunnerr   )PytestTestRunnerzUnknown runner: {0})mutpy.test_runnersrW   rX   
ValueErrorr2   )rN   rW   rX   s      r   rM   rM   \   s;    9!!	8	7
*11&9
::r   c                 $   [        5       nU R                  (       a  U[        R                  -  n[        5       nU R                  (       a)  UU R                   Vs1 sH  n[        X25      iM     sn-  nOU[        R                  -  nUU R                   Vs1 sH  n[        X25      iM     sn-  nU R                  S:X  a   [        R                  " XR                  5      $ [        U 5      n[        R                  " XR                  US9$ s  snf s  snf )Nr*   )hom_strategy)setexperimental_operatorsr   build_name_to_operator_mapoperatorget_operatorstandard_operatorsdisable_operatororderr   FirstOrderMutator
percentagebuild_hom_strategyHighOrderMutator)rB   operators_setname_to_operatornamer\   s        r   rP   rP   f   s    EM
!!99913
||&)ll4&2d 't>&24 	4 	555"%"6"68"6$ #4:"68 8M yyA~++M>>JJ)#.**=..Wcdd4
8s   DDc                    U R                   S:  a!  [        S5        [        R                  " S5         [        R
                   Vs0 sH  oR                  U_M     nnX R                     " U R                   S9$ s  snf ! [         a=    [        SR                  U R                  5      5        [        R                  " S5         g f = f)Nr*   zOrder should be > 0.)rd   zJUnsupported HOM strategy {}! Use --list-hom-strategies to show strategies.)
rd   printsysexitr   hom_strategiesrk   r\   KeyErrorr2   )rB   r\   name_to_hom_strategys      r   rg   rg   ~   s    
yy1}$%T^TmTmnTmL 1 1< ?Tmn#$4$45CIIFF  o Zaabebrbrsts$   A= A8A= 8A= =ACCc                      X   $ ! [          a3    [        SR                  U 5      5        [        R                  " S5         g f = f)Nz6Unsupported operator {}! Use -l to show all operators.rm   )rr   rn   r2   ro   rp   )rk   rj   s     r   ra   ra      s>    %% FMMdSTs    :AAc                      0 n [         R                  [         R                  -   H'  nXUR                  5       '   XUR	                  5       '   M)     U $ r	   )r   rb   r^   rk   	long_name)resultr`   s     r   r_   r_      sI    F0093S3SS"*x}}'/x!!#$ T Mr   c                 j   / nU R                   (       a0  UR                  [        R                  " U R                  5      5        O:UR                  [        R
                  " U R                  U R                  5      5        U R                  (       a/  UR                  [        R                  " U R                  5      5        U R                  (       a/  UR                  [        R                  " U R                  5      5        U R                  (       a$  UR                  [        R                  " 5       5        U$ r	   )quietappendr   QuietTextViewcolored_outputTextViewshow_mutantsreportYAMLReportViewreport_htmlHTMLReportViewdebug	DebugView)rB   
views_lists     r   rO   rO      s    J
yy%--c.@.@AB%..););S=M=MNO
zz%..szz:;
%..s?@
yy%//+,r   c                     [        S5        [        R                  " [        R                  5       H:  n [        SR                  U R                  5       U R                  5       5      5        M<     [        S5        [        R                  " [        R                  5       H:  n [        SR                  U R                  5       U R                  5       5      5        M<     g )NzStandard mutation operators:z - {:3} - {}z Experimental mutation operators:)	rn   r   sort_operatorsr   rb   r2   rk   rv   r^   )r`   s    r   r9   r9      s    	
()(()E)EFn##HMMOX5G5G5IJK G	
,-(()I)IJn##HMMOX5G5G5IJK Kr   c                      [        S5        [        R                   H'  n [        SR                  U R                  5      5        M)     g )NzHOM strategies:z - {})rn   r   rq   r2   rk   )strategys    r   r:   r:      s0    	
--gnnX]]+, .r   )r/   ro   mutpyr   r   r   r   r   r   r   r
   r   r=   rM   rP   rg   ra   r_   rO   r9   r:    r   r   <module>r      sS     
 ( 5 5
(V"&;e0	(L-r   