
    ?_il$                       d Z ddlm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mZ ddlZe
j                  j!                  d e ee      j&                  j&                  j&                               ddlmZmZ  G d d      Z G d d	      Zy)
ut   utils/context_refs.py 테스트 스위트 (M-05 @ 참조 시스템)

모리건(테스터) 작성 — TDD RED 단계
    )annotationsN)Path)
parse_refsresolve_refsc                  h    e Zd ZdZddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZy)TestParseRefsu*   parse_refs() — @ 참조 파싱 테스트c                L   t        d      }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}}|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   @file:path 단일 파싱zhello @file:src/main.py world   ==z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenrefspy0py1py3py6assert %(py8)spy8Nr   typefilez%(py1)s == %(py4)sr   py4assert %(py6)sr   pathzsrc/main.pyrawz@file:src/main.py
r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation
selfr   @py_assert2@py_assert5@py_assert4@py_format7@py_format9@py_assert0@py_assert3@py_format5s
             4/home/jay/workspace/utils/tests/test_context_refs.pytest_parse_file_ref_simplez(TestParseRefs.test_parse_file_ref_simple   s   9:4yAyA~yAss44yAAwv(&(&((((&((((((&(((((((Awv/-/-////-//////-///////Awu~4!44~!44444~!4444~444!44444444    c                &   t        d      }|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'   @file:/abs/path.py 절대 경로 파싱z0@file:/home/jay/workspace/utils/config_loader.pyr   r   r   r   r   r   r   r   Nr   z*/home/jay/workspace/utils/config_loader.pyr   r    r!   r%   r&   r'   )r)   r   r/   r0   r*   r1   r-   s          r2   !test_parse_file_ref_absolute_pathz/TestParseRefs.test_parse_file_ref_absolute_path    s    LMAwv(&(&((((&((((((&(((((((AwvN"NN"NNNNN"NNNNNNN"NNNNNNNNr4   c                F   t        d      }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   @folder:path 파싱u   참조: @folder:utils/r
   r   r   r   r   r   r   r   Nr   r   folderr   r   r   r   r   zutils/r   r(   s
             r2   test_parse_folder_refz#TestParseRefs.test_parse_folder_ref&   s<   234yAyA~yAss44yAAwv*(*(****(******(*******Awv*(*(****(******(*******r4   c                J   t        d      }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
}||u }|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   @diff 파싱u!   변경 사항: @diff 확인해줘r
   r   r   r   r   r   r   r   Nr   r   diffr   r   r   r   r   isz%(py1)s is %(py4)sr   z@diffr   r(   s
             r2   test_parse_diff_refz!TestParseRefs.test_parse_diff_ref-   s   =>4yAyA~yAss44yAAwv(&(&((((&((((((&(((((((Awv&$&$&&&&$&&&&&&$&&&&&&&Awu~((~((((~(((~((((((((((r4   c                D   t        d      }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
}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }t        t        j                  |            d
x}x}}y
)u   @staged 파싱u   staged 파일 목록: @stagedr
   r   r   r   r   r   r   r   Nr   r   stagedr   r   r   r   r   r=   r?   r   r(   s
             r2   test_parse_staged_refz#TestParseRefs.test_parse_staged_ref5   s<   9:4yAyA~yAss44yAAwv*(*(****(******(*******Awv&$&$&&&&$&&&&&&$&&&&&&&r4   c                d   d}t        |      }|D cg c]  }|d   	 }}|j                  }d} ||      }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                  |      t        j                  |      dz  }
d	d
|
iz  }t        t        j                  |            dx}x}x}x}	}|j                  }d} ||      }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                  |      t        j                  |      dz  }
d	d
|
iz  }t        t        j                  |            dx}x}x}x}	}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c c}w )u   여러 @ 참조 동시 파싱u1   @file:a.py 그리고 @file:b.py, @diff 도 포함r   r      r   )zK%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.count
}(%(py4)s)
} == %(py9)stypes)r   py2r   r   py9assert %(py11)spy11Nr<   r
      r   r   r   r   r   r   )r   countr    r!   r"   r#   r$   r%   r&   r'   r   )r)   textr   rrF   @py_assert1r0   r+   @py_assert8@py_assert7@py_format10@py_format12r*   r,   r-   r.   s                   r2   test_parse_multiple_refsz&TestParseRefs.test_parse_multiple_refs<   s   B$$()q6)){{'6'{6"'a'"a''''"a''''''u'''u'''{'''6'''"'''a'''''''{{'6'{6"'a'"a''''"a''''''u'''u'''{'''6'''"'''a'''''''4yAyA~yAss44yA *s   L-c                f   t        d      }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)	u   @ 참조 없으면 빈 목록zhello world, no refs herer   z%(py0)s == %(py3)sr   r   r   assert %(py5)spy5N	r   r    r!   r"   r#   r$   r%   r&   r'   r)   r   r*   rO   @py_format4@py_format6s         r2    test_parse_no_refs_returns_emptyz.TestParseRefs.test_parse_no_refs_returns_emptyE   se    56trztrttrr4   c                f   t        d      }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)	u   빈 문자열은 빈 목록 r   rV   r   rW   rX   rY   NrZ   r[   s         r2   test_parse_empty_stringz%TestParseRefs.test_parse_empty_stringJ   sc    "~trztrttrr4   c                $   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(   raw 필드가 원본 텍스트를 보존z!@folder:/home/jay/workspace/utilsr   r   r   r   r   r   r   Nr6   )r)   rM   r   r/   r0   r*   r1   r-   s           r2   test_parse_ref_raw_preservedz*TestParseRefs.test_parse_ref_raw_preservedO   sg    2$Awu~D!DD~!DDDDD~!DDDD~DDD!DDDDDDDDr4   c                @   t        d      }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&   공백으로 둘러싸인 @file 참조z  @file:config.yaml  r
   r   r   r   r   r   r   r   Nr   r   zconfig.yamlr   r   r   r   r   r(   s
             r2   &test_parse_file_ref_with_spaces_aroundz4TestParseRefs.test_parse_file_ref_with_spaces_aroundU   s    124yAyA~yAss44yAAwv/-/-////-//////-///////r4   c                x   t        d      }d |D        }t        |      }|sd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*   @unknown:something @email이나 다른 것c              3  *   K   | ]  }|d    dv   yw)r   )r   r9   r<   rB   N ).0rN   s     r2   	<genexpr>zATestParseRefs.test_parse_unknown_at_not_parsed.<locals>.<genexpr>_   s     S1V9 DDSs   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)r   rG   r   N)	r   rk   r"   r#   r    r$   r%   r&   r'   )r)   r   rO   r0   r1   s        r2    test_parse_unknown_at_not_parsedz.TestParseRefs.test_parse_unknown_at_not_parsed[   sl    FGSdSSsSSSSSSSSSsSSSsSSSSSSSSSSSSSSr4   NreturnNone)__name__
__module____qualname____doc__r3   r7   r:   r@   rC   rT   r^   ra   rc   re   rl   rh   r4   r2   r   r      s?    45O+)'

E0Tr4   r   c                      e Zd ZdZddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZddZy)TestResolveRefsu,   resolve_refs() — @ 참조 치환 테스트c                   |dz  }|j                  dd       t        d| 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| 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)u(   @file:path를 파일 내용으로 치환z	hello.txtzhello content
utf-8encodingzbefore @file:z afterbase_dirzhello contentinz%(py1)s in %(py3)sresultr   r   rX   rY   N@file:)not in)z%(py1)s not in %(py3)s

write_textr   r    r!   r%   r"   r#   r$   r&   r'   r)   tmp_pathfr   r/   r*   r\   r]   s           r2   test_resolve_file_ref_contentz-TestResolveRefs.test_resolve_file_ref_contente   s    {"	&9aS7(K(&((((&(((((((((&(((&(((((((s&!/!////!///!////////////////r4   c                   t        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}}y	)
u;   존재하지 않는 파일은 not found 코멘트로 치환z @file:/nonexistent/path/file.txt	not foundr|   r~   r   r   rX   rY   N	r   r    r!   r%   r"   r#   r$   r&   r'   r)   r   r/   r*   r\   r]   s         r2   test_resolve_file_not_foundz+TestResolveRefs.test_resolve_file_not_foundn   s    @A${f$$$${f$$${$$$$$$f$$$f$$$$$$$1;1V;;;;1V;;;1;;;;;;V;;;V;;;;;;;r4   c                \   |dz  }|j                  ddz         t        d| |      }g }d}||v }|}|sd}||v }	|	}|	st        |      }
d}|
|k  }|}|sDt        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  }|j                  |       |swt        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  }|j                  |       |	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  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}x}	x}
x}}y)u7   50KB 초과 파일은 not found 또는 잘라서 처리zbig.txt   xi   r   rz   z	too larger   i  r|   z%(py3)s in %(py5)sr   r   rY   %(py7)spy7z%(py10)s in %(py12)spy10py12%(py14)spy14<)z4%(py19)s
{%(py19)s = %(py16)s(%(py17)s)
} < %(py22)sr   )py16py17py19py22z%(py24)spy24r
   zassert %(py27)spy27N)write_bytesr   r   r    r!   r%   r"   r#   r$   append_format_boolopr&   r'   )r)   r   big_filer   rO   r*   r,   r/   @py_assert9@py_assert11@py_assert18@py_assert21@py_assert20r]   @py_format8@py_format13@py_format15@py_format23@py_format25@py_format26@py_format28s                        r2   test_resolve_file_size_limitz,TestResolveRefs.test_resolve_file_size_limitt   s   i'TY/0xj1HET{T{f$TTv(=TVTuTuATTTTT{fTTT{TTTTTTfTTTfTTTTTTTTvTTTTTTTTTvTTTvTTTTTTTuTTTTTTTTTTTTTTTVTTTVTTTTTTuTTTTTTTTTTTTTTTr4   c                   |dz  }|dz  }|j                  dd       |j                  dd       t        d| 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}}y)u$   여러 @file 참조를 모두 치환za.txtzb.txtz	content Arw   rx   z	content Br   z and @file:r|   r~   r   r   rX   rY   Nr   )	r)   r   f1f2r   r/   r*   r\   r]   s	            r2   test_resolve_multiple_file_refsz/TestResolveRefs.test_resolve_multiple_file_refs|   s    
kG4
kG4rd+bT:;${f$$$${f$$${$$$$$$f$$$f$$$$$$$${f$$$${f$$${$$$$$$f$$$f$$$$$$$r4   c                   |dz  }|j                          |dz  j                  dd       |dz  j                  dd       t        d| |	      }g }d}||v }|}|sd}||v }	|	}|sXt        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  }|j                  |       |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  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}	y)u3   @folder:path 치환 — 파일 목록/내용 포함mydirzfile1.pyzprint('one')rw   rx   zfile2.pyzprint('two')@folder:rz   r|   r   r   r   r   r   r   r   r   r   r
   assert %(py17)sr   N)mkdirr   r   r    r!   r%   r"   r#   r$   r   r   r&   r'   )r)   r   subr   rO   r*   r,   r/   r   r   r]   r   r   r   @py_format16@py_format18s                   r2   test_resolve_folder_refz'TestResolveRefs.test_resolve_folder_ref   s    			z	%%nw%G	z	%%nw%G.B;z;zV#;z;zV';;;;;zV;;;z;;;;;;V;;;V;;;;;;;zV;;;z;;;;;;V;;;V;;;;;;;;;;;;;;r4   c                ,  	 |dz  }|j                          t        d      D ]  }|d| dz  j                  d| d       ! t        d|       	t	        	fd	t        d      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'   @folder는 최대 5개 파일만 포함big_dir   r   z.py# filerw   rx   r   c              3  2   K   | ]  }d | v sd  yw)r   r
   Nrh   )ri   ir   s     r2   rj   zBTestResolveRefs.test_resolve_folder_max_5_files.<locals>.<genexpr>   s     Gq&0FGs      <=)z%(py0)s <= %(py3)s
file_countrW   rX   rY   N)r   ranger   r   sumr    r!   r"   r#   r$   r%   r&   r'   )
r)   r   r   r   r   r*   rO   r\   r]   r   s
            @r2   test_resolve_folder_max_5_filesz/TestResolveRefs.test_resolve_folder_max_5_files   s    "		q 	MAT!C= ,,vaS\G,L	M./GE!HGG
zQzQzzQr4   c           	        t        d      }g }d}||v }|}|rd}||v }|}|sXt        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  }
|j                  |
       |rt        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  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}t        |      }d}t        |      }||kD  }|sSt        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                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}}y)uF   @diff 치환 — git diff 출력 포함 (git 없어도 에러 안 남)zcheck @diff herecheckherer|   r   r   r   r   r   r   r   r   r   r   r   r   N>zM%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py9)s
{%(py9)s = %(py5)s(%(py7)s)
}r   r   r   r   rY   r   rH   rI   rJ   )r   r    r!   r%   r"   r#   r$   r   r   r&   r'   r   )r)   r   r   rO   r*   r,   r/   r   r   r]   r   r   r   r   r   @py_assert6rP   rR   rS   s                      r2   test_resolve_diff_refz%TestResolveRefs.test_resolve_diff_ref   s    015w5w& 5V5Vv%55555w&555w555555&555&5555555Vv555V555555v555v555555555555556{4!34S!344{44444{4444444s444s44444464446444{444444S444S444!344444444444r4   c           	        t        d      }t        |      }d}t        |      }||kD  }|sSt        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                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}}y	)
uQ   @staged 치환 — git staged 파일 목록 포함 (git 없어도 에러 안 남)zstaged: @stagedr   r   r   r   r   rI   rJ   N)
r   r   r    r!   r"   r#   r$   r%   r&   r'   )r)   r   r*   r   rP   r,   rR   rS   s           r2   test_resolve_staged_refz'TestResolveRefs.test_resolve_staged_ref   s    /06{3!23S!233{33333{3333333s333s33333363336333{333333S333S333!233333333333r4   c                   |dz  }|j                  dd       t        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}}y)u*   base_dir 기준으로 상대 경로 해석zrel.txtzrelative contentrw   rx   z@file:rel.txtrz   r|   r~   r   r   rX   rY   Nr   r   s           r2   #test_resolve_base_dir_relative_pathz3TestResolveRefs.test_resolve_base_dir_relative_path   s    y 	'':oA!+!V++++!V+++!++++++V+++V+++++++r4   c                   d}t        |      }||k(  }|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	}y	)
u-   @ 참조 없으면 원본 텍스트 그대로zhello world, no refsr   )z%(py0)s == %(py2)sr   rM   )r   rG   zassert %(py4)sr   N)	r   r    r!   r"   r#   r$   r%   r&   r'   )r)   rM   r   rO   @py_format3r1   s         r2   test_resolve_no_refs_unchangedz.TestResolveRefs.test_resolve_no_refs_unchanged   sx    %d#~vvvr4   c                   g }t        d      D ]0  }|d| dz  }|j                  ddz         |j                  |       2 dj                  d |D              }t	        ||      }|j
                  }d	} ||      }	t        |	      }
d
}d}||z  }|
|k  }|sFt        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                  |      t        j                  |	      t        j                  |
      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}	x}
x}x}x}}y)u    컨텍스트 합계 100KB 제한   largez.txt   yi x   c              3  &   K   | ]	  }d |   yw)r   Nrh   )ri   r   s     r2   rj   z@TestResolveRefs.test_resolve_total_size_limit.<locals>.<genexpr>   s     4&4   rz   rw   n   i   r   )zw%(py9)s
{%(py9)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.encode
}(%(py5)s)
})
} < (%(py12)s * %(py14)s)r   r   )r   r   r   rY   r   rH   r   r   r   r   N)r   r   r   joinr   encoder   r    r!   r"   r#   r$   r%   r&   r'   )r)   r   filesr   r   rM   r   r*   r,   r   rP   r   @py_assert13@py_assert15@py_assert10r   r   s                    r2   test_resolve_total_size_limitz-TestResolveRefs.test_resolve_total_size_limit   sQ   q 	AU1#T?*AMM$),-LLO	 xx4e44dX6==77=)7s)*7S747S4Z7*Z7777*Z777777s777s77777767776777=777777)777*777S777477777777r4   c                   |dz  }|j                  dd       t        dt        |            }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)u!   base_dir를 Path 객체로 전달zpath_test.txtzpath object contentrw   rx   z@file:path_test.txtrz   r|   r~   r   r   rX   rY   N)r   r   r   r    r!   r%   r"   r#   r$   r&   r'   r   s           r2   $test_resolve_base_dir_as_path_objectz4TestResolveRefs.test_resolve_base_dir_as_path_object   s    &	*W=3d8nM$.$....$...$................r4   c                    |dz  }|j                          dj                  d t        d      D              }|dz  j                  |d       t	        d| |	      }t        d      D cg c]	  }d
| |v  }}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c c}w )u"   폴더 내 파일은 200줄 제한limitdir
c              3  &   K   | ]	  }d |   yw)line Nrh   )ri   r   s     r2   rj   zCTestResolveRefs.test_resolve_file_ref_line_limit.<locals>.<genexpr>   s     :!E!+:r   i,  zbig.pyrw   rx   r   rz   r      r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py6)sr   included_linesr   r   r   N)r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   )r)   r   r   linesr   r   r   r*   r+   r,   r-   r.   s               r2    test_resolve_file_ref_line_limitz0TestResolveRefs.test_resolve_file_ref_line_limit   s   #				:uSz::	x##EG#<.B9>sDAE!+/DD>")c)"c))))"c))))))s)))s))))))>)))>)))")))c))))))) Es   *Fc                d   t        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}}y	)
u1   존재하지 않는 폴더는 not found 메시지z@folder:/nonexistent/dir/r   r|   r~   r   r   rX   rY   Nr   r   s         r2   test_resolve_folder_not_foundz-TestResolveRefs.test_resolve_folder_not_found   sf    9:${f$$$${f$$${$$$$$$f$$$f$$$$$$$r4   N)r   r   rn   ro   rm   )rp   rq   rr   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rh   r4   r2   ru   ru   b   sL    60<U%<	54,
8/
*%r4   ru   )rs   
__future__r   builtinsr"   _pytest.assertion.rewrite	assertionrewriter    
subprocesssystempfilepathlibr   pytestr   insertstr__file__parentutils.context_refsr   r   r   ru   rh   r4   r2   <module>r     sn   
 #     
    3tH~,,33::; < 7JT JTZw% w%r4   