
    ih                        d Z ddlZddlmc mZ ddlZddl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d            Zedz  Z ej&                         dz  dz  Z G d	 d
      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zedk(  r ej8                  edg       yy)u   ensure-bot-memory.sh 테스트

테스트 항목:
1. 스크립트 존재 및 실행 권한
2. 심링크 생성 로직
3. 이미 심링크가 있는 경우 스킵
4. 실행 시간 100ms 이내
    N)PathWORKSPACE_ROOTz/home/jay/workspacezscripts/ensure-bot-memory.shz.claudezsettings.jsonc                       e Zd ZdZd Zd Zy)TestScriptExistsu/   스크립트 존재 및 실행 권한 테스트c                    t         j                  } |       }|st        j                  dt                dz   dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}y)u&   스크립트 파일이 존재하는지u   스크립트 없음: C
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}SCRIPT_PATHpy0py2py4N)
r	   exists
@pytest_ar_format_assertmsg@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)self@py_assert1@py_assert3@py_format5s       3/home/jay/workspace/tests/test_ensure_bot_memory.pytest_script_existsz#TestScriptExists.test_script_exists   ss    !!J!#J#JJ'<[M%JJJJJJJ{JJJ{JJJ!JJJ#JJJJJJ    c           	          t         j                  }t         j                  } |t        |      }|sXt	        j
                  dt               dz   dt        j                         v st	        j                  t               rt	        j                  t               ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  t               rt	        j                  t               ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            dx}x}}y)u   실행 권한이 있는지u   실행 권한 없음: zm
>assert %(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.access
}(%(py3)s, %(py6)s
{%(py6)s = %(py4)s.X_OK
})
}osr	   )r   r   py3r   py6py8N)r   accessX_OKr	   r   r   r   r   r   r   r   r   )r   r   @py_assert5@py_assert7@py_format9s        r   test_script_executablez'TestScriptExists.test_script_executable    s    yyVbggVyg.V.VV2H0VVVVVVVrVVVrVVVyVVVVVVVVVVVVVVVbVVVbVVVgVVV.VVVVVVr   N)__name__
__module____qualname____doc__r   r(    r   r   r   r      s    9KWr   r   c                       e Zd ZdZd Zy)TestHookRegisteredu   훅 등록 테스트c                    t         j                  } |       }|st        j                  dt                dz   dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}t        t         dd      5 }t        j                  |      }ddd       j                  d	i       }|j                  d
g       }d}|D ]3  }	|	j                  d	g       D ]  }
|
j                  dd      }d|v sd} 3 5 |s{t        j                  d      dz   ddt	        j
                         v st        j                  |      rt        j                  |      ndiz  }t        t        j                  |            y# 1 sw Y   xY w)u.   settings.json에 훅이 등록되어 있는지u   settings.json 없음: r   SETTINGS_PATHr
   Nrutf-8encodinghooksUserPromptSubmitFcommand zensure-bot-memory.shTu3   ensure-bot-memory.sh 훅이 settings.json에 없음z
>assert %(py0)sr   found)r1   r   r   r   r   r   r   r   r   r   openjsonloadget)r   r   r   r   fsettingsr6   user_prompt_submitr:   entryhookr8   @py_format1s                r   test_hook_in_settingsz(TestHookRegistered.test_hook_in_settings(   sU   ##O#%O%OO)?'OOOOOOO}OOO}OOO#OOO%OOOOOO-w7 	$1yy|H	$ Wb)"YY'92> ' 	E		'2. ((9b1)W4 E		 KKKKKKKKKuKKKuKKKKKu!	$ 	$s   "GG%N)r)   r*   r+   r,   rE   r-   r   r   r/   r/   %   s    Lr   r/   c                       e Zd ZdZd Zy)TestSymlinkCreationu   심링크 생성 테스트c                 .   |dz  }|dz  }|j                  d       t        j                         dz  }|j                         s0|j                  j                  dd       |j                  dd	       d
}t        j                  j                         }||d<   t        j                         dz  }|j                         rddl	}	|	j                  |       t        j                  dt        t              gdd|d      }
|dz  dz  }|j                         rddl	}	|	j                  |       |
j                  }d}||k(  }|st!        j"                  d|fd||f      dt%        j&                         v st!        j(                  |
      rt!        j*                  |
      ndt!        j*                  |      t!        j*                  |      dz  }t!        j,                  d|
j.                         dz   d|iz  }t1        t!        j2                  |            dx}x}}y)u$   새 디렉토리에 심링크 생성z%-home-jay--cokacdir-workspace-test123memoryT)parentszG.claude/projects/-home-jay--cokacdir-workspace-autoset/memory/MEMORY.md)rJ   exist_okz# Test Memory
r3   r4   z%/home/jay/.cokacdir/workspace/test123PWDz6.claude/projects/-home-jay--cokacdir-workspace-test123r   Nbash   capture_outputtextenvtimeoutz	MEMORY.md==z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sresultr   r   py5u   스크립트 실패: z
>assert %(py7)spy7)mkdirr   homer   parent
write_textr   environcopyshutilrmtree
subprocessrunstrr	   
returncoder   _call_reprcomparer   r   r   r   r   stderrr   r   )r   tmp_pathmonkeypatchfake_projectfake_memory_dirsource_memorytest_pwdrR   real_project_dirra   rW   target_memoryr   @py_assert4r   @py_format6@py_format8s                    r    test_symlink_creation_in_new_dirz4TestSymlinkCreation.test_symlink_creation_in_new_dirB   s     "II&1d+ 		&oo##%  &&td&C$$%6$I ;jjooE
  99;)aa""$MM*+ S%&
 )83kA ""$MM*+   NAN A%NNN ANNNNNNvNNNvNNN NNNANNN)>v}}o'NNNNNNNNr   N)r)   r*   r+   r,   rt   r-   r   r   rG   rG   ?   s    $,Or   rG   c                       e Zd ZdZd Zy)TestSkipIfExistsu+   이미 존재하는 경우 스킵 테스트c                 
   t         j                  j                         }d|d<   t        j                         }t	        j
                  dt        t              gdd|d      }t        j                         |z
  dz  }|j                  }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                   |	            dx}x}}d}
||
k  }|st        j                  d|fd||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      dz  }t        j"                  d|dd      dz   d|iz  }t        t        j                   |            dx}}
y)u$   심링크가 이미 있으면 스킵%/home/jay/.cokacdir/workspace/autosetrL   rM   TrN   rO     r   rT   rV   rW   rX   zassert %(py7)srZ   Nd   <z%(py0)s < %(py3)s
elapsed_msr   r    u   실행 시간 초과: .1fms
>assert %(py5)srY   )r   r_   r`   timerc   rd   re   r	   rf   r   rg   r   r   r   r   r   r   r   )r   rR   
start_timerW   r~   r   rq   r   rr   rs   @py_assert2@py_format4s               r   test_skip_if_symlink_existsz,TestSkipIfExists.test_skip_if_symlink_existst   sH    jjoo<E
YY[
S%&
 iikJ.$6
   %A% A%%%% A%%%%%%v%%%v%%% %%%A%%%%%%%LzCLLLzCLLLLLLzLLLzLLLCLLL#9*S9I!LLLLLLLr   N)r)   r*   r+   r,   r   r-   r   r   rv   rv   q   s    5Mr   rv   c                       e Zd ZdZd Zy)TestExecutionTimeu   실행 시간 테스트c                    t         j                  j                         }d|d<   g }t        d      D ]j  }t	        j                         }t        j                  dt        t              gdd|d       t	        j                         |z
  dz  }|j                  |       l t        |      t        |      z  }d}||k  }|st        j                  d	|fd
||f      dt        j                         v st        j                   |      rt        j"                  |      ndt        j"                  |      dz  }	t        j$                  d|dd| d      dz   d|	iz  }
t'        t        j(                  |
            dx}}y)u#   실행 시간이 100ms 이내인지rx   rL   rN   rM   TrO   ry   rz   r{   r}   avg_timer   u   평균 실행 시간 초과: r   u   ms (측정값: )r   rY   N)r   r_   r`   ranger   rc   rd   re   r	   appendsumlenr   rg   r   r   r   r   r   r   r   )r   rR   times_r   r~   r   r   r   r   rr   s              r   test_execution_time_under_100msz1TestExecutionTime.test_execution_time_under_100ms   s   jjoo<E
q 
	%AJNN[)*# ))+
2d:JLL$
	% u:E
*dx#~dddx#ddddddxdddxddd#ddd!>xnO\a[bbcdddddddr   N)r)   r*   r+   r,   r   r-   r   r   r   r      s    !er   r   c                       e Zd ZdZd Zy)TestWorkspaceCleanupu   Workspace 정리 방안 보고c           	      x   t        d      }|j                         st        j                  d       i }|j	                         D ]T  }|j                         s|j                  j                         }||vrg ||<   ||   j                  |j                         V dg}t        |j                               D ]*  \  }}|j                  d|xs d dt        |       d       , t        dj                  |             d	}|s8d
dt        j                   |      iz  }t#        t        j$                  |            d}y)u)   autoset workspace의 임시 파일 보고rx   u   autoset 디렉토리 없음u    [Workspace 임시 파일 보고]z  u   (확장자 없음)z: u   개
Tzassert %(py1)spy1N)r   r   pytestskipiterdiris_filesuffixlowerr   namesorteditemsr   printjoinr   r   r   r   )	r   autoset_dir
extensionsfileextreport_linesfiles@py_assert0@py_format2s	            r   test_report_temp_filesz+TestWorkspaceCleanup.test_report_temp_files   s
   BC!!#KK56 
'') 	2D||~kk'')j(&(JsO3&&tyy1	2 ;; !1!1!34 	UJC"S%@,@$ACJ<s ST	U 	dii%&ttr   N)r)   r*   r+   r,   r   r-   r   r   r   r      s
    (r   r   __main__z-v)r,   builtinsr   _pytest.assertion.rewrite	assertionrewriter   r<   r   rc   tempfiler   pathlibr   r   r_   r>   
_WORKSPACEr	   r\   r1   r   r/   rG   rv   r   r   r)   main__file__r-   r   r   <module>r      s      	     "**..!13HIJ
99		i'/9	W 	WL L4/O /OdM M2e e2 : zFKK4 ! r   