
    ^i	1                     :   d Z ddlZddlmc m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                   j                                ddlmZmZmZmZ  G d d      Z G d d      Z G d	 d
      Z G d d      Zy)u-   utils/checkpoint.py 테스트 스위트 (TDD)    N)Path)cleanup_oldlist_checkpointsrestoresnapshotc                       e Zd Z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y)TestSnapshotu   snapshot() 함수 테스트tmp_pathreturnNc                    |dz  }|j                  d       |dz  }t        |d|      }|j                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d	x}}y	)
u)   snapshot이 백업 파일을 생성한다
source.txtzoriginal contentcheckpointstestlabelcheckpoint_dirAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}backup_pathpy0py2py4N

write_textr   exists@py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationselfr
   sourcer   r   @py_assert1@py_assert3@py_format5s           2/home/jay/workspace/utils/tests/test_checkpoint.py!test_snapshot_creates_backup_filez.TestSnapshot.test_snapshot_creates_backup_file   s    L(,-!M1vVNS!!#!########{###{###!##########    c                    |dz  }|j                  d       |dz  }t        ||      }t        |t              }|sddt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      d	z  }t        t        j                  |            d
}y
)u'   snapshot이 Path 객체를 반환한다r   contentr   r   5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultr   r   py1r   r   N)r   r   r0   r   r   r   r   r   r    r!   r"   )r$   r
   r%   r   r1   r'   r(   s          r)   test_snapshot_returns_pathz'TestSnapshot.test_snapshot_returns_path   s    L()$!M1&@&$''''''''z'''z''''''&'''&''''''$'''$''''''''''r+   c                 t   |dz  }d}|j                  |       |dz  }t        ||      }|j                  } |       }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }	d
d|	iz  }
t        t        j                  |
            dx}x}}y)u.   백업 파일 내용이 원본과 동일하다r   zhello world
line 2r   r.   ==)zH%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.read_text
}()
} == %(py6)sr   original)r   r   r   py6assert %(py8)spy8N)r   r   	read_textr   _call_reprcomparer   r   r   r    r!   r"   )r$   r
   r%   r8   r   r   r&   r'   @py_assert5@py_format7@py_format9s              r)   test_snapshot_preserves_contentz,TestSnapshot.test_snapshot_preserves_content&   s    L(((#!M1vnE$$2$&2&(2222&(222222{222{222$222&222222(222(2222222r+   c           	         |dz  }|j                  d       |dz  }t        ||      }ddl}|j                  }d}|j                  } |||      }	|	sdd	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |	      dz  }
t        t        j                  |
            dx}x}x}}	y)uS   백업 파일명에 타임스탬프 형식이 포함된다 (YYYYMMDD_HHMMSS_ffffff)z
myfile.txtdatar   r.   r   Nz\d{8}_\d{6}_\d{6}zkassert %(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.search
}(%(py4)s, %(py7)s
{%(py7)s = %(py5)s.name
})
}rer   )r   r   r   py5py7py9)r   r   rD   searchnamer   r   r   r   r    r!   r"   )r$   r
   r%   r   r   rD   r&   r'   @py_assert6@py_assert8@py_format10s              r)   )test_snapshot_filename_contains_timestampz6TestSnapshot.test_snapshot_filename_contains_timestamp1   s    L(&!!M1vnE 	yy@-@{/?/?@y-/?@@@@@@@@r@@@r@@@y@@@-@@@@@@{@@@{@@@/?@@@@@@@@@@r+   c                    |dz  }|j                  d       |dz  }t        ||      }d}|j                  }||v }|st        j                  d|fd||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      dz  }d	d
|iz  }	t        t        j                  |	            dx}x}}y)u4   백업 파일명에 원본 파일명이 포함된다zimportant.pycoder   r.   inz,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.name
}r   r3   py3rE   assert %(py7)srF   Nr   r   rI   r   r=   r    r   r   r   r!   r"   
r$   r
   r%   r   r   @py_assert0@py_assert4@py_assert2@py_format6@py_format8s
             r)   -test_snapshot_filename_contains_original_namez:TestSnapshot.test_snapshot_filename_contains_original_name>   s    N*&!!M1vnE1!1!11~!11111~!1111~111111111111!11111111r+   c                    |dz  }|j                  d       |dz  }t        |d|      }d}|j                  }||v }|st        j                  d|fd||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      d	z  }d
d|iz  }	t        t        j                  |	            dx}x}}y)u"   label이 파일명에 포함된다zdata.txtrC   r   before_refactorr   rP   rR   r   rS   rU   rF   NrV   rW   s
             r)   test_snapshot_with_labelz%TestSnapshot.test_snapshot_with_labelH   s    J&&!!M1v->~^ 4K$4$44 $44444 $4444 444444K444K444$44444444r+   c                    |dz  }|j                  d       |dz  }t        ||      }|j                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}y)	u'   label 없이도 스냅샷 생성 가능file.txtr-   r   r.   r   r   r   Nr   r#   s           r)   test_snapshot_without_labelz(TestSnapshot.test_snapshot_without_labelR   s    J&)$!M1vnE!!#!########{###{###!##########r+   c                     |dz  }|dz  }t        j                  t              5  t        ||       ddd       y# 1 sw Y   yxY w)u:   존재하지 않는 파일 스냅샷 시 FileNotFoundErrorznonexistent.txtr   r.   N)pytestraisesFileNotFoundErrorr   )r$   r
   r%   r   s       r)   %test_snapshot_nonexistent_file_raisesz2TestSnapshot.test_snapshot_nonexistent_file_raises\   sC    --!M1]],- 	<VN;	< 	< 	<s	   ;Ac                    |dz  }|j                  d       |dz  dz  dz  }|j                  } |       }| }|sddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d	x}x}}t        ||
       |j                  } |       }|sddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d	x}}y	)u7   체크포인트 디렉토리가 없으면 자동 생성rb   rC   deepnestedr   zEassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r   r   Nr.   r   )
r   r   r   r   r   r   r    r!   r"   r   )	r$   r
   r%   r   r&   r'   r>   r[   r(   s	            r)   $test_snapshot_creates_checkpoint_dirz1TestSnapshot.test_snapshot_creates_checkpoint_dird   s    J&&!!F*X5E!((*(***********>***>***(**********7$$&$&&&&&&&&~&&&~&&&$&&&&&&&&&&r+   c                    |dz  }|j                  d       |dz  }t        |d|      }t        j                  d       |j                  d       t        |d|      }||k7  }|st	        j
                  d|fd||f      d	t        j                         v st	        j                  |      rt	        j                  |      nd	d
t        j                         v st	        j                  |      rt	        j                  |      nd
dz  }dd|iz  }t        t	        j                  |            d}|j                  } |       }	|	sdd	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      t	        j                  |	      dz  }t        t	        j                  |            dx}}	|j                  } |       }	|	sdd
t        j                         v st	        j                  |      rt	        j                  |      nd
t	        j                  |      t	        j                  |	      dz  }t        t	        j                  |            dx}}	y)uE   같은 파일을 여러 번 스냅샷 → 여러 백업 파일 생성rb   v1r   r   {Gz?v2)!=)z%(py0)s != %(py2)spath1path2)r   r   zassert %(py4)sr   Nr   r   )r   r   timesleepr   r=   r   r   r   r    r!   r"   r   )
r$   r
   r%   r   rr   rs   r&   @py_format3r(   r'   s
             r)   -test_snapshot_multiple_creates_multiple_filesz:TestSnapshot.test_snapshot_multiple_creates_multiple_filesp   so   J&$!M1tNK

4$tNK~uuu|||~~uu|~|||~~uu|~r+   )__name__
__module____qualname____doc__r   r*   r4   rA   rM   r]   r`   rc   rh   rl   rw    r+   r)   r	   r	      s    %$$ $4 $(4 (D (	3 	3 	3A$ A4 A2d 2t 25 5$ 5$D $T $<d <t <
'T 
'd 
'd t r+   r	   c                   P    e Zd Z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y)	TestRestoreu   restore() 함수 테스트r
   r   Nc                 "   |dz  }|j                  d       |dz  }t        ||      }|j                  d       |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                  |      t        j                  |      d	z  }	d
d|	iz  }
t        t        j                  |
            dx}x}x}}t        ||       |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                  |      t        j                  |      d	z  }	d
d|	iz  }
t        t        j                  |
            dx}x}x}}y)u(   restore가 파일 내용을 복원한다
target.txtr8   r   r.   modifiedr6   zH%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.read_text
}()
} == %(py7)sr%   r   r   r   rF   assert %(py9)srG   N)r   r   r<   r   r=   r   r   r   r    r!   r"   r   )r$   r
   r%   r   r   r&   r'   rJ   r>   r\   rL   s              r)   test_restore_recovers_contentz)TestRestore.test_restore_recovers_content   sZ   L(*%!M1vnE 	*%/!/Z/!Z////!Z//////v///v//////!///Z/////// 	V$/!/Z/!Z////!Z//////v///v//////!///Z///////r+   c                 @   |dz  }|j                  d       |dz  }t        ||      }|dz  }t        ||       |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                  |      t	        j                  |      d	z  }
d
d|
iz  }t        t	        j                  |            dx}x}x}	}y)u   다른 경로로 복원 가능r   rC   r   r.   restored.txtr6   r   targetr   r   rG   N)r   r   r   r<   r   r=   r   r   r   r    r!   r"   r$   r
   r%   r   r   r   r&   r'   rJ   r>   r\   rL   s               r)   test_restore_to_new_pathz$TestRestore.test_restore_to_new_path   s    L(&!!M1vnEN*V$+!+V+!V++++!V++++++v+++v++++++!+++V+++++++r+   c                     |dz  }|dz  }t        j                  t              5  t        ||       ddd       y# 1 sw Y   yxY w)u@   존재하지 않는 체크포인트 복원 시 FileNotFoundErrorznonexistent_checkpoint.txtr   N)re   rf   rg   r   )r$   r
   fake_checkpointr   s       r)   *test_restore_nonexistent_checkpoint_raisesz6TestRestore.test_restore_nonexistent_checkpoint_raises   sC    "%AAL(]],- 	-OV,	- 	- 	-s	   :Ac                 d   |dz  }|j                  d       |dz  }t        ||      }|dz  }t        t        |      t        |             |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                  |      t        j                  |      d	z  }
d
d|
iz  }t        t        j                  |            dx}x}x}	}y)u   str 타입 경로도 허용rb   r-   r   r.   r   r6   r   r   r   r   rG   N)r   r   r   strr<   r   r=   r   r   r   r    r!   r"   r   s               r)   !test_restore_accepts_string_pathsz-TestRestore.test_restore_accepts_string_paths   s    J&)$!M1vnEN*K #f+..!.Y.!Y....!Y......v...v......!...Y.......r+   )	rx   ry   rz   r{   r   r   r   r   r   r|   r+   r)   r~   r~      sQ    $0d 0t 0 , ,$ ,-4 -D -/$ /4 /r+   r~   c                   p    e Zd Z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
y)TestListCheckpointsu#   list_checkpoints() 함수 테스트r
   r   Nc                    |dz  }|j                  d       |dz  }t        ||       t        ||      }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      d	z  }t        t        j                  |            d
}t        |      }d}||kD  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  t              rt        j                  t              nd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   }t        |t              }	|	sd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t        j                  |	      dz  }t        t        j                  |            d
x}}	y
)u2   list_checkpoints가 dict 리스트를 반환한다rb   rC   r   r.   r/   r0   r1   listr2   Nr   )>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)slenr   r3   rT   r9   r:   r;   z5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}dict)r   r   rT   rE   )r   r   r   r0   r   r   r   r   r   r    r!   r"   r   r=   r   )r$   r
   r%   r   r1   r'   r(   rZ   r>   rY   r?   r@   r&   r[   s                 r)   test_list_returns_list_of_dictsz3TestListCheckpoints.test_list_returns_list_of_dicts   s   J&&!!M17!&H&$''''''''z'''z''''''&'''&''''''$'''$''''''''''6{Q{Q{Qss66{Q )*z)T********z***z***)******T***T**********r+   c                    |dz  }|j                  d       |dz  }t        |d|       t        ||      }t        |      }d}||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  t              rt	        j                  t              nd
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   }
d}||
v }|st	        j
                  d|fd||
f      t	        j                  |      dt        j                         v st	        j                  |
      rt	        j                  |
      nddz  }dd|iz  }t        t	        j                  |            dx}}d}||
v }|st	        j
                  d|fd||
f      t	        j                  |      dt        j                         v st	        j                  |
      rt	        j                  |
      nddz  }dd|iz  }t        t	        j                  |            dx}}d}||
v }|st	        j
                  d|fd||
f      t	        j                  |      dt        j                         v st	        j                  |
      rt	        j                  |
      nddz  }dd|iz  }t        t	        j                  |            dx}}d}||
v }|st	        j
                  d|fd||
f      t	        j                  |      dt        j                         v st	        j                  |
      rt	        j                  |
      nddz  }dd|iz  }t        t	        j                  |            dx}}y)uJ   반환 dict에 필수 키가 있다: path, label, timestamp, original_pathrb   rC   r   mylabelr   r.      r6   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   r1   r   r:   r;   Nr   pathrP   )z%(py1)s in %(py3)sentry)r3   rT   assert %(py5)srE   r   	timestamporiginal_pathr   r   r   r   r   r=   r   r   r   r    r!   r"   )r$   r
   r%   r   r1   rZ   r>   rY   r?   r@   r   rX   @py_format4r[   s                 r)    test_list_dict_has_required_keysz4TestListCheckpoints.test_list_dict_has_required_keys   s4   J&&!!M1yH!&H6{a{a{ass66{aq	vvvw%w%w%%#{e####{e###{######e###e#######'%''''%'''''''''%'''%'''''''r+   c                    |dz  }|j                  d       |dz  }t        |d|       t        j                  d       |j                  d       t        |d|       t	        ||	      }t        |      }d
}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t
              rt        j                  t
              nd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   d   }
d}|
|k(  }|slt        j                  d|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}|d   d   }
d}|
|k(  }|slt        j                  d|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}y)u'   최신 체크포인트가 먼저 온다rb   rn   r   firstr   g{Gz?rp   secondr.      r6   r   r   r1   r   r:   r;   Nr   r   z%(py1)s == %(py4)sr3   r   assert %(py6)sr9   r   )r   r   rt   ru   r   r   r   r=   r   r   r   r    r!   r"   )r$   r
   r%   r   r1   rZ   r>   rY   r?   r@   rX   r'   r(   s                r)   test_list_sorted_newest_firstz1TestListCheckpoints.test_list_sorted_newest_first   s   J&$!M1w~F

4$xG!&H6{a{a{ass66{aay!-X-!X----!X---!---X-------ay!,W,!W,,,,!W,,,!,,,W,,,,,,,r+   c                 v   |dz  }|j                  d       |dz  }t        |d|       t        ||      }|d   d   }d}||k(  }|slt        j                  d	|fd
||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}y)u   label이 결과에 포함된다rb   rC   r   my_labelr   r.   r   r   r6   r   r   r   r9   N)r   r   r   r   r=   r    r!   r"   )
r$   r
   r%   r   r1   rX   r'   rZ   r(   r?   s
             r)   test_list_label_in_resultz-TestListCheckpoints.test_list_label_in_result   s    J&&!!M1z.I!&Hay!/Z/!Z////!Z///!///Z///////r+   c                 ~   |dz  }|dz  }t        ||      }g }||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}}y
)u1   체크포인트가 없으면 빈 리스트 반환rb   r   r.   r6   z%(py0)s == %(py3)sr1   r   rT   r   rE   N)	r   r   r=   r   r   r   r    r!   r"   )	r$   r
   r%   r   r1   rZ   r&   r   r[   s	            r)   "test_list_empty_for_no_checkpointsz6TestListCheckpoints.test_list_empty_for_no_checkpoints   sz    J&!M1!&Hv|vvvr+   c                    |dz  }|dz  }|j                  d       |j                  d       |dz  }t        |d|       t        |d|       t        ||	      }t        |      }d
}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              nd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   d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            dx}x}}y)u:   다른 파일의 체크포인트는 포함되지 않는다za.txtzb.txtz	a contentz	b contentr   snap_ar   snap_br.   r   r6   r   r   result_ar   r:   r;   Nr   r   r   r   r   r9   r   )r$   r
   file_afile_br   r   rZ   r>   rY   r?   r@   rX   r'   r(   s                 r)   "test_list_only_shows_matching_filez6TestListCheckpoints.test_list_only_shows_matching_file   sB   G#G#+&+&!M1xGxG#F>J8}!!}!!!!}!!!!!!s!!!s!!!!!!8!!!8!!!}!!!!!!!!!!{7#/x/#x////#x///#///x///////r+   )rx   ry   rz   r{   r   r   r   r   r   r   r   r|   r+   r)   r   r      sw    -+ + +( ($ ("-d -t -$	0$ 	04 	04 D 04 0D 0r+   r   c                   `    e Zd Z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	y)
TestCleanupOldu   cleanup_old() 함수 테스트r
   r   Nc                 H   |dz  }|j                  d       |dz  }t        d      D ](  }t        j                  d       t	        |d| |       * t        |d|	      }d
}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}}t        ||      }
t        |
      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nd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}}y)u2   keep 개수 초과 체크포인트를 삭제한다rb   rC   r      ro   snap_r      keepr   r   r6   r   deletedr   r   rE   Nr.   r   r   	remainingr   r:   r;   r   rangert   ru   r   r   r   r=   r   r   r   r    r!   r"   r   r   r$   r
   r%   r   ir   rZ   r&   r   r[   r   r>   rY   r?   r@   s                  r)   $test_cleanup_removes_old_checkpointsz3TestCleanupOld.test_cleanup_removes_old_checkpoints  sW   J&&!!M1q 	OAJJtVU1#;~N	O f1^Lw!|w!ww!$VNK	9~""~""""~""""""s"""s""""""9"""9"""~""""""""""r+   c                    |dz  }|j                  d       |dz  }t        d      D ](  }t        j                  d       t	        |d| |       * t        |d|	       t        ||
      }t        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nd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   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}y)u.   정리 후 최신 체크포인트가 남는다rb   rC   r      ro   r   r   r   r   r.   r6   r   r   r   r   r:   r;   Nr   r   snap_3r   r   r   r9   r   snap_2)r   r   rt   ru   r   r   r   r   r   r=   r   r   r   r    r!   r"   )r$   r
   r%   r   r   r   rZ   r>   rY   r?   r@   rX   r'   r(   s                 r)   test_cleanup_keeps_newestz(TestCleanupOld.test_cleanup_keeps_newest!  s   J&&!!M1q 	OAJJtVU1#;~N	O 	F>B$VNK	9~""~""""~""""""s"""s""""""9"""9"""~""""""""""|G$00$0000$000$0000000000|G$00$0000$000$0000000000r+   c                    |dz  }|j                  d       |dz  }t        ||       t        |d|      }d}||k(  }|st        j                  d|fd	||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}y)u#   삭제할 것이 없으면 0 반환rb   rC   r   r.   
   r   r   r6   r   r   r   r   rE   N)r   r   r   r   r=   r   r   r   r    r!   r"   )	r$   r
   r%   r   r   rZ   r&   r   r[   s	            r)   0test_cleanup_returns_zero_when_nothing_to_deletez?TestCleanupOld.test_cleanup_returns_zero_when_nothing_to_delete3  s    J&&!!M17f2nMw!|w!ww!r+   c                    |dz  }|j                  d       |dz  }t        d      D ](  }t        j                  d       t	        |d| |       * t        |d|	      }d
}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}}y)u$   삭제된 파일 수를 반환한다rb   rC   r      ro   sr   r   r   r   r6   r   r   r   r   rE   N)r   r   rt   ru   r   r   r   r=   r   r   r   r    r!   r"   )
r$   r
   r%   r   r   r   rZ   r&   r   r[   s
             r)   "test_cleanup_returns_deleted_countz1TestCleanupOld.test_cleanup_returns_deleted_count>  s    J&&!!M1q 	KAJJtVQqc7>J	K f1^Lw!|w!ww!r+   c                 F   |dz  }|j                  d       |dz  }t        d      D ](  }t        j                  d       t	        |d| |       * t        ||      }d	}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}}t        ||      }
t        |
      }d}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  t              rt        j                  t              nd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}}y)u   기본 keep=10rb   rC   r      ro   r   r   r.   r   r6   r   r   r   r   rE   Nr   r   r   r   r   r:   r;   r   r   s                  r)   test_cleanup_default_keep_is_10z.TestCleanupOld.test_cleanup_default_keep_is_10L  sU   J&&!!M1r 	KAJJtVQqc7>J	K f^Dw!|w!ww!$VNK	9~##~####~######s###s######9###9###~##########r+   )
rx   ry   rz   r{   r   r   r   r   r   r   r|   r+   r)   r   r     se    (#T #d #"1$ 14 1$	 	RV 	4 D $ $ $r+   r   )r{   builtinsr   _pytest.assertion.rewrite	assertionrewriter   sysrt   pathlibr   re   r   insertr   __file__parentutils.checkpointr   r   r   r   r	   r~   r   r   r|   r+   r)   <module>r      s|    3   
    3tH~,,33::; < M Mo od3/ 3/lS0 S0lM$ M$r+   