
    li                        d Z ddlZddlZddlZej                  j                  ej                  j                  ej                  j                  e      dd            Z	ej                  j                  e	ddd      Z
ej                  j                  e	ddd      Zg dZd	ed
ee   fdZded
ej                   fdZ G d d      Z G d d      Z G d d      Zy)u   
회귀 테스트: .github/workflows/guard.yml 및 ci.yml의 task_id 추출 regex 검증.

목적: task-N+M 형식(예: task-2472+1)이 task-N 으로 잘리지 않고 전체 매칭되는지 확인.
    Nz..z.github	workflowsz	guard.ymlzci.yml))ztask/task-2472-dev1z	task-2472)ztask/task-2472+1-dev1ztask-2472+1)ztask/task-2467+3-dev2ztask-2467+3)ztask/task-2483-dev3z	task-2483yml_pathreturnc                     g }t        | d      5 }|D ]B  }t        j                  d|      }|s|j                  d      }d|v s2|j	                  |       D 	 ddd       |S # 1 sw Y   |S xY w)u   
    yml 파일에서 `grep -oE '...'` 형태의 ERE 패턴 문자열을 모두 추출한다.
    단일 따옴표 내의 패턴만 추출 (쉘 스크립트 관행).
    zutf-8)encodingzgrep\s+-oE\s+'([^']+)'   ztask-N)openresearchgroupappend)r   patternsflinemeres         \/home/jay/workspace/.worktrees/task-2520-dev4/tests/regression/test_workflow_taskid_regex.py_extract_ere_patternsr      sv    
 H	h	) )Q 	)D		3T:Aggajc>OOC(	)) O) Os   A#A#A##A-r   c                 ,    t        j                  |       S )u   
    ERE 패턴을 파이썬 re 모듈용 패턴으로 변환한다.

    ERE에서 백슬래시+플러스는 리터럴 '+' 이고,
    파이썬 re에서도 동일하게 동작하므로 변환 없이 사용 가능.
    )r
   compile)r   s    r   _ere_to_python_patternr   *   s     ::c?    c                   d    e Zd ZdZd Zej                  j                  de      de	de	fd       Z
y)TestGuardYmlRegexu3   guard.yml의 task_id 추출 regex 회귀 테스트.c                 j    t        t              }t        |      dk\  sJ dt        |       d|        y)uU   guard.yml에서 task-id 관련 grep -oE 패턴이 2건 이상 추출되어야 한다.   u(   guard.yml에서 task-id regex 패턴이 u9   건만 추출됨 (최소 2건 필요). 추출된 패턴: N)r   
_GUARD_YMLlenselfr   s     r   test_patterns_foundz%TestGuardYmlRegex.test_patterns_found7   s@    (48}! 	
6s8}o F!!)
,	
!r   input_str,expected	input_strexpectedc                     t        t              }|sJ dt                |D ]X  }t        |      }|j                  |      }|J d| d| d       |j	                  d      }||k(  rFJ d| d| d| d	| d
	        y)ue   각 입력에 대해 guard.yml의 모든 task-id regex가 기대값을 정확히 매칭해야 한다.u,   guard.yml에서 추출된 패턴이 없음: Nu   [guard.yml] 패턴 '   '이 입력 '   '에 매칭 없음r      ': 입력='   ', 기대='   ', 실제='   ' — 잘림 감지!)r   r   r   r   r   r    r#   r$   r   r   compiledmatchactuals           r   test_regex_matchingz%TestGuardYmlRegex.test_regex_matching?   s     )4TG
|TTx 
	C-c2HOOI.E$ &se=CUV$ [[^FX% &se;yk B#*Kx7KM%
	r   N__name__
__module____qualname____doc__r!   pytestmarkparametrize
TEST_CASESstrr0    r   r   r   r   4   s>    =
 [[1:>S C  ?r   r   c                   d    e Zd ZdZd Zej                  j                  de      de	de	fd       Z
y)TestCiYmlRegexu0   ci.yml의 task_id 추출 regex 회귀 테스트.c                 j    t        t              }t        |      dk\  sJ dt        |       d|        y)uR   ci.yml에서 task-id 관련 grep -oE 패턴이 4건 이상 추출되어야 한다.   u%   ci.yml에서 task-id regex 패턴이 u9   건만 추출됨 (최소 4건 필요). 추출된 패턴: N)r   _CI_YMLr   r   s     r   r!   z"TestCiYmlRegex.test_patterns_foundU   s@    (18}! 	
3CM? C!!)
,	
!r   r"   r#   r$   c                     t        t              }|sJ dt                |D ]X  }t        |      }|j                  |      }|J d| d| d       |j	                  d      }||k(  rFJ d| d| d| d	| d
	        y)ub   각 입력에 대해 ci.yml의 모든 task-id regex가 기대값을 정확히 매칭해야 한다.u)   ci.yml에서 추출된 패턴이 없음: Nu   [ci.yml] 패턴 'r&   r'   r   r(   r)   r*   r+   )r   r@   r   r   r   r,   s           r   r0   z"TestCiYmlRegex.test_regex_matching]   s     )1NDWINNx 
	C-c2HOOI.E$ #C5i[@RS$ [[^FX% #C5I; ?#*Kx7KM%
	r   Nr1   r;   r   r   r=   r=   R   s>    :
 [[1:>S C  ?r   r=   c                       e Zd ZdZd Zy)TestTotalPatternCountuI   두 파일 합산 패턴 수가 6건 이상인지 검증 (누락 방지).c           	          t        t              }t        t              }t        |      t        |      z   }|dk\  s#J d| dt        |       dt        |       d       y )N   u   전체 패턴 수 u   건 (guard=z, ci=u3   ). 최소 6건 필요. 누락 가능성 점검 요.)r   r   r@   r   )r    guard_patternsci_patternstotals       r   test_total_patterns_at_least_6z4TestTotalPatternCount.test_total_patterns_at_least_6s   si    .z:+G4N#c+&66z 	
 {3~3F2GuSQ\M]L^ _? @	
zr   N)r2   r3   r4   r5   rI   r;   r   r   rC   rC   p   s
    S
r   rC   )r5   r
   osr6   pathabspathjoindirname__file__
_REPO_ROOTr   r@   r9   r:   listr   Patternr   r   r=   rC   r;   r   r   <module>rS      s    
 	  WW__RWW\\"''//(*CT4PQ
WW\\*ikJ

'',,z9k8
D
C DI " 

  < <

 

r   