
    (Ti                    T   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mZ ddlmZmZ  ee      j#                         j$                  d   Zedz  ZeefD ]9  Z ee      e
j.                  vse
j.                  j1                  d ee             ; ddlmZ ddd	Z G d
 d      Zy)u   task-2478: pr-open 경로 blast_radius list 입력 회귀 테스트 — 모리건.

worktree_manager._get_blast_radius_summary가 ast_dependency_map의 list 출력을
받았을 때 'list' object has no attribute 'get' 오류로 죽지 않는지 검증.
    )annotationsN)Path)	MagicMockpatch   scripts)_get_blast_radius_summaryc                D    t               }| |_        ||_        ||_        |S )N)r   
returncodestdoutstderr)r   r   r   ms       F/home/jay/workspace/tests/scripts/test_taskctl_pr_open_blast_radius.py
_make_procr      s#    AALAHAHH    c                  (    e Zd ZdZd Zd Zd Zd Zy)TestPrOpenBlastRadiusListInputu<   ast_dependency_map list 출력 → AttributeError 무발생.c                   t        dd      }ddgdgg g ddd	d
dgdgg g ddd	g}t        dt        j                  |            }t        d||g      5  t	        ddd      }d d d        j
                  }d} ||      }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}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}	}
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 # 1 sw Y   ^xY w)Nr   zsrc/foo.py
src/bar.py
r   r   
src/foo.py
src/baz.pytests/test_foo.pyr   direct_importers
test_filescallerstransitive_dependentstotal_affectedchanged_fileblast_radiusz
src/bar.pyz
src/qux.pyztests/test_bar.pysubprocess.runside_effect
/fake/pathfeaturemain## Blast RadiusLassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.startswith
}(%(py4)s)
}resultpy0py2py4py6inz%(py1)s in %(py3)spy1py3assert %(py5)spy5r   jsondumpsr   r	   
startswith@py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanation_call_reprcompare)selfgit_okast_listast_okr*   @py_assert1@py_assert3@py_assert5@py_format7@py_assert0@py_assert2@py_format4@py_format6s                r   .test_list_input_does_not_raise_attribute_errorzMTestPrOpenBlastRadiusListInput.test_list_input_does_not_raise_attribute_error"   s   q1KL)%1N23a< 
 *%1N23a< 
 qH1EF#&&1AB 	P.|YOF	P   3!23 !233333333v333v333 333!23333333333%|v%%%%|v%%%|%%%%%%v%%%v%%%%%%%%|v%%%%|v%%%|%%%%%%v%%%v%%%%%%%","f,,,,"f,,,",,,,,,f,,,f,,,,,,,","f,,,,"f,,,",,,,,,f,,,f,,,,,,,	P 	Ps   OOc                   t        dd      }ddgdgg g ddd	}t        dt        j                  |            }t        d
||g      5  t	        ddd      }ddd       j
                  }d} ||      }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            dx}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# 1 sw Y   oxY w)uG   단일 파일 ast 출력(dict + blast_radius 중첩) — 정상 처리.r   src/foo.py
r   r   r   r      r   r   r"   r#   r%   r&   r'   Nr(   r)   r*   r+   r0   r2   r3   r6   r7   r8   )rD   rE   ast_dictrG   r*   rH   rI   rJ   rK   rL   rM   rN   rO   s                r   )test_single_dict_with_blast_radius_nestedzHTestPrOpenBlastRadiusListInput.test_single_dict_with_blast_radius_nested:   sJ   q@$0!-?R>SB!C
  qH1EF#&&1AB 	P.|YOF	P  3!23 !233333333v333v333 333!23333333333%|v%%%%|v%%%|%%%%%%v%%%v%%%%%%%	P 	Ps   
GGc                   t        dd      }dgdgd}t        dt        j                  |            }t        d||g      5  t	        d	d
d      }ddd       j
                  }d} ||      }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            dx}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# 1 sw Y   oxY w)uI   legacy 평탄 dict(기존 test_ast_integration mock) — backward compat.r   rR   r   r   r   )r   r   r"   r#   r%   r&   r'   Nr(   r)   r*   r+   r0   r2   r3   r6   r7   r8   )rD   rE   
ast_legacyrG   r*   rH   rI   rJ   rK   rL   rM   rN   rO   s                r   %test_legacy_flat_dict_backward_compatzDTestPrOpenBlastRadiusListInput.test_legacy_flat_dict_backward_compatG   s6   q@+7.I\H]^
qJ1GH#&&1AB 	P.|YOF	P  3!23 !233333333v333v333 333!23333333333%|v%%%%|v%%%|%%%%%%v%%%v%%%%%%%	P 	Ps   F??G	c                   t        dd      }t        dt        j                  g             }t        d||g      5  t	        ddd      }d	d	d	       j
                  }d
} ||      }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d	x}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	# 1 sw Y   oxY w)u8   빈 list → 빈 importers/tests로 마크다운 반환.r   rR   r   r"   r#   r%   r&   r'   Nr(   r)   r*   r+   u   없음r0   r2   r3   r6   r7   r8   )rD   rE   rG   r*   rH   rI   rJ   rK   rL   rM   rN   rO   s               r   %test_empty_list_returns_empty_summaryzDTestPrOpenBlastRadiusListInput.test_empty_list_returns_empty_summaryQ   s%   q@qB@#&&1AB 	P.|YOF	P  3!23 !233333333v333v333 333!23333333333!x6!!!!x6!!!x!!!!!!6!!!6!!!!!!!	P 	Ps   F88GN)__name__
__module____qualname____doc__rP   rU   rX   rZ    r   r   r   r      s    F-0&&"r   r   )r    r`   )r   intr   strr   rb   returnr   )r^   
__future__r   builtinsr<   _pytest.assertion.rewrite	assertionrewriter>   r9   syspathlibr   unittest.mockr   r   __file__resolveparents_WS_ROOT_SCRIPTSprb   pathinsertworktree_managerr	   r   r   r_   r   r   <module>ru      s    #    
  *>!!#++A.i
H	 #A
1vSXX3q6"# 79" 9"r   