
    i<                        d Z ddlmZ ddlZddlZddlZddlmZ ddl	Z	 ee
      j                         j                  d   Z e	j                  d      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)u[  tests/lifecycle_guards/test_gemini_image_severity.py — task-2471 회귀 테스트.

토르가 commit 0750481e 에서 ``scripts/gemini_severity_parser.py`` 에 추가한
이미지 alt-text severity 패턴 (``![High](url)`` / ``![Critical](...)`` /
``![Blocking](...)``) 을 영구 차단한다.

- ``_HIGH_IMAGE_LABEL`` 정규식 노출
- ``count_severities`` 가 image hits 를 high 카운트에 반영
- 대소문자 무관 (``re.IGNORECASE``)
- code block 안의 ``![High]`` 는 strip (false positive 방지)
- ``match_high_severity`` 도 image label 인식

헤임달(개발2팀 테스터) 작성.
    )annotationsN)Path   module)scopec                 r   t         dz  dz  } | j                         s
J d|         t        j                  j	                  dt        |             }||j                  J t        j                  j                  |      }|t        j                  |j                  <   |j                  j                  |       |S )u;   ``scripts/gemini_severity_parser.py`` 절대 경로 로드.scriptszgemini_severity_parser.pyz	missing: !gemini_severity_parser_test_alias)	WORKSPACEexists	importlibutilspec_from_file_locationstrloadermodule_from_specsysmodulesnameexec_module)	file_pathspecmods      H/home/jay/workspace/tests/lifecycle_guards/test_gemini_image_severity.pygspr      s     I%(CCI69+66>>11+S^D  777
..
)
)$
/C CKK		KKC J    c                v    t        | d      sJ d       t        | j                  t        j                        sJ y )N_HIGH_IMAGE_LABELu   _HIGH_IMAGE_LABEL 미노출)hasattr
isinstancer   rePatternr   s    r   %test_high_image_label_pattern_exposedr$   /   s3    3+,K.KK,c++RZZ888r   c                :    | j                  d      }|d   dk\  sJ y)u*   ``![High](url)`` 패턴 1건 -> high >= 1.z'Issue: ![High](https://x.com/badge.svg)high   Ncount_severitiesr   outs     r    test_count_severities_image_highr,   9   s%    


H
ICv;!r   c                :    | j                  d      }|d   dk\  sJ y )Nz'Found: ![Critical](https://x.com/c.png)r&   r'   r(   r*   s     r   $test_count_severities_image_criticalr.   ?   s%    


H
ICv;!r   c                :    | j                  d      }|d   dk\  sJ y )Nz(Status: ![Blocking](https://x.com/b.png)r&   r'   r(   r*   s     r   $test_count_severities_image_blockingr0   D   s%    


I
JCv;!r   c                :    | j                  d      }|d   dk\  sJ y)u!   소문자 ``![high]`` 도 인식.z.![high](url) ![CRITICAL](url) ![blocking](url)r&      Nr(   r*   s     r   ,test_count_severities_image_case_insensitiver3   I   s%    


O
PCv;!r   c                :    | j                  d      }|d   dk(  sJ y)u3   이미지 패턴 없는 일반 텍스트는 high=0.z%Normal text with no severity markers.r&   r   Nr(   r*   s     r   &test_count_severities_normal_text_zeror5   O   s%    


F
GCv;!r   c                T    d}| j                  |      }|d   dk(  sJ d|d           y)u6   code block 안의 ``![High]`` 는 strip 되어 high=0.z:Here is example code:
```
![High](url)
```
End of example.r&   r   uB   code block 내부 패턴이 false-positive 로 카운트됨: hits=	high_hitsNr(   r   bodyr+   s      r   2test_count_severities_image_in_code_block_excludedr:   U   sH    	 	 

t
$Cv;! 
LSQ\M]L^_r   c                >    d}| j                  |      }|d   dk(  sJ y)u3   inline code (``...``) 안의 ``![High]`` 도 strip.z;Use the marker `![High](url)` in your text. Nothing severe.r&   r   Nr(   r8   s      r   3test_count_severities_image_in_inline_code_excludedr<   d   s)    HD


t
$Cv;!r   c                j    | j                  d      }t        d |d   D              sJ d|d           y)u>   ``high_hits`` 리스트에 ``image:...`` 형식 항목 포함.z![High](https://x/a.png)c              3  >   K   | ]  }|j                  d         yw)image:N)
startswith.0hs     r   	<genexpr>z7test_high_hits_contains_image_prefix.<locals>.<genexpr>s   s     @!q||H%@s   r7   u   image: prefix hit 없음: N)r)   anyr*   s     r   $test_high_hits_contains_image_prefixrF   p   sC    


9
:C@s;/?@@ 
$S%5$67@r   c                ^    | j                  d      }t        d |D              s
J d|        y)u>   기존 호환 함수 ``match_high_severity`` 도 image 인식.z![Critical](url)c              3  $   K   | ]  }d |v  
 yw)imageN rA   s     r   rD   z>test_match_high_severity_includes_image_hit.<locals>.<genexpr>|   s     *w!|*s   u%   match_high_severity image 미포함: N)match_high_severityrE   )r   hitss     r   +test_match_high_severity_includes_image_hitrM   x   s6    ""#56D*T**Z.STXSY,ZZ*r   c                    d}| j                  |      }|d   D cg c]  }|j                  d      s| }}t        |      dk\  s
J d|        y c c}w )Nz@Three image badges:
![High](u1) ![Critical](u2) ![Blocking](u3)
r7   r?   r2   u   image hits 부족: )r)   r@   len)r   r9   r+   rC   
image_hitss        r   -test_multiple_image_labels_counted_separatelyrQ      sf    	8 	 

t
$C -Hh1G!HJHz?aC#6zl!CC Is
   AAc                X    | j                  d      du sJ | j                  d      du sJ y)u8   ``has_high_severity`` 헬퍼도 image 패턴에서 True.z
![High](u)Tz
clean bodyFN)has_high_severityr#   s    r   -test_has_high_severity_returns_true_for_imagerT      s4      .$666  .%777r   )__doc__
__future__r   importlib.utilr   r!   r   pathlibr   pytest__file__resolveparentsr   fixturer   r$   r,   r.   r0   r3   r5   r:   r<   rF   rM   rQ   rT   rJ   r   r   <module>r^      s    #  	 
  N""$,,Q/	 h  &9

[D8r   