
    Si_#                     J   d Z ddlZddlmc m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mZ  G d d      Z G d d      Z G d	 d
      Z G d d      Z G d d      Zy)uq   utils/skill_parser.py 테스트 스위트

frontmatter 파싱 및 메타데이터 추출 함수를 검증한다.
    N)Path)extract_categoryextract_descriptionextract_requiresextract_triggersparse_frontmatterc                   P    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y)TestParseFrontmatteru8   parse_frontmatter(content) -> tuple[dict, str] 테스트Nc                    d}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        |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   반환 타입은 (dict, str)u   ---
name: skill
---
본문5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancefmdictpy0py1py2py4Nbodystrr   r   r   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationr   selfcontentr   r   @py_assert3@py_format5s         4/home/jay/workspace/utils/tests/test_skill_parser.py"test_returns_tuple_of_dict_and_strz7TestParseFrontmatter.test_returns_tuple_of_dict_and_str   s%   1$W-D"d########z###z######"###"######d###d##########$$$$$$$$$z$$$z$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    c                    d}t        |      \  }}|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}}y
)u   단순 key: value YAML 파싱u1   ---
name: my-skill
description: 설명
---
본문namemy-skill==zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} == %(py9)sr   r   r   r   py6py9assert %(py11)spy11Ndescriptionu   설명)
r   getr   _call_reprcomparer   r   r   r   r   r   )r    r!   r   r   @py_assert1r"   @py_assert5@py_assert8@py_assert7@py_format10@py_format12s              r$   test_parses_simple_key_valuez1TestParseFrontmatter.test_parses_simple_key_value%   s>   I$W-Dvv+f+vf~++~++++~++++++r+++r+++v+++f+++~++++++++++vv0m0vm$00$0000$000000r000r000v000m000$00000000000r&   c                    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}}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'   body에서 frontmatter 블록 제거됨u   ---
name: s
---
# 제목
본문z---)not in)z%(py1)s not in %(py3)sr   )r   py3assert %(py5)spy5Nu   # 제목in)z%(py1)s in %(py3)su   본문)	r   r   r4   r   r   r   r   r   r   )r    r!   r   r   @py_assert0@py_assert2@py_format4@py_format6s           r$   test_body_excludes_frontmatterz3TestParseFrontmatter.test_body_excludes_frontmatter,   s    7$W-D uD    uD   u      D   D       !zT!!!!zT!!!z!!!!!!T!!!T!!!!!!!x4x4x44r&   c                    d}t        |      \  }}i }||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}}||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%   frontmatter 없으면 빈 dict 반환u'   # 헤딩만 있는 파일
본문 내용r*   z%(py0)s == %(py3)sr   r   r>   r?   r@   N)z%(py0)s == %(py2)sr   r!   )r   r   zassert %(py4)sr   	r   r   r4   r   r   r   r   r   r   )
r    r!   r   r   rD   r5   rE   rF   @py_format3r#   s
             r$   &test_no_frontmatter_returns_empty_dictz;TestParseFrontmatter.test_no_frontmatter_returns_empty_dict4   s    <$W-DrRxrRrrRwtwttwwr&   c                    t        d      \  }}i }||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}}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(   빈 문자열 입력 시 빈 dict 반환 r*   rI   r   rJ   r?   r@   Nr   rK   )r    r   r   rD   r5   rE   rF   s          r$   $test_empty_string_returns_empty_dictz9TestParseFrontmatter.test_empty_string_returns_empty_dict;   s    $R(DrRxrRrrRtrztrttrr&   c           
         d}t        |      \  }}|j                  }d} ||      }t        |t              }|sGd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                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            dx}x}x}}d	}	|d   }
|	|
v }|slt        j                  d
|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
d}	|d   }
|	|
v }|slt        j                  d
|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}	x}}
y)u   YAML 리스트 값 파싱u,   ---
triggers:
  - ship
  - deploy
---
본문triggersznassert %(py10)s
{%(py10)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.get
}(%(py5)s)
}, %(py8)s)
}r   r   list)r   r   r>   r@   py7py8py10NshiprA   )z%(py1)s in %(py4)s)r   r   zassert %(py6)sr.   deploy)r   r3   r   rS   r   r   r   r   r   r   r   r4   )r    r!   r   r   rD   @py_assert4@py_assert6@py_assert9@py_format11rC   r"   r#   @py_format7s                r$   test_parses_yaml_listz*TestParseFrontmatter.test_parses_yaml_listA   st   E$W-D&&33&,3z,d33333333z333z333333"333"333&333333,333333d333d3333333333'J'v''''v'''v'''''''''')2j>)x>))))x>)))x)))>)))))))r&   c                    d}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        |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)
u1   잘못된 YAML은 빈 dict 반환 (예외 없음)u#   ---
: invalid: [unclosed
---
본문r   r   r   r   r   Nr   r   r   r   s         r$   $test_invalid_yaml_returns_empty_dictz9TestParseFrontmatter.test_invalid_yaml_returns_empty_dictI   s%   :$W-D"d########z###z######"###"######d###d##########$$$$$$$$$z$$$z$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$r&   c                    d}t        |      \  }}|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}||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*   frontmatter만 있고 본문 없는 파일z---
name: only-fm
---
r(   zonly-fmr*   r,   r   r-   r0   r1   NrO   )zD%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.strip
}()
} == %(py7)sr   )r   r   r   rT   assert %(py9)sr/   )r   r3   r   r4   r   r   r   r   r   r   strip)r    r!   r   r   r5   r"   r6   r7   r8   r9   r:   rZ   @py_format8s                r$   test_frontmatter_only_filez/TestParseFrontmatter.test_frontmatter_only_fileP   s%   -$W-Dvv*f*vf~**~****~******r***r***v***f***~**********zz!z|!r!|r!!!!|r!!!!!!t!!!t!!!z!!!|!!!r!!!!!!!r&   returnN)__name__
__module____qualname____doc__r%   r;   rG   rM   rP   r^   r`   re    r&   r$   r
   r
      s-    B%1 *%"r&   r
   c                   8    e Zd ZdZddZddZddZddZddZy)	TestExtractDescriptionu.   extract_description(fm, body) -> str 테스트Nc                    ddi}d}t        ||      }d}||k(  }|s7t        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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(   frontmatter의 description 우선 반환r2   u	   fm 설명u   # 헤딩 제목
본문r*   z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} == %(py7)sr   r   r   r   r   r   r   rT   rb   r/   N	r   r   r4   r   r   r   r   r   r   r    r   r   r"   rZ   r6   rd   r9   s           r$   $test_returns_frontmatter_descriptionz;TestExtractDescription.test_returns_frontmatter_description`   s    [)("2t,;;,;;;;,;;;;;;";;;";;;;;;2;;;2;;;;;;t;;;t;;;,;;;;;;;;;;r&   c                    i }d}t        ||      }d}||k(  }|s7t        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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   frontmatter description 없을 때 # 헤딩 사용u   # 헤딩 설명

본문 내용u   헤딩 설명r*   rp   r   r   r   rq   rb   r/   Nrr   rs   s           r$   test_falls_back_to_headingz1TestExtractDescription.test_falls_back_to_headingf   s    1"2t,??,????,??????"???"??????2???2??????t???t???,??????????r&   c                    i }d}t        ||      }d}||k(  }|s7t        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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)u0   description도 헤딩도 없으면 빈 문자열u&   그냥 본문만 있음
줄 두 번째rO   r*   rp   r   r   r   rq   rb   r/   Nrr   rs   s           r$   $test_returns_empty_if_no_descriptionz;TestExtractDescription.test_returns_empty_if_no_descriptionl   s    8"2t,22,2222,222222"222"22222222222222222t222t222,2222222222r&   c                    ddi}d}t        ||      }d}||k(  }|s7t        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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   앞뒤 공백 제거r2   u     공백 설명  rO   u   공백 설명r*   rp   r   r   r   rq   rb   r/   Nrr   rs   s           r$   test_strips_whitespacez-TestExtractDescription.test_strips_whitespacer   s    01"2t,??,????,??????"???"??????2???2??????t???t???,??????????r&   c                 p   i }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}}y	)
u&   여러 헤딩 중 첫 번째만 사용u.   # 첫 번째 헤딩
## 두 번째
# 세 번째u   첫 번째 헤딩r*   rI   resultrJ   r?   r@   Nrr   r    r   r   r|   rD   r5   rE   rF   s           r$   test_first_heading_onlyz.TestExtractDescription.test_first_heading_onlyx   st    A$R.,,v,,,,,v,,,,,,,v,,,v,,,,,,,,,,,r&   rf   )	rh   ri   rj   rk   rt   rv   rx   rz   r~   rl   r&   r$   rn   rn   ]   s     8<@3@-r&   rn   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	y)
TestExtractTriggersu1   extract_triggers(fm, body) -> list[str] 테스트Nc                 |   dg di}d}t        ||      }g 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"   frontmatter triggers 배열 반환rR   )rW   rX   releaserO   r*   rI   r|   rJ   r?   r@   N	r   r   r4   r   r   r   r   r   r   r}   s           r$   (test_returns_list_from_frontmatter_arrayz<TestExtractTriggers.test_returns_list_from_frontmatter_array   sz    78!"d+66v66666v6666666v666v66666666666r&   c                 v   ddi}d}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:   frontmatter triggers 문자열 → 단일 항목 리스트triggerzship itrO   r*   rI   r|   rJ   r?   r@   Nr   r}   s           r$   )test_returns_list_from_frontmatter_stringz=TestExtractTriggers.test_returns_list_from_frontmatter_string   sx    #!"d+#$v$$$$v$$$$$$v$$$v$$$$$$$$$$r&   c                 D   i }d}t        ||      }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}}y
)u(   본문에서 'trigger' 포함 줄 추출u.   ## Trigger
- Use when deploying

다른 내용r   )>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)slenr|   )r   r   r>   r.   zassert %(py8)srU   N)
r   r   r   r4   r   r   r   r   r   r   )	r    r   r   r|   rD   r6   rY   r]   @py_format9s	            r$   $test_extracts_from_body_trigger_linez8TestExtractTriggers.test_extracts_from_body_trigger_line   s    B!"d+6{Q{Q{Qss66{Qr&   c                    i }d}t        ||      }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"   본문의 'Use when' 패턴 추출u)   Use when you need to ship code
다른 줄c              3   $   K   | ]  }d |v  
 yw)rW   Nrl   ).0ts     r$   	<genexpr>zGTestExtractTriggers.test_extracts_use_when_from_body.<locals>.<genexpr>   s     /16Q;/s   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}any)r   r   r   N)	r   r   r   r   r   r   r   r   r   )r    r   r   r|   r5   r"   r#   s          r$    test_extracts_use_when_from_bodyz4TestExtractTriggers.test_extracts_use_when_from_body   sw    ;!"d+///s/////////s///s//////////////r&   c                 d   i }d}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)u0   frontmatter도 본문도 없으면 빈 리스트u(   그냥 평범한 본문
트리거 없음r   r   r|   rS   r   N)
r   r   rS   r   r   r   r   r   r   r   )r    r   r   r|   r"   r#   s         r$   $test_empty_fm_and_body_returns_emptyz8TestExtractTriggers.test_empty_fm_and_body_returns_empty   s    :!"d+&$''''''''z'''z''''''&'''&''''''$'''$''''''''''r&   c                 x   ddgi}d}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/   frontmatter triggers가 있으면 본문 무시rR   z
fm-triggerzUse when something happensr*   rI   r|   rJ   r?   r@   Nr   r}   s           r$   )test_frontmatter_takes_priority_over_bodyz=TestExtractTriggers.test_frontmatter_takes_priority_over_body   sz    <.)+!"d+&'v''''v''''''v'''v''''''''''r&   rf   )
rh   ri   rj   rk   r   r   r   r   r   r   rl   r&   r$   r   r      s#    ;7%0((r&   r   c                   8    e Zd ZdZddZddZddZddZddZy)	TestExtractRequiresu+   extract_requires(fm) -> list[str] 테스트Nc                 v   dddgi}t        |      }d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   requires 배열 반환requireszdep-azdep-br*   rI   r|   rJ   r?   r@   N	r   r   r4   r   r   r   r   r   r   r    r   r|   rD   r5   rE   rF   s          r$   %test_returns_list_from_requires_arrayz9TestExtractRequires.test_returns_list_from_requires_array   s|    7G,-!"%!7++v+++++v+++++++v+++v+++++++++++r&   c                 p   ddi}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.   requires 문자열 → 단일 항목 리스트r   z
single-depr*   rI   r|   rJ   r?   r@   Nr   r   s          r$   test_returns_list_from_stringz1TestExtractRequires.test_returns_list_from_string   sq    ,'!"%&'v''''v''''''v'''v''''''''''r&   c                 r   ddgi}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   prerequisites 키도 지원prerequisiteszpre-ar*   rI   r|   rJ   r?   r@   Nr   r   s          r$   !test_prerequisites_key_also_worksz5TestExtractRequires.test_prerequisites_key_also_works   ss    y)!"%!"v""""v""""""v"""v""""""""""r&   c                 j   i }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)u    requires 없으면 빈 리스트r*   rI   r|   rJ   r?   r@   Nr   r   s          r$    test_empty_fm_returns_empty_listz4TestExtractRequires.test_empty_fm_returns_empty_list   si    !"%v|vvvr&   c                 n   ddi}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)	u(   requires 값이 None이면 빈 리스트r   Nr*   rI   r|   rJ   r?   r@   r   r   s          r$   "test_none_value_returns_empty_listz6TestExtractRequires.test_none_value_returns_empty_list   sn    $!"%v|vvvr&   rf   )	rh   ri   rj   rk   r   r   r   r   r   rl   r&   r$   r   r      s    5,(#r&   r   c                   0    e Zd ZdZddZddZddZddZy)TestExtractCategoryu7   extract_category(fm, body, skill_name) -> str 테스트Nc           	         ddi}d}d}t        |||      }d}||k(  }|sKt        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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"   frontmatter category 우선 반환categorydevrO   r)   r*   zB%(py6)s
{%(py6)s = %(py0)s(%(py1)s, %(py2)s, %(py4)s)
} == %(py9)sr   r   r   r   r   r   r   r.   r/   r0   r1   N	r   r   r4   r   r   r   r   r   r   	r    r   r   r"   r6   r7   r8   r9   r:   s	            r$   !test_returns_frontmatter_categoryz5TestExtractCategory.test_returns_frontmatter_category   s    % *4>D*5>>5>>>>5>>>>>>>>>>>>>>>>>>>>>>>>D>>>D>>>*>>>5>>>>>>>>>>r&   c           	         i }d}d}t        |||      }d}||k(  }|sKt        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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'   본문의 'category: xxx' 패턴 추출u   category: testing
다른 내용r)   testingr*   r   r   r   r   r   r0   r1   Nr   r   s	            r$   test_extracts_from_body_patternz3TestExtractCategory.test_extracts_from_body_pattern   s    1*4BD*5BB5BBBB5BBBBBBBBBBBBBBBBBBBBBBBBDBBBDBBB*BBB5BBBBBBBBBBr&   c           	         i }d}d}t        |||      }d}||k(  }|sKt        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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#   category 없으면 'general' 반환u   그냥 본문r)   generalr*   r   r   r   r   r   r0   r1   Nr   r   s	            r$   test_returns_general_as_defaultz3TestExtractCategory.test_returns_general_as_default   s    *4BD*5BB5BBBB5BBBBBBBBBBBBBBBBBBBBBBBBDBBBDBBB*BBB5BBBBBBBBBBr&   c                 r   i }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'   본문 category 값의 따옴표 제거zcategory: "quoted-cat"r)   z
quoted-catr*   rI   r|   rJ   r?   r@   Nr   r}   s           r$   %test_strips_quotes_from_body_categoryz9TestExtractCategory.test_strips_quotes_from_body_category   ss    '!"dJ7%%v%%%%v%%%%%%v%%%v%%%%%%%%%%r&   rf   )rh   ri   rj   rk   r   r   r   r   rl   r&   r$   r   r      s    A?CC&r&   r   )rk   builtinsr   _pytest.assertion.rewrite	assertionrewriter   syspathlibr   pytestpathinsertr   __file__parentutils.skill_parserr   r   r   r   r   r
   rn   r   r   r   rl   r&   r$   <module>r      s   
  
   3tH~,,33::; < :" :"D -  -P+( +(f N& &r&   