
    Mi                     Z    d Z ddlZddlZg dZg dZddededefdZd	edee   dz  fd
Z	y)u   
l1_smoketest_check.py - 보고서 파일의 L1 스모크테스트 섹션 검증 verifier
보고서의 ## L1 스모크테스트 / ## 스모크테스트 결과 섹션 유무 및 결과 키워드 확인.
섹션 없으면 FAIL, 파일 없으면 SKIP.
    N)u   UI 직접 확인 불가u   서버 기동 불가u!   환경 제약으로 확인 불가u   해당없음.*스모크zN/A.*L1)UIu   컴포넌트u   화면u	   페이지u	   프론트frontend	componenttask_idworkspace_rootreturnc                 h   t         j                  j                  |dd|  d      }t         j                  j                  |      sddgdS t	        |dd	      5 }|j                         }d
d
d
       t        D ]#  }t        j                  |      sdd| gdc S  t              }|ddgdS t         j                  j                  |dd|  d      }d}	 t	        |dd	      5 }|j                         }	d
d
d
       t        D ]
  }
|
	v sd} n t        d |D              }|dk\  r|sddgdS g d}dj                  |      t        fd|D              }t        t        j                  dt        j                              }t        t        j                  dt        j                              }t        t        j                  dt        j                              }|xs |xs |}|sddgdS |s|rddgdS ddgdS # 1 sw Y   xY w# 1 sw Y   xY w# t        $ r d}Y w xY w)u   
    보고서 파일의 L1 스모크테스트 섹션을 파싱하여 결과를 검증.

    Returns:
        {"status": "PASS"|"FAIL"|"SKIP", "details": [...]}
    memoryreportsz.mdSKIPu   보고서 파일 없음)statusdetailsrzutf-8)encodingNFAILu   BLOCK 패턴 매칭: u#   L1 스모크테스트 섹션 없음tasksFTc              3   *   K   | ]  }d |v sd  yw)u   해당없음   N ).0lines     A/home/jay/workspace/teams/dev1/qc/verifiers/l1_smoketest_check.py	<genexpr>zverify.<locals>.<genexpr>>   s     R$>T;QARs   	   PASSu4   CLI/스크립트 작업 — 해당없음 3줄 이상)u   성공u   실패u   확인r   OK
c              3   &   K   | ]  }|v  
 y w)Nr   )r   keywordsection_texts     r   r   zverify.<locals>.<genexpr>H   s     M'g-Ms   u%   (screenshot|스크린샷|\.png|\.jpg)u2   (curl.*200|HTTP/.*200|응답 코드.*200|200\s*OK)z+(pytest.*pass|tests?\s+passed|\d+\s+passed)uF   L1 증거 부족: 스크린샷/curl/테스트 결과 중 하나 필수u   L1 결과 확인됨u.   L1 섹션 있으나 결과 키워드 미발견)ospathjoinisfileopenreadBLOCK_PATTERNSresearch_find_smoketest_sectionFRONTEND_KEYWORDS	ExceptionsumanyboolI)r   r   report_pathfcontentpatternsection_lines	task_pathis_frontendtask_contentr   naexclusion_countresult_keywordshas_keywordhas_screenshothas_curlhas_test_outputhas_evidencer    s                     @r   verifyr@      sM    '',,~xwisOTK77>>+& .G-HII	k3	1 Q&&( " V99Wg&$4I'2S1TUUV
 ,G4M .S-TUU ^Xw7)3PIK)S73 	$q668L	$( 	G,&"	 R-RRA$2h1ijj CO99]+LM_MMK "))$Ll\^\`\`abNBIISUacecgcghiH299%SUacecgcghiO!@X@L .v-wxxl .C-DEE*Z)[\\k $	$ 	$  s<   HH" (H9H" H" HHH" "H10H1r3   c                 n   t        j                  d      }ddg}| j                         }d}d}g }|D ]}  }|j                  |      }|rTt	        |j                  d            }	|j                  d      j                         }
|r|	|k  r n(|D ]  }||
v sd}|	} n j|sm|j                  |        |sy	|S )
u   
    ##/### 레벨 헤더에서 'L1 스모크테스트' 또는 '스모크테스트 결과' 섹션을 찾아
    다음 동등 이상 레벨 헤더 전까지의 줄 목록을 반환.
    섹션이 없으면 None 반환.
    z^(#{2,3})\s+(.+)$u   L1 스모크테스트u   스모크테스트 결과Fr   r      TN)r(   compile
splitlinesmatchlengroupstripappend)r3   header_patternsmoketest_keywordslines
in_sectionsection_header_levelresultr   rE   levelheader_textr   s               r   r*   r*   Z   s     ZZ 45N13NO EJF  $$T*A'E++a...0K00  2 G+-%)
/4,	
 MM$) , M    )z/home/jay/workspace)
__doc__r!   r(   r'   r+   strdictr@   listr*   r   rR   r   <module>rW      sa    
 	 h A]C A] A] A]H'S 'T#Y-= 'rR   