o
    JAfþ?  ã                   @   sh   d Z ddlmZ ddlmZ ze W n ey   dd„ ZY nw G dd„ dejƒZG d	d
„ d
ejƒZ	dS )a  Unit tests for pytree.py.

NOTE: Please *don't* add doc strings to individual test methods!
In verbose mode, printing of the module, class and method name is much
more helpful than printing of (the first line of) the docstring,
especially when debugging a test.
é   )Úsupporté    )Úpytreec                 C   s   t | ƒ}| ¡  |S ©N)ÚlistÚsort)ZlstÚl© r	   ú0/usr/lib/python3.10/lib2to3/tests/test_pytree.pyÚsorted   s   r   c                   @   s  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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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBS )CÚ	TestNodesz(Unit tests for nodes (Base, Leaf, Node).c                 C   s   	 |   ttj¡ d S r   )ÚassertRaisesÚAssertionErrorr   ZBase)Úselfr	   r	   r
   Útest_instantiate_base   s   zTestNodes.test_instantiate_basec                 C   s,   t  dd¡}|  |jd¡ |  |jd¡ d S )Néd   Úfoo)r   ÚLeafÚassertEqualÚtypeÚvalue©r   Úl1r	   r	   r
   Ú	test_leaf"   s   zTestNodes.test_leafc                 C   s    t  dd¡}|  t|ƒd¡ d S )Nr   r   zLeaf(100, 'foo'))r   r   r   Úreprr   r	   r	   r
   Útest_leaf_repr'   s   zTestNodes.test_leaf_reprc                 C   s@   t  dd¡}|  t|ƒd¡ t jdddd}|  t|ƒd¡ d S )Nr   r   )ú )é
   r   ©Úcontextz foo)r   r   r   Ústr)r   r   Úl2r	   r	   r
   Útest_leaf_str+   ó   zTestNodes.test_leaf_strc                 C   s&   t  dd¡}d|_|  t|ƒd¡ d S )Né   é   Zfoo_Zfoo_5)r   r   Úprefixr   r    r   r	   r	   r
   Útest_leaf_str_numeric_value1   s   z%TestNodes.test_leaf_str_numeric_valuec                 C   s\   t  dd¡}t jdddd}|  ||¡ t  dd¡}t  dd¡}|  ||¡ |  ||¡ d S )Nr   r   ©r   )r   r   r   ée   Úbar)r   r   r   ÚassertNotEqual)r   r   r!   Úl3Úl4r	   r	   r
   Útest_leaf_equality8   s   zTestNodes.test_leaf_equalityc                 C   sJ   t  dd¡}|  |jd¡ |  |j¡ d|_|  |jd¡ |  |j¡ d S )Nr   r   Ú z  ##

)r   r   r   r&   ÚassertFalseÚwas_changedÚ
assertTruer   r	   r	   r
   Útest_leaf_prefixA   s   zTestNodes.test_leaf_prefixc                 C   sL   t  dd¡}t  dd¡}t  d||g¡}|  |jd¡ |  |j||g¡ d S )Nr   r   éÈ   r*   éè  )r   r   ÚNoder   r   Úchildren©r   r   r!   Ún1r	   r	   r
   Ú	test_nodeI   s
   zTestNodes.test_nodec                 C   sP   t  dd¡}t jdddd}t  d||g¡}|  t|ƒdt|ƒt|ƒf ¡ d S )Nr   r   r*   r(   r   r5   zNode(1000, [%s, %s]))r   r   r6   r   r   r8   r	   r	   r
   Útest_node_reprP   s   
ÿzTestNodes.test_node_reprc                 C   s@   t  dd¡}t jdddd}t  d||g¡}|  t|ƒd¡ d S )Nr   r   r*   r(   r   r5   zfoo bar)r   r   r6   r   r    r8   r	   r	   r
   Útest_node_strW   r#   zTestNodes.test_node_strc                 C   s\   t  dd¡}|  |jd¡ t  d|g¡}|  |jd¡ d|_|  |jd¡ |  |jd¡ d S )Nr   r   r/   r5   r   )r   r   r   r&   r6   )r   r   r9   r	   r	   r
   Útest_node_prefix]   s   zTestNodes.test_node_prefixc                 C   s¸   t jdddd}t jdddd}t  d||g¡}|  | ¡ |j¡ |  | ¡ d¡ |  | ¡ d¡ t jddd	d}t  d||g¡}|  | ¡ |j¡ |  | ¡ d¡ |  | ¡ d¡ d S )
Nr   r   Úa©r&   r*   Úbr5   r/   Úc)r   r   r6   r   Z
get_suffixr&   )r   r   r!   r9   r,   Ún2r	   r	   r
   Útest_get_suffixf   s   zTestNodes.test_get_suffixc                 C   sD   t  dd¡}t jdg dd}|  ||¡ t  dd¡}|  ||¡ d S )Nr5   r	   r(   r   ié  )r   r6   r   r+   )r   r9   rB   Ún3r	   r	   r
   Útest_node_equalityv   s
   zTestNodes.test_node_equalityc                 C   sj   t  dd¡}t  dd¡}t  d|g¡}t  d|g¡}|  ||¡ t  dd¡}t  d|g¡}|  ||¡ d S )Nr   r   r5   r*   )r   r   r6   r   r+   )r   r   r!   r9   rB   r,   rD   r	   r	   r
   Útest_node_recursive_equality}   s   z&TestNodes.test_node_recursive_equalityc                 C   s¬   t  dd¡}t  dd¡}t  dd¡}t  d|||g¡}|  |j|||g¡ |  |jt¡ |  |j¡ t  dd¡}| 	|¡ |  |j|||g¡ |  |jt¡ |  
|j¡ d S )Nr   r   ú+r*   r5   ú-)r   r   r6   r   r7   ÚassertIsInstancer   r0   r1   Úreplacer2   )r   r   r!   r,   r9   Zl2newr	   r	   r
   Útest_replace‡   s   
zTestNodes.test_replacec                 C   sv   t  dd¡}t  dd¡}t  dd¡}t  d|||g¡}| t  dd¡t  dd¡g¡ |  t|ƒd¡ |  |jt¡ d S )Nr   r   rG   r*   r5   Ú*zfoo**bar)	r   r   r6   rJ   r   r    rI   r7   r   )r   r   r!   r,   r9   r	   r	   r
   Útest_replace_with_list•   s   z TestNodes.test_replace_with_listc                 C   sp   t  dd¡}t  dd¡}t  dd¡}t  d||g¡}t  d|g¡}t  d||g¡}|  t| ¡ ƒ|||g¡ d S ©Nr   r   r*   Zfooeyr5   )r   r   r6   r   r   Úleaves)r   r   r!   r,   rB   rD   r9   r	   r	   r
   Útest_leavesŸ   s   zTestNodes.test_leavesc                 C   sx   t  dd¡}t  dd¡}t  d||g¡}t  dg ¡}t  d||g¡}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ d S )Nr   r   r*   r5   r$   r   r   )r   r   r6   r   Údepth)r   r   r!   rB   rD   r9   r	   r	   r
   Ú
test_depth©   s   zTestNodes.test_depthc                 C   sf   t  dd¡}t  dd¡}t  dd¡}t  d||g¡}t  d||g¡}|  t| ¡ ƒ|||||g¡ d S rN   )r   r   r6   r   r   Z
post_order©r   r   r!   r,   Úc1r9   r	   r	   r
   Útest_post_order´   ó   "zTestNodes.test_post_orderc                 C   sf   t  dd¡}t  dd¡}t  dd¡}t  d||g¡}t  d||g¡}|  t| ¡ ƒ|||||g¡ d S rN   )r   r   r6   r   r   Z	pre_orderrS   r	   r	   r
   Útest_pre_order¼   rV   zTestNodes.test_pre_orderc                 C   sþ   t  dd¡}|  |j¡ | ¡  |  |j¡ t  dd¡}t  d|g¡}|  |j¡ | ¡  |  |j¡ t  dd¡}t  dd¡}t  dd¡}t  d|||g¡}t  d|g¡}|  |j¡ |  |j¡ |  |j¡ | ¡  |  |j¡ |  |j¡ |  |j¡ d S )Nr   Úfr5   r   rG   r*   )r   r   r0   r1   Úchangedr2   r6   )r   r   r9   r!   r,   rB   r	   r	   r
   Útest_changedÄ   s*   zTestNodes.test_changedc                 C   s@   dD ]}t jdd|d}|  t|ƒ|d ¡ |  |j|¡ qd S )N©Zxyz_r/   r   r   r?   )r   r   r2   r    r   r&   )r   r&   r   r	   r	   r
   Útest_leaf_constructor_prefixÞ   s
   ýz&TestNodes.test_leaf_constructor_prefixc                 C   s|   dD ]9}t  dd¡}t jdddd}t jd||g|d}|  t|ƒ|d ¡ |  |j|¡ |  |j|¡ |  |jd¡ qd S )	Nr[   r   r   r   Ú_r?   r5   Zself_foo)r   r   r6   r2   r    r   r&   )r   r&   r   r!   r9   r	   r	   r
   Útest_node_constructor_prefixä   s   ùz&TestNodes.test_node_constructor_prefixc                 C   s
  t  dd¡}t  dd¡}t  d||g¡}t  d|g¡}|  | ¡ d¡ |  |jg ¡ |  |j|¡ |  |jd ¡ |  |jd ¡ |  |j¡ |  	|j¡ |  | ¡ d¡ |  | ¡ d¡ |  |jg ¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  	|j¡ |  	|j¡ d S )Nr   r   r5   r   r   )
r   r   r6   r   Úremover7   Úparentr0   r1   r2   )r   r   r!   r9   rB   r	   r	   r
   Útest_removeî   s&   zTestNodes.test_removec                 C   sH   t  dg ¡}| ¡  |  |jd ¡ t  dd¡}| ¡  |  |jd ¡ d S )Nr5   r   r   )r   r6   r_   r   r`   r   )r   r9   r   r	   r	   r
   Útest_remove_parentless  s   z TestNodes.test_remove_parentlessc                 C   sÚ   t  dd¡}t  d|g¡}t  dd¡}| d|¡ |  |jd ¡ |  |j|¡ |  |j|g¡ t  d|g¡}| d|¡ |  |jd ¡ |  |j|¡ |  |jd ¡ |  |j|g¡ |  t|jd|¡ |  t	|jdt
¡ d S )Nr   r   r5   r*   r   é   )r   r   r6   Z	set_childr   r`   r7   r   Ú
IndexErrorÚ	Exceptionr   )r   r   r9   r!   rB   r	   r	   r
   Útest_node_set_child  s   zTestNodes.test_node_set_childc                 C   s”   t  dd¡}t  d|g¡}t  dd¡}| d|¡ |  |j|¡ |  |j||g¡ t  dd¡}| d|¡ |  |j|||g¡ |  t|jdt	¡ d S )Nr   r   r5   r*   r   Úabcr$   )
r   r   r6   Zinsert_childr   r`   r7   r   re   r   )r   r   r9   r!   r,   r	   r	   r
   Útest_node_insert_child#  s   z TestNodes.test_node_insert_childc                 C   sŠ   t  dg ¡}t  dd¡}| |¡ |  |j|¡ |  |j|g¡ t  dd¡}| |¡ |  |j|¡ |  |j||g¡ |  t|jt	¡ d S )Nr5   r   r   r*   )
r   r6   r   Zappend_childr   r`   r7   r   re   r   )r   r9   r   r!   r	   r	   r
   Útest_node_append_child3  s   

z TestNodes.test_node_append_childc                 C   sV   t  dg ¡}t  dg ¡}t  d||g¡}|  |j|¡ |  |jd ¡ |  |jd ¡ d S ©Nr5   )r   r6   ÚassertIsÚnext_siblingr   ©r   r9   rB   Úp1r	   r	   r
   Útest_node_next_siblingC  ó   z TestNodes.test_node_next_siblingc                 C   sV   t  dd¡}t  dd¡}t  d||g¡}|  |j|¡ |  |jd ¡ |  |jd ¡ d S ©Nr   r>   r@   r5   )r   r   r6   rk   rl   r   ©r   r   r!   rn   r	   r	   r
   Útest_leaf_next_siblingL  rp   z TestNodes.test_leaf_next_siblingc                 C   sV   t  dg ¡}t  dg ¡}t  d||g¡}|  |j|¡ |  |jd ¡ |  |jd ¡ d S rj   )r   r6   rk   Úprev_siblingr   rm   r	   r	   r
   Útest_node_prev_siblingU  rp   z TestNodes.test_node_prev_siblingc                 C   sV   t  dd¡}t  dd¡}t  d||g¡}|  |j|¡ |  |jd ¡ |  |jd ¡ d S rq   )r   r   r6   rk   rt   r   rr   r	   r	   r
   Útest_leaf_prev_sibling^  rp   z TestNodes.test_leaf_prev_siblingN)$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r"   r'   r.   r3   r:   r;   r<   r=   rC   rE   rF   rK   rM   rP   rR   rU   rW   rZ   r\   r^   ra   rb   rf   rh   ri   ro   rs   ru   rv   r	   r	   r	   r
   r      sD    		



				r   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestPatternsz&Unit tests for tree matching patterns.c           
      C   sÎ  t  dd¡}t  dd¡}t  dd¡}t  d||g¡}t  d|g¡}t  d||g¡}t jdddd}i }|  |j||d¡ |  |i ¡ |  |j||d¡ |  |i ¡ |  |j||d¡ |  |i ¡ |  |j||d¡ |  |d|i¡ i }|  |j||d¡ |  |i ¡ t jd|gdd}	|  |	j||d¡ |  |i ¡ |  |	j||d¡ |  |i ¡ |  |	j||d¡ |  |||d	œ¡ i }|  |	j||d¡ |  |i ¡ |  |	j||d¡ |  |i ¡ d S )
Nr   r   r*   r5   Úpl©Úname)ÚresultsÚpn)r€   r|   )	r   r   r6   ÚLeafPatternr0   Úmatchr   r2   ÚNodePattern)
r   r   r!   r,   r9   rB   Úrootr|   Úrr€   r	   r	   r
   Útest_basic_patternsl  s>   z TestPatterns.test_basic_patternsc                 C   sŒ  t  dd¡}t  dd¡}t  dd¡}t  d||g¡}t  d|g¡}t  d||g¡}t jdddd}t jd|gdd}t j|g||ggdd}	i }
|  |	 |g|
¡¡ |  |
i ¡ |  |	 |g|
¡¡ |  |
i ¡ |  	|	 |g|
¡¡ |  t
|
 ¡ ƒg d	¢¡ |  |
d |¡ |  |
d |¡ |  |
d |g¡ |  |
|||gd	œ¡ i }
|  	|	 ||g|
¡¡ |  |
|||gd
œ¡ |  |
d |¡ i }
d S )Nr   r   r*   r5   r|   r}   r€   Úpw)r|   r€   r‡   )r|   r‡   )r   r   r6   r   rƒ   ÚWildcardPatternr0   Z	match_seqr   r2   r   Úkeysrk   )r   r   r!   r,   r9   rB   r„   r|   r€   r‡   r…   r	   r	   r
   Útest_wildcard  s2   zTestPatterns.test_wildcardc              	   C   s²  t  dd¡}t  dd¡}t  dd¡}t  dd¡}t  dd¡}t  dd¡}||||||g}t  d|¡}t  ddd	¡}	t  ddd
¡}
t  ddd¡}t  ddd¡}t  ddd¡}t  ddd¡}t j|	|
|g||g|	|
g||g||ggdddd}|  dd„ | |¡D ƒg d¢¡ t jd|gdd}tt  |g|g¡ƒ}|  t	|ƒd¡ |d \}}|  |d¡ |  t
|d ƒd¡ |  |d ||||||g¡ dD ]}|  |d|  t  d|¡¡ qÆd S )Nr   r>   r@   rA   ÚdÚerX   r5   ÚpaÚpbÚpcÚpdÚpeÚpfrc   r‡   )ÚminÚmaxr~   c                 S   s   g | ]}|d  ‘qS )r   r	   )Ú.0Úxr	   r	   r
   Ú
<listcomp>Á  s    z6TestPatterns.test_generate_matches.<locals>.<listcomp>)é   r%   r$   rc   é   Úpr)r   Zcontentr~   r   ZabcdefÚp)r   r   r6   r   rˆ   r   Zgenerate_matchesrƒ   r   Úlenr    )r   ZlaZlbZlcZldÚleZlfrO   r„   r   rŽ   r   r   r‘   r’   r‡   rš   ÚmatchesrA   r…   r	   r	   r
   Útest_generate_matches¯  s@   ÿþÿÿz"TestPatterns.test_generate_matchesc                 C   sˆ   t  dt  d¡t jddt  d¡f¡}t  dd¡}t  dd¡}t  dd	¡}t  d|||g¡}i }|  | ||¡¡ |  |d |g¡ d S )
NiK  é   Úargsr}   é   ú(r˜   r–   ú))	r   rƒ   r   rˆ   r   r6   r2   r‚   r   )r   Úpatternr   r!   r,   Znoder…   r	   r	   r
   Útest_has_key_exampleÍ  s   
þÿz!TestPatterns.test_has_key_exampleN)rw   rx   ry   rz   r†   rŠ   rŸ   r¦   r	   r	   r	   r
   r{   h  s    $r{   N)
rz   r/   r   Zlib2to3r   r   Ú	NameErrorZTestCaser   r{   r	   r	   r	   r
   Ú<module>   s   	ÿ  Q