
    Ni                       d Z ddlmZ ddlZddlmZ ddlZ ed      Zedz  dz  Zedz  dz  Z	ej                  j                  d ee             ej                  j                  d ee	             g d	Zdd
Zej                  j!                  d e             d        Zd ZddZej                  j)                   e        d      d        Zd Zy)u  IDS Phase 1 — 한글 100% OCR 회귀 검증 (구조 + 폰트 fallback 차단).

목적:
1. 출력 PNG가 존재할 경우 OCR로 한글 추출, 입력과 100% 일치 확인
2. OCR 라이브러리 미설치 환경에서는 graceful skip
3. 폰트 fallback 차단 — 시스템 sans-serif/Arial이 HTML/CSS에 절대 들어가지 않음
4. 실패 시 폰트 fallback 차단 + 명확한 에러 (assert 메시지)

OCR 도구는 환경 의존이므로 미설치 시 skip — 단, 폰트 차단 검증은 항상 수행.
    )annotationsN)Pathz/home/jay/workspaceskillszsatori-cardnewszhybrid-image)Arial	Helveticaz	Open SansRobotozMalgun Gothicc                 D    t        t        dz  j                  d            S )N	templatesz*.html)listSATORI_SKILLglob     V/home/jay/workspace/.worktrees/task-2467-dev6/tests/dev6/test_ids_phase1_korean_ocr.py_scan_html_filesr   *   s    +11(;<<r   	html_pathc           	         | j                  d      }t        D ]V  }|j                         D ]A  }d|j                         vr||vrJ | j                   d| d|j                         d        X y)uT   템플릿 HTML에 시스템 fallback 폰트가 명시되어 있으면 한글 깨짐.zutf-8)encodingzfont-familyu%   : 한글 fallback 차단 위반 — 'u   ' 발견. line=u,   . Pretendard/Noto Sans KR 외 사용 금지.N)	read_textFORBIDDEN_FALLBACK_TOKENS
splitlineslowernamestrip)r   texttokenlines       r   #test_template_no_forbidden_fallbackr   .   s     0D* OO% 	DDJJL0$ >>""Gw O

''SU$	r   c                 r    ddl m}  | j                  }d|v sJ d|v sJ t        D ]  }||vrJ d|         y)uf   hybrid-image 패턴 모듈은 KOREAN_FONT_STACK ('Pretendard', 'Noto Sans KR')를 사용해야 한다.r   )_satori
PretendardzNoto Sans KRu.   KOREAN_FONT_STACK에 forbidden 폰트 발견: N)patternsr    KOREAN_FONT_STACKr   )r    stackr   s      r   *test_pattern_modules_use_korean_font_stackr%   =   sZ     %%E5   U"""* \E![%STYSZ#[[!\r   c                 |    dd l } | j                  j                  d      y| j                  j                  d      yy)Nr   pytesseractT	paddleocrF)importlib.utilutil	find_spec)	importlibs    r   	_have_ocrr-   N   s8    ~~.:~~,8r   u5   OCR 도구 미설치 — pytesseract/paddleocr 필요)reasonc                   ddl m} d}d}| dz  } ||||d      }|j                         sJ d       |j                         j                  d	kD  sJ d
       	 ddl}ddlm} |j                  |j                  |      d      }dv sd|v sJ d|d|d|       yy# t        $ r t        j                  d       Y :w xY w)u_   H4 (gradient, 외부 호출 0) 패턴으로 한글 PNG 생성 → OCR → 입력 일치 확인.r   )render_h4_gradient_cardu   보험은 안심u&   가족을 지키는 첫걸음입니다zocr_test.png)8  r1   )sizeu   PNG 생성 실패i  u*   PNG 너무 작음 — 렌더 실패 의심N)Imagekor)langu   pytesseract 미설치u   보험u   안심u"   OCR 한글 추출 실패: 입력=(z, u
   ), 출력=)r"   r0   existsstatst_sizer'   PILr3   image_to_stringopenImportErrorpytestskip)	tmp_pathr0   titlebodyoutresultr'   r3   r   s	            r   test_korean_ocr_roundtriprD   X   s     1E3D
^
#C$UD#LIF==?///?;;=  4'U)UU'-**5::f+=E*J
 tx4/ 
,UIRxz$R//	  -+,-s   ,B B?>B?c                     ddl m}  ddlm} d}d} |||ddd | d	       d
ddddd
      }||v s
J d|       ||v s
J d|       d|v sJ d       y)uR   H4 패턴이 만든 HTML 안에 입력 한글이 그대로 들어있어야 한다.r   )default_gradient)build_text_overlay_htmlu   한글 테스트 헤드라인u+   본문 한글이 깨지지 않아야 한다r1   iF  z<div style="background:navyz ;width:100%;height:100%;"></div>z#ffffffz#e8e8eczrgba(0,0,0,0.5)H   &   )
r@   rA   widthheightbackground_layertitle_color
body_color
overlay_bg
title_size	body_sizeu4   제목 한글이 HTML에 보존되지 않음: title=u3   본문 한글이 HTML에 보존되지 않음: body=r!   u   Pretendard 폰트 명시 누락N)patterns._backgroundsrF   patterns._satorirG   )rF   rG   r@   rA   htmls        r   !test_h4_html_preserves_korean_rawrV   v   s    68+E8D"23CF3K2LLlm$D D=ZPQVPYZZ=4<WNthWW<4B!BBr   )returnz
list[Path])rW   bool)__doc__
__future__r   syspathlibr   r=   WORKSPACE_ROOTr   HYBRID_SKILLpathinsertstrr   r   markparametrizer   r%   r-   skipifrD   rV   r   r   r   <module>re      s   	 # 
  +,(+<<(>9 3|$ % 3|$ % = &6&89 :	\" 	O,cd e:Cr   