
    Vi                        d Z ddlZddlZddlZddlZddlmZ ddlZdZ	ej                  j                  dej                  j                  e	d            Zej                  j                  e      Zeej"                  d<   ej$                  j'                  e       ej(                  Zdedefd	Z G d
 d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zy)u   
tests/dev7/test_meta_task_validator.py

dispatch.py의 _parse_task_metadata() 검증 (task-2374 옵션 D)

카마소츠(개발7팀 테스터) 작성
    N)patchz-/home/jay/workspace/.worktrees/task-2374-dev7dispatch_wtzdispatch.pytextreturnc                     t        |       S )N_parse_task_metadata)r   s    T/home/jay/workspace/.worktrees/task-2374-dev7/tests/dev7/test_meta_task_validator.py_parser   (   s    %%    c                       e Zd Zd Zd Zy)TestParseLegacyTaskNoMetadatac                 T    t        d      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	u&   빈 문자열 → 기본값 code/True. kindcodemerge_requiredTsourcedefaultNr   selfresults     r
   !test_empty_string_returns_defaultz?TestParseLegacyTaskNoMetadata.test_empty_string_returns_default1   sD    f~'''&'4///h9,,,r   c                 T    t        d      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	u4   frontmatter도 fenced도 없으면 기본 code/True.u7   단순 작업 설명입니다.
버그 수정 합니다.r   r   r   Tr   r   Nr   r   s     r
   .test_plain_text_no_frontmatter_returns_defaultzLTestParseLegacyTaskNoMetadata.test_plain_text_no_frontmatter_returns_default8   sF    RSf~'''&'4///h9,,,r   N)__name__
__module____qualname__r   r    r   r
   r   r   0   s    --r   r   c                       e Zd Zd Zd Zy)TestParseFrontmatterKindMetac                 X    d}t        |      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	u@   frontmatter kind: meta → meta + merge_required=False (자동).u!   ---
kind: meta
---

작업 설명r   metar   Fr   frontmatterNr   r   r   r   s      r
   1test_kind_meta_sets_meta_and_merge_required_falsezNTestParseFrontmatterKindMeta.test_kind_meta_sets_meta_and_merge_required_falseA   sI    6f~'''&'5000h=000r   c                 2    d}t        |      }|d   dk(  sJ y)u1   frontmatter 공백 포함 → meta 정상 파싱.u   ---
kind: meta

---

작업r   r$   Nr   r&   s      r
   test_kind_meta_with_whitespacez;TestParseFrontmatterKindMeta.test_kind_meta_with_whitespaceI   s"    1f~'''r   N)r   r   r   r'   r)   r    r   r
   r"   r"   @   s    1(r   r"   c                       e Zd Zd Zd Zy)$TestParseFrontmatterKindCodeExplicitc                 X    d}t        |      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	u;   frontmatter kind: code, merge_required: true → code/True.u6   ---
kind: code
merge_required: true
---

작업 설명r   r   r   Tr   r%   Nr   r&   s      r
   "test_kind_code_merge_required_truezGTestParseFrontmatterKindCodeExplicit.test_kind_code_merge_required_trueQ   sI    Lf~'''&'4///h=000r   c                 X    d}t        |      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	u=   frontmatter kind: code, merge_required: false → code/False.u0   ---
kind: code
merge_required: false
---

작업r   r   r   Fr   r%   Nr   r&   s      r
   #test_kind_code_merge_required_falsezHTestParseFrontmatterKindCodeExplicit.test_kind_code_merge_required_falseY   sI    Ff~'''&'5000h=000r   N)r   r   r   r-   r/   r    r   r
   r+   r+   P   s    11r   r+   c                       e Zd Zd Zy)1TestParseFrontmatterMetaWithExplicitMergeRequiredc                 X    d}t        |      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	uL   kind: meta + merge_required: true (명시) → meta but merge_required=True.u/   ---
kind: meta
merge_required: true
---

작업r   r$   r   Tr   r%   Nr   r&   s      r
   +test_kind_meta_merge_required_true_explicitz]TestParseFrontmatterMetaWithExplicitMergeRequired.test_kind_meta_merge_required_true_explicitc   sI    Ef~'''&'4///h=000r   N)r   r   r   r3   r    r   r
   r1   r1   b   s    1r   r1   c                       e Zd Zd Zd Zd Zy)TestParseFencedYamlBlockc                 X    d}t        |      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	uA   fenced ```yaml 안에 kind: meta → meta + merge_required=False.u4   작업 설명

```yaml
kind: meta
```

추가 내용r   r$   r   Fr   fencedNr   r&   s      r
   test_fenced_yaml_kind_metaz3TestParseFencedYamlBlock.test_fenced_yaml_kind_metam   sI    Kf~'''&'5000h8+++r   c                 X    d}t        |      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	u>   fenced yaml kind: code + merge_required: false → code/False.z,```yaml
kind: code
merge_required: false
```r   r   r   Fr   r7   Nr   r&   s      r
   .test_fenced_yaml_kind_code_with_merge_requiredzGTestParseFencedYamlBlock.test_fenced_yaml_kind_code_with_merge_requiredu   sI    @f~'''&'5000h8+++r   c                 F    d}t        |      }|d   dk(  sJ |d   dk(  sJ y)u;   frontmatter와 fenced 둘 다 있으면 frontmatter 우선.z*---
kind: code
---

```yaml
kind: meta
```r   r   r   r%   Nr   r&   s      r
   +test_frontmatter_takes_priority_over_fencedzDTestParseFencedYamlBlock.test_frontmatter_takes_priority_over_fenced}   s5    Af~'''h=000r   N)r   r   r   r8   r:   r<   r    r   r
   r5   r5   l   s    ,,1r   r5   c                       e Zd Zd Zd Zy)$TestParseInvalidKindFallsBackDefaultc                 2    d}t        |      }|d   dk(  sJ y)u'   kind: invalid_value → code (default).u#   ---
kind: invalid_value
---

작업r   r   Nr   r&   s      r
   $test_invalid_kind_falls_back_to_codezITestParseInvalidKindFallsBackDefault.test_invalid_kind_falls_back_to_code   s"    8f~'''r   c                 2    d}t        |      }|d   dk(  sJ y)uA   유효하지 않은 kind는 merge_required=True 기본값 유지.z+---
kind: unknown
merge_required: false
---r   r   Nr   r&   s      r
   2test_unknown_kind_preserves_default_merge_requiredzWTestParseInvalidKindFallsBackDefault.test_unknown_kind_preserves_default_merge_required   s"    ?f~'''r   N)r   r   r   r@   rB   r    r   r
   r>   r>      s    ((r   r>   c                       e Zd Zd Zd Zy)%TestParseYamlUnavailableRegexFallbackc                     ddl }|j                  fd}|j                  |d|       d}t        |      }|d   dk(  sJ |d   d	k(  sJ y)
uK   yaml import 실패 시 정규식 fallback으로 kind/merge_required 파싱.r   Nc                 <    | dk(  rt        d       | g|i |S Nyamlzyaml not availableImportErrornameargskwargsreal_imports      r
   mock_importzbTestParseYamlUnavailableRegexFallback.test_yaml_import_failure_regex_fallback.<locals>.mock_import   +    v~!"677t5d5f55r   
__import__u0   ---
kind: meta
merge_required: false
---

작업r   r$   r   r%   builtinsrR   setattrr   r   monkeypatchrT   rP   r   r   rO   s         @r
   'test_yaml_import_failure_regex_fallbackzMTestParseYamlUnavailableRegexFallback.test_yaml_import_failure_regex_fallback   s]    ))	6
 	HlK@Ff~'''h=000r   c                     ddl }|j                  fd}|j                  |d|       d}t        |      }|d   dk(  sJ |d   d	u sJ y)
uC   yaml 없을 때 kind: code + merge_required: true 정규식 파싱.r   Nc                 <    | dk(  rt        d       | g|i |S rG   rI   rK   s      r
   rP   zcTestParseYamlUnavailableRegexFallback.test_yaml_import_failure_code_kind_regex.<locals>.mock_import   rQ   r   rR   u/   ---
kind: code
merge_required: true
---

작업r   r   r   TrS   rV   s         @r
   (test_yaml_import_failure_code_kind_regexzNTestParseYamlUnavailableRegexFallback.test_yaml_import_failure_code_kind_regex   s^    ))	6
 	HlK@Ef~'''&'4///r   N)r   r   r   rX   r[   r    r   r
   rD   rD      s    1$0r   rD   c                       e Zd Zd Zd Zy)TestParseEdgeCasesc                 @    t        d      }|d   dk(  sJ |d   du sJ y)u!   None 입력 시 기본값 반환.r   r   r   r   TNr   r   s     r
   test_none_inputz"TestParseEdgeCases.test_none_input   s4     &b)f~'''&'4///r   c                 X    d}t        |      }|d   dk(  sJ |d   du sJ |d   dk(  sJ y)	uB   frontmatter에 merge_required만 있고 kind 없음 → kind=code.u%   ---
merge_required: false
---

작업r   r   r   Fr   r%   Nr   r&   s      r
   ,test_frontmatter_only_merge_required_no_kindz?TestParseEdgeCases.test_frontmatter_only_merge_required_no_kind   sI    :f~'''&'5000h=000r   N)r   r   r   r_   ra   r    r   r
   r]   r]      s    01r   r]   ) __doc__importlib.util	importlibossystypesunittest.mockr   pytestWORKTREEutilspec_from_file_locationpathjoin_dp_specmodule_from_spec_dispatch_modmodulesloaderexec_moduler	   strdictr   r   r"   r+   r1   r5   r>   rD   r]   r    r   r
   <module>rw      s     	 
    ; >>11GGLL=) //9*M    M *$99 & & &- - ( ( 1 1$1 11 12( ( "0 "0J1 1r   