
    (<i                        d Z ddlZddlZddlZddlmZ ddlZej                  j                  d e	 ee
      j                  j                               ddlZej                  j                  d ee
      j                  j                  dz        Zerej"                  sJ ej                  j%                  e      Zej"                  j)                  e       eZdedefdZd	ed
edefdZdeddfdZdeddfdZdeddfdZdeddfdZdeddfdZdeddfdZdeddfdZdeddfdZ deddfdZ!deddfdZ"deddfdZ#deddfdZ$deddfdZ%deddfdZ&deddfdZ'deddfdZ(deddfdZ)d dZ*d dZ+d dZ,y)!u   Tests for lint-workspace.py - TDD approach.

tmp_path를 사용하여 격리된 테스트. 각 규칙 위반 감지, 심각도 분류,
종료 코드를 검증합니다.
    N)Pathlint_workspacezlint-workspace.pytmp_pathreturnc                     | dz  j                          | dz  j                          | dz  dz  j                  d       | dz  j                          | dz  j                          | S )	NteamstmpmemoryeventsTparentsscriptsworkers)mkdir)r   s    R/home/jay/workspace/.worktrees/task-2057-dev2/scripts/tests/test_lint_workspace.py_wsr      sf     8#**4*8	  "	  "O    pathdaysc                     | j                   j                  dd       | j                  d       t        j                         |dz  z
  }t	        j
                  | ||f       | S )NT)r   exist_okdataiQ )parentr   
write_texttimeosutime)r   r   ts      r   _oldr   $   sP    KKdT2OOF		dUl"AHHTAq6Kr   c                     t        |       }|dz  j                  d       |dz  j                  d       |dz  j                  d       t        j                  |      g k(  sJ y )N	CLAUDE.mdokz.envzdispatch.py)r   r   lwcheck_root_unwanted_filesr   wss     r    test_root_allowed_files_no_errorr'   0   s\    	XB+!!$'&[T"-##D)''+r111r   c                     t        |       }|dz  j                  d       t        j                  |      }t	        |      dk(  r|d   d   dk(  r
d|d   d   v sJ y )Nzrandom_notes.txtoops   r   ERROR)r   r   r#   r$   lenr   r&   vs      r   test_root_unknown_file_errorr/   8   sb    	XB
((0
$$R(Aq6Q;1Q47g-2D!Q2OOO2Or   c                     t        |       }|dz  j                  d       |dz  j                  d       t        j                  |      }t	        |      dk(  rt        d |D              sJ y )Nzfoo.txtxzbar.md   c              3   ,   K   | ]  \  }}|d k(    yw)r+   N ).0s_s      r   	<genexpr>z.test_root_multiple_unwanted.<locals>.<genexpr>D   s     :1qG|:s   )r   r   r#   r$   r,   allr-   s      r   test_root_multiple_unwantedr:   ?   s`    	XB)^$(]s#
$$R(Aq6Q;3::::::r   c                     t        |       }|dz  dz  }|j                  d       |dz  j                  d       |dz  j                          t        j	                  |      g k(  sJ y )Nr   dev1Tr   r!   r"   qcr   r   r   r#   check_teams_scatter)r   r&   r   s      r   test_teams_allowed_no_warningr@   K   sb    	XB
WvAGGDG_  &X!!"%+++r   c                     t        |       }|dz  dz  }|j                  d       |dz  j                  d       t        j	                  |      }t        |      dk(  r|d   d   d	k(  r
d|d   d   v sJ y )
Nr   dev2Tr   zplan-task-999.1.mdr)   r*   r   WARNING)r   r   r   r#   r?   r,   )r   r&   r   r.   s       r   test_teams_loose_file_warningrD   T   s    	XB
WvAGGDG	))&1
r"Aq6Q;1Q47i/4HAaDQRG4SSS4Sr   c                     t        |       }|dz  dz  dz  }|j                  d       |dz  j                  d       t        j	                  |      g k(  sJ y )Nr   dev3z
task-101.1Tr   zplan.mdr"   r>   )r   r&   ds      r   test_teams_task_dir_ignoredrH   ]   sW    	XB
Wv,AGGDG]t$!!"%+++r   c                 t    t        |       }t        |dz  dz  d       t        j                  |      g k(  sJ y )Nr	   z
recent.txt   r   r   r   r#   check_tmp_old_filesr%   s     r   test_tmp_recent_no_warningrN   i   s7    	XBel	"+!!"%+++r   c                     t        |       }t        |dz  dz  d       t        j                  |      }t	        |      dk(  r|d   d   dk(  r
d|d   d   v sJ y )Nr	   z	stale.log
   rK   r*   r   rC   )r   r   r#   rM   r,   r-   s      r   test_tmp_old_file_warningrQ   o   s`    	XBek	!+
r"Aq6Q;1Q47i/K1Q474JJJ4Jr   c                 t    t        |       }t        |dz  dz  d       t        j                  |      g k(  sJ y)u6   6.9일짜리는 7일 미초과이므로 경고 없음.r	   zedge.txt   rK   NrL   r%   s     r   "test_tmp_exactly_7_days_no_warningrT   v   s7    	XBej	 q)!!"%+++r   c                 |    t        |       }|dz  dz  j                  d       t        j                  |      g k(  sJ y )Nr   zshort.pyzdx
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
)r   r   r#   check_long_py_filesr%   s     r   test_short_py_no_inforW      s;    	XB)^j ,,Z8!!"%+++r   c                     t        |       }|dz  dz  j                  d       t        j                  |      }t	        |      dk(  r|d   d   dk(  rd|d   d   v r
d|d   d   v sJ y )Nr   zlong.pya  x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
r*   r   INFOu   줄)r   r   r#   rV   r,   r-   s      r   test_long_py_inforZ      sx    	XB)^i++K8
r"Aq6Q;1Q47f,ad1g1E%STUVSWXYSZJZZZJZr   c                     t        |       }|dz  dz  j                  d       t        j                  |      }t	        d |D              sJ y )Nr   big.pya  x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
c              3   *   K   | ]  \  }}d |v   yw)r\   Nr4   )r5   r7   ms      r   r8   z*test_workers_py_checked.<locals>.<genexpr>   s     +Ax1}+s   )r   r   r#   rV   anyr-   s      r   test_workers_py_checkedr`      sF    	XB)^h**;7
r"A+++++r   c                 z    t        |       }t        |dz  dz  dz  d       t        j                  |      g k(  sJ y )Nr
   r   ztask-1.done   rK   r   r   r#   check_memory_events_doner%   s     r    test_memory_recent_done_no_errorre      s<    	XBh	!M	1;&&r*b000r   c                     t        |       }t        |dz  dz  dz  d       t        j                  |      }t	        |      dk(  r|d   d   dk(  r
d|d   d   v sJ y )	Nr
   r   ztask-old.doned   rK   r*   r   r+   )r   r   r#   rd   r,   r-   s      r   test_memory_old_done_errorrh      se    	XBh	!O	3#>
##B'Aq6Q;1Q47g-/QqT!W2LLL2Lr   c                 z    t        |       }t        |dz  dz  dz  d       t        j                  |      g k(  sJ y )Nr
   r   ztask-1.event   rK   rc   r%   s     r   test_memory_non_done_ignoredrk      s<    	XBh	!N	2=&&r*b000r   c                     t        |       }t        j                  |      t              dk(  rd   d   dk(  sJ t	        fddD              sJ y )Nr*   r   rY   c              3   2   K   | ]  }|d    d   v   yw)r   r*   Nr4   )r5   kr.   s     r   r8   z'test_disk_usage_info.<locals>.<genexpr>   s     GqAaDG|Gs   )u	   디스크diskGBMB)r   r#   check_disk_usager,   r_   r-   s     @r   test_disk_usage_infors      sQ    	XB
BAq6Q;1Q47f,,,G%FGGGGr   c                 v    g d}t         j                  |      D cg c]  \  }}|	 c}}g dk(  sJ y c c}}w )N))rY   i)r+   e)rC   w)r+   rC   rY   )r#   sort_violations)r   r.   r6   r7   s       r   test_sort_orderry      s3    9A,,Q/0$!QA04PPPP0s   5c                  <    t         j                  ddg      dk(  sJ y )N)r+   r1   )rC   yr*   r#   compute_exit_coder4   r   r   test_exit_code_errorr~      s!    1A BCqHHHr   c                  :    t         j                  dg      dk(  sJ y )N)rC   r1   r   r|   r4   r   r   test_exit_code_warning_onlyr      s    !1 23q888r   c                  8    t         j                  g       dk(  sJ y )Nr   r|   r4   r   r   test_exit_code_no_violationsr      s    #q(((r   )r   N)-__doc__r   sysr   pathlibr   pytestr   insertstr__file__r   importlib.util	importlibutilspec_from_file_location_specloadermodule_from_spec_modexec_moduler#   r   intr   r'   r/   r:   r@   rD   rH   rN   rQ   rT   rW   rZ   r`   re   rh   rk   rs   ry   r~   r   r   r4   r   r   <module>r      sE   
 
    3tH~,,334 5 ..d8n++225HH	  ~~&&u-    	$ 4 t 3 4 2t 2 2P4 PD P;$ ;4 ;,D ,T ,TD TT T,$ ,4 ,, ,$ ,K K K, ,$ ,,D ,T ,[ [ [,d ,t ,1t 1 1M M$ M14 1D 1H4 HD HQd Qt Q
I9)r   