
    i                        d Z ddlmZ ddlZddlmZ  ee      j                         j                  d   Z	 e
e	      ej                  vr"ej                  j                  d e
e	             ddlmZ  G d d      Zy)	uK   task-2478: blast_radius_parser 단위 테스트 — 카마소츠/모리건.    )annotationsN)Path   parse_blast_radiusc                  L    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestParseBlastRadiusu7   list/dict 양쪽 입력에 대한 parser 동작 검증.c                T    ddgdgdd}t        |      \  }}|dgk(  sJ |dgk(  sJ y)u2   단일 파일 출력 (dict + blast_radius 중첩).z
src/foo.py
src/baz.pytests/test_foo.pydirect_importers
test_fileschanged_fileblast_radiusNr   selfdataditfs       W/home/jay/workspace/.worktrees/task-2524-dev5/tests/scripts/test_blast_radius_parser.py&test_single_dict_with_blast_radius_keyz;TestParseBlastRadius.test_single_dict_with_blast_radius_key   sP     )%1N23
 $D)Bl^###)****    c                l    ddgdgddddgdgddg}t        |      \  }}|ddgk(  sJ |ddgk(  sJ y	)
uZ   다파일 출력 (list) — 모든 항목 집계, .get() 호출 시 AttributeError 없음.a.pyx.pyzt1.pyr   r   b.pyy.pyzt2.pyNr   r   s       r   $test_list_input_aggregates_all_itemsz9TestParseBlastRadius.test_list_input_aggregates_all_items   sg     $6(cjbk5lm#6(cjbk5lm
 $D)Bff%%%%gw''''r   c                d    dddgg didddgg dig}t        |      \  }}|g dk(  sJ |g k(  sJ y)u5   list 입력 시 중복 제거 + 입력 순서 유지.r   r   r   r   z.py)r   r   r"   Nr   r   s       r   test_list_dedupes_duplicatesz1TestParseBlastRadius.test_list_dedupes_duplicates)   s[     662BRTUV662BRTUV
 $D)B----Rxxr   c                N    dgdgd}t        |      \  }}|dgk(  sJ |dgk(  sJ y)u\   legacy 평탄 dict (테스트 mock 호환): {"direct_importers": [...], "test_files": [...]}r   r   r   Nr   r   s       r   test_legacy_flat_dict_schemaz1TestParseBlastRadius.test_legacy_flat_dict_schema3   sB    %1NCVBWX#D)Bl^###)****r   c                (    t        g       g g fk(  sJ y)u   빈 list → 빈 tuple.Nr   r   s    r   test_empty_listz$TestParseBlastRadius.test_empty_list:       !"%"b111r   c                (    t        i       g g fk(  sJ y)u   빈 dict → 빈 tuple.Nr   r'   s    r   test_empty_dictz$TestParseBlastRadius.test_empty_dict>   r)   r   c                L    ddgg d}t        |      \  }}|dgk(  sJ |g k(  sJ y)uX   blast_radius 값이 dict가 아닐 때(예: list/str) → legacy 평탄 schema fallback.unexpected_stringzfallback.py)r   r   r   Nr   r   s       r   $test_malformed_blast_radius_not_dictz9TestParseBlastRadius.test_malformed_blast_radius_not_dictB   s:     3-hjk#D)Bm_$$$Rxxr   c                X    ddgg didddddgg dig}t        |      \  }}|ddgk(  sJ y)u)   list 내 dict가 아닌 항목은 스킵.r   r   r   z
not a dict{   Nr   r   )r   r   r   _s       r   #test_non_dict_items_in_list_skippedz8TestParseBlastRadius.test_non_dict_items_in_list_skippedI   sU     6("MN6("MN
 #4(Aff%%%%r   c                J    ddddi}t        |      \  }}|g k(  sJ |g k(  sJ y)u;   direct_importers/test_files가 None이어도 안전 처리.r   Nr   r   r   s       r   test_none_values_safez*TestParseBlastRadius.test_none_values_safeU   s5    T NO#D)BRxxRxxr   c                J    ddddi}t        |      \  }}|g k(  sJ |g k(  sJ y)u8   direct_importers/test_files가 list가 아니면 무시.r   r   *   r   Nr   r   s       r   "test_non_list_inner_values_ignoredz7TestParseBlastRadius.test_non_list_inner_values_ignored\   s5    V2 NO#D)BRxxRxxr   N)__name__
__module____qualname____doc__r   r    r#   r%   r(   r+   r.   r2   r4   r7    r   r   r	   r	      s7    A+(+22
&r   r	   )r;   
__future__r   syspathlibr   __file__resolveparents_WS_ROOTstrpathinsertutils.blast_radius_parserr   r	   r<   r   r   <module>rH      sc    Q " 
 >!!#++A.x= HHOOAs8}% 8R Rr   