
    SiY                         d Z ddlZej                  j                  dd       ddlmZmZmZmZm	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d Zd Zd Zd Zy)uN   
통합 테스트: prompts/gate_instructions.py
task-1837_5.1 - 엔키 작성
    N/home/jay/workspace)GATE_INSTRUCTIONSformat_for_promptget_codex_gate_commandget_gate_instructionsshould_run_codex_checkc                      t        d      D ]H  } t        |       }t        |t              sJ d|  d       d|v sJ d|v sJ d|v sJ |t        |    k(  rHJ  y)uE   레벨 0~4 각각에 맞는 게이트 dict가 반환되어야 한다.   level=u    반환값이 dict가 아님g1g2g3N)ranger   
isinstancedictr   )levelresults     Y/home/jay/workspace/.worktrees/task-2117-dev1/tests/integration/test_gate_instructions.py>test_get_gate_instructions_returns_correct_dict_for_each_levelr      sv    q 2&u-&$'U6%8T)UU'v~~v~~v~~*511112    c                  6    t        d      } | t        d   k(  sJ y)uV   정의되지 않은 레벨(예: 99)이면 GATE_INSTRUCTIONS[0]을 반환해야 한다.c   r   N)r   r   )r   s    r   5test_get_gate_instructions_fallback_for_unknown_levelr   !   s     "2&F&q))))r   c                  X    dD ]%  } t        |       }|d   dk(  rJ d|  d|d           y)u3   레벨 0, 1은 g1이 빈 문자열이어야 한다.)r      r    r   u    g1이 비어있지 않음: N)r   r   gs     r   5test_get_gate_instructions_level0_and_1_have_empty_g1r   '   sD     V!%(w"}Uug-I!D'UU}Vr   c                      dD ]=  } t        |       }|d   sJ d|  d       d|d   j                         v r4J d|  d        y)u]   레벨 3, 4는 g1이 비어있지 않아야 하며 sanitize 키워드를 포함해야 한다.      r   r   u    g1이 비어있음sanitizeu    g1에 sanitize 없음N)r   lowerr   s     r   8test_get_gate_instructions_level3_and_4_have_nonempty_g1r&   .   s_     U!%(w;&':;;wQtW]]_,Tug=S.TT,Ur   c                  &    t        d      } d| vsJ y)uV   레벨 0은 g1이 비어있으므로 [G1 설계 게이트] 섹션이 없어야 한다.r      [G1 설계 게이트]Nr   outputs    r   +test_format_for_prompt_level0_no_g1_sectionr,   8   s    q!F"&000r   c                  >    t        d      } d| vsJ d| v sJ d| v sJ y)uV   레벨 1도 g1이 비어있으므로 [G1 설계 게이트] 섹션이 없어야 한다.r   r(      [G2 구현 게이트]   [G3 머지 게이트]Nr)   r*   s    r   +test_format_for_prompt_level1_no_g1_sectionr0   >   s6    q!F"&000"f,,,"f,,,r   c                  f    t        d      } d| j                         v sJ d| v sJ d| v sJ d| v sJ y)uP   레벨 3은 sanitize 키워드가 포맷된 문자열에 포함되어야 한다.r"   r$   r(   r.   r/   Nr   r%   r*   s    r   /test_format_for_prompt_level3_contains_sanitizer3   F   sJ    q!F'''"f,,,"f,,,"f,,,r   c                  B    t        d      } d| j                         v sJ y)u9   레벨 4도 sanitize 키워드가 포함되어야 한다.r#   r$   Nr2   r*   s    r   /test_format_for_prompt_level4_contains_sanitizer5   O   s     q!F'''r   c                  >    t        d      } d| v sJ d| v sJ d| v sJ y)u\   레벨 2는 g1, g2, g3 모두 비어있지 않으므로 3개 섹션 모두 있어야 한다.   r(   r.   r/   Nr)   r*   s    r   +test_format_for_prompt_level2_has_all_gatesr8   U   s6    q!F"f,,,"f,,,"f,,,r   c                  B    dD ]  } t        |       du rJ d|  d        y)u/   레벨 0, 1, 2는 False를 반환해야 한다.)r   r   r7   Fr   u   이 True 반환Nr   r   s    r   1test_should_run_codex_check_below_3_returns_falser<   _   s4     W%e,5Vwo7VV5Wr   c                  B    dD ]  } t        |       du rJ d|  d        y)u+   레벨 3, 4는 True를 반환해야 한다.r!   Tr   u   이 False 반환Nr:   r;   s    r   4test_should_run_codex_check_3_and_above_returns_truer>   e   s5     W%e,4VugEU6VV4Wr   c                  @    t        d      du sJ t        d      du sJ y)u2   경계값 레벨 3이 정확히 True인지 확인.r"   Tr7   FNr:    r   r   $test_should_run_codex_check_boundaryrA   k   s(    !!$,,,!!$---r   c                      t        dg d      } t        | t              sJ | d   dk(  sJ d| d   v sJ d| v sJ d| v sJ d	| v sJ d| v sJ y
)u_   기본 명령어 리스트 구조: python3, script_path, --task-file, path, --workspace 포함./tmp/task.mdr   	task_fileaffected_filesworkspace_rootr   python3zcodex_gate_check.pyr   z--task-file--workspace-rootN)r   r   listcmds    r   +test_get_codex_gate_command_basic_structurerM   s   s    
  ,C
 c4   q6Y CF***CS   $$$ C'''r   c                      ddg} t        d| d      }d|v sJ |j                  d      }||dz      dk(  sJ ||dz      dk(  sJ y	)
uX   affected_files가 있으면 --affected-files 뒤에 파일들이 포함되어야 한다.zdispatch.pyzutils/logger.pyrC   r   rD   --affected-filesr   r7   Nr   index)filesrL   idxs      r   /test_get_codex_gate_command_with_affected_filesrT      sl    -.E
  ,C
 $$$
))&
'CsQw<=(((sQw<,,,,r   c                  ,    t        dg d      } d| vsJ y)uH   affected_files가 빈 리스트면 --affected-files가 없어야 한다.rC   r   rD   rO   N)r   rK   s    r   2test_get_codex_gate_command_without_affected_filesrV      s%    
  ,C
 S(((r   c                  t    d} t        ddg|       }| |d   v sJ |j                  d      }||dz      | k(  sJ y)uR   workspace_root 인자가 script_path와 --workspace 값에 반영되어야 한다.z/custom/workspacerC   za.pyrD   r   rI   NrP   )custom_rootrL   ws_idxs      r   /test_get_codex_gate_command_uses_workspace_rootrZ      sU    %K
  x"C #a&   YY)*Fvz?k)))r   )__doc__syspathinsertprompts.gate_instructionsr   r   r   r   r   r   r   r   r&   r,   r0   r3   r5   r8   r<   r>   rA   rM   rT   rV   rZ   r@   r   r   <module>r`      s   
  ( ) 	2*VU1--(-WW.( -)*r   