
    oi              	       j   d Z ddlZddlZddlZdZdedefdZddefded	ee   dz  d
ede	fdZ
edk(  rddlZddlZ eej                        dkD  rej                  d   ndZ eej                        dkD  r eej                  d         neZ e
ee      Z e ej(                  edd             yy)ui   
test_runner.py - pytest 자동 재실행 verifier
subprocess로 pytest를 실행하고 결과를 파싱
    N<   outputreturnc                     g d}t        | j                               D ]U  }|j                         }|D ]>  }t        j                  ||t        j
                        }|s+|j                  d      c c S  W y)u7   pytest stdout에서 통과/실패 요약 줄을 추출.)z(\d+ passed.*?in \d+\.?\d*s)z(\d+ failed.*?in \d+\.?\d*s)z(no tests ran.*?in \d+\.?\d*s)z(\d+ error.*?in \d+\.?\d*s)    )reversed
splitlinesstripresearch
IGNORECASEgroup)r   patternslinepatternmatchs        >/home/jay/workspace/teams/dev7/qc/verifiers.bak/test_runner.py_parse_pytest_outputr      sn    H **,- &zz| 	&GIIgtR]];E{{1~%	&&     r   test_dir
test_filestimeoutc                    |E|D cg c]$  }t         j                  j                  |      s#|& }}|sddgdS dddg|dd	d
}na| sddgdS t         j                  j                  |       s	dd|  gdS t         j                  j	                  |       s	dd|  gdS ddd| dd	d
g}ddj                  |       g}	 t        j                  |dd|      }|j                  j                         }|j                  j                         }	t        |      }
|
r|j                  d|
        |j                  }|dk(  r|j                  d| d       d|dS |dk(  r|j                  d| d|  d       d|dS |j                  d| d       |rc|j                         D cg c]  }d|v sd|v sd|j                         v r|  }}|dd D ]$  }|j                  d |j                                 & |	r|j                  d!|	dd"         d|dS c c}w c c}w # t        j                   $ r |j                  d#| d$       d|dcY S t"        $ r	 dd%gdcY S t$        $ r}dd&| gdcY d}~S d}~ww xY w)'u  
    지정된 디렉토리 또는 파일 목록에서 pytest를 실행합니다.

    Args:
        test_dir: pytest를 실행할 디렉토리 경로
        test_files: pytest에 개별 파일로 전달할 경로 목록 (None이면 미사용)
        timeout: 최대 실행 시간 (초), 초과 시 SKIP

    Returns:
        {"status": "PASS"|"FAIL"|"SKIP", "details": [...]}
    NSKIPu9   추론된 테스트 파일 중 존재하는 파일 없음)statusdetailspython3z-mpytestz-xz-qz
--tb=shortzNo test directory specifiedFAILzTest directory not found: zNot a directory: z	Running:  T)capture_outputtextr   zpytest result: r   zExit code: z (all tests passed)PASS   z (no tests collected in )z (tests failed or error)FAILEDERRORerror
   z  zstderr: i,  zTimeout after u   s — skipping test runu'   python3 not found — cannot run pytestz!Unexpected error running pytest: )ospathisfileexistsisdirjoin
subprocessrunstdoutr   stderrr   append
returncoder
   lowerTimeoutExpiredFileNotFoundError	Exception)r   r   r   fexisting_filescmdr   resultr3   r4   summary	exit_coder   
fail_lineses                  r   verifyrC      s   " %/E277>>!3D!EE WX 
 
 	

 
 
 
  .K-LMMww~~h'$4Nxj2Y1Z[[ww}}X&$4EhZ2P1QRR 
 388C=/*+G:
	
 $$&$$& 'v.NN_WI67
 %%	>NN[3FGH$99!^NN[3KH:UVWX$99 NN[3KLM !' 1 1 34'7d?g>U 
 
 'sO 8DNNR

~#678&#,89$99] FJ $$ 6y0GHI W55 
AB
 	

  
;A3?@
 	

sT   $HH?BH !H :)H ##HAH H -I6I6I6#I1+I61I6__main__r      )r   r   F)ensure_asciiindent)__doc__r+   r   r1   DEFAULT_TIMEOUTstrr   listintdictrC   __name__jsonsyslenargvr   tr>   printdumps r   r   <module>rW      s   
 
 	   & #'"p
p
S	D p
 p
 
	p
f z!#((ma/sxx{RHMA-CHHQK?AXq1F	*$**V%
:; r   