a
    =Â×_e›  ã                   @   s4  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZmZm	Z	 d dlm
Z
mZmZmZmZ d dlmZ d dlmZ d dlmZ G dd„ dejƒZG d	d
„ d
ejeƒZG dd„ dejeƒZG dd„ dejeƒZG dd„ dejeƒZG dd„ dejeƒZdd„ Zedkr0e ej ¡ e !¡  ej"dd dS )é    N)ÚGroupÚLeafÚTableÚArray)Ú	StringColÚIntColÚInt16ColÚFloatColÚ
Float32Col)Úcommon)Úunittest)ÚPyTablesTestCasec                   @   s.   e Zd ZeddZeƒ Zeƒ Ze	ƒ Z
eƒ ZdS )ÚRecordé   )ÚitemsizeN)Ú__name__Ú
__module__Ú__qualname__r   Úvar1r   Úvar2r   Úvar3r	   Úvar4r
   Úvar5© r   r   ú5lib/python3.9/site-packages/tables/tests/test_tree.pyr      s
   
r   c                       sl   e Zd ZdZdZdZdZ‡ f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‡  ZS )ÚTreeTestCaseÚwzThis is the table titleé
   é   c                    s$   t t| ƒ ¡  |  ¡  | j ¡  d S )N)Úsuperr   ÚsetUpÚpopulateFileÚh5fileÚclose©Úself©Ú	__class__r   r   r    !   s    zTreeTestCase.setUpc           
   	   C   s  | j j}d}tdƒD ]î}| j j|dt|ƒ t| jd | jd}|j}t| jƒD ]J}d| j|  |d< ||d< || |d< t	|ƒ|d	< t	|ƒ|d
< | 
¡  qL| ¡  dd„ | ¡ D ƒ}dd„ | ¡ D ƒ}| j  |d|d¡ | j  |d	|d¡ | j  |dt|ƒ ¡}	|	}qd S )Ni €  é   Útable)ÚtitleÚfiltersÚexpectedrowsz%04dr   r   r   r   r   c                 S   s   g | ]}|d  ‘qS )r   r   ©Ú.0Úxr   r   r   Ú
<listcomp>@   ó    z-TreeTestCase.populateFile.<locals>.<listcomp>c                 S   s   g | ]}|d  ‘qS )r   r   r-   r   r   r   r0   A   r1   Ú1Ú4Úgroup)r"   ÚrootÚrangeZcreate_tableÚstrr   r*   r,   ÚrowÚfloatÚappendÚflushZiterrowsÚcreate_arrayÚcreate_group)
r%   r4   ZmaxshortÚjr)   ÚdÚiZvar1ListZvar4ListÚgroup2r   r   r   r!   (   s.    ý
zTreeTestCase.populateFilec              
   C   s  t jr tddƒ td| jj ƒ t | jd¡| _g d¢}g }|D ]}| j 	|¡}| 
|j¡ q@|  ||¡ t jrxtdƒ g d¢}dd	g}g }|D ]@}|D ]6}z| j 	||¡}W n tyÀ   Y q˜0 | 
|j¡ q˜q|  |g d
¢¡ t jrðtdƒ g d¢}g }g }	|D ]l}z| jj	|dd}W n: tyV   t jrRt ¡ \}
}}tdƒ t|ƒ Y n0 | 
|j¡ |	 
|¡ q|  |g d¢¡ t jr’tdƒ dd	g}g }|	D ]@}|D ]4}z| j 	||d¡}W n   Y n0 | 
|j¡ qªq¢|  |g d
¢¡ t jrtdƒ dS )z3Checking the File.get_node() with string node namesÚ
ú<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zRunning %s.test00_getNode...Úr)ú/ú/table0ú/group0/var1ú/group0/group1/var4zget_node(pathname) test passed©rE   ú/group0ú/group0/group1ú/group0/group1/group2r   r   ©ú/var1ú/var4rG   ú/group0/var4ú/group0/group1/var1rH   z%get_node(groupname, name) test passed)rE   rJ   rK   rL   rF   r   ©Ú	classnamez*
Great!, the next LookupError was catched!z2get_node(groupname, classname='Group') test passedr   z:get_node(groupobject, name, classname='Array') test passedN)r   ÚverboseÚprintr'   r   ÚtablesÚ	open_fileÚh5fnamer"   Úget_noder:   Ú_v_pathnameÚassertEqualÚLookupErrorÚsysÚexc_info)r%   ÚnodelistÚ	nodenamesÚnodeÚobjectZ
nodegroupsZ	nodepathsr4   ÚnameZgroupobjectsÚtypeÚvalueÚ	tracebackZ
nodearraysr   r   r   Útest00_getNodeK   sv    
ÿÿÿzTreeTestCase.test00_getNodec                 C   sÆ   t jr tddƒ td| jj ƒ t | jd¡| _| j 	d¡}|  
|t¡ | j 	dd¡}|  
|t¡ | j 	| jjjd¡}|  
|t¡ | j 	d¡}|  
|t¡ |  
|t¡ | j 	dd	d
¡}|  
|t¡ dS )z+Checking the File.get_node() with instancesrB   rC   z!Running %s.test01_getNodeClass...rD   ú/group0/table1rJ   Útable1rG   Úgroup1r   N)r   rT   rU   r'   r   rV   rW   rX   r"   rY   ZassertIsInstancer   r5   Úgroup0r   r   r   )r%   r)   Úarrr4   r   r   r   Útest01_getNodeClassœ   s"    
ÿz TreeTestCase.test01_getNodeClassc           
   	   C   sL  t jr tddƒ td| jj ƒ t | jd¡| _|  	t
| jjdd¡ g d¢}g }g }|D ]B}z| j |¡}W n   Y qX0 | |¡ |D ]}| |j¡ qˆqX|  |g d¢¡ t jrºtd	ƒ g }|D ]8}z| j |¡}W n   Y qÂ0 |D ]}| |j¡ qèqÂ|  |g d
¢¡ t jrtdƒ g }|D ]l}z| j |d¡}W n: t
yt   t jrpt ¡ \}}}	tdƒ t|ƒ Y n0 |D ]}| |j¡ qzq$|  |g d¢¡ t jr²tdƒ g }|D ]l}z| j |d¡}W n: t
y
   t jrt ¡ \}}}	tdƒ t|ƒ Y n0 |D ]}| |j¡ qqº|  |ddg¡ t jrHtdƒ dS )z%Checking the File.list_nodes() methodrB   rC   zRunning %s.test02_listNodes...rD   rE   ÚNoSuchClass©rE   rJ   rh   rL   rN   ©rJ   rF   rN   rO   rK   rh   rG   rP   z list_nodes(pathname) test passed©rK   rh   rG   rP   rL   ú/group0/group1/table2rQ   rH   z#list_nodes(groupobject) test passedr   ú(
Great!, the next TypeError was catched!©rh   rG   rP   rr   rQ   rH   z7list_nodes(groupobject, classname = 'Leaf') test passedr   rh   rr   z8list_nodes(groupobject, classname = 'Table') test passedN)r   rT   rU   r'   r   rV   rW   rX   r"   ÚassertRaisesÚ	TypeErrorÚ
list_nodesÚextendr:   rZ   r[   r]   r^   ©
r%   r_   r`   Úobjectsra   Z
objectlistrb   rd   re   rf   r   r   r   Útest02_listNodes·   sˆ    

ÿ
ÿÿÿÿzTreeTestCase.test02_listNodesc           
   	   C   st  t jr tddƒ td| jj ƒ t | jd¡| _|  	t
| jjdd¡ g d¢}g }g }|D ]L}zdd	„ | j |¡D ƒ}W n   Y qX0 | |¡ |D ]}| |j¡ q’qX|  |g d
¢¡ t jrÄtdƒ g }|D ]B}zdd	„ | j |¡D ƒ}W n   Y qÌ0 |D ]}| |j¡ qüqÌ|  |g d¢¡ t jr0tdƒ g }|D ]v}zdd	„ | j |d¡D ƒ}W n: t
y’   t jrŽt ¡ \}}}	tdƒ t|ƒ Y n0 |D ]}| |j¡ q˜q8|  |g d¢¡ t jrÐtdƒ g }|D ]v}zdd	„ | j |d¡D ƒ}W n: t
y2   t jr.t ¡ \}}}	tdƒ t|ƒ Y n0 |D ]}| |j¡ q8qØ|  |ddg¡ t jrptdƒ dS )z%Checking the File.iter_nodes() methodrB   rC   zRunning %s.test02b_iterNodes...rD   rE   rn   ro   c                 S   s   g | ]}|‘qS r   r   ©r.   Úor   r   r   r0   +  r1   z2TreeTestCase.test02b_iterNodes.<locals>.<listcomp>rp   z iter_nodes(pathname) test passedc                 S   s   g | ]}|‘qS r   r   r|   r   r   r   r0   =  r1   rq   z#iter_nodes(groupobject) test passedc                 S   s   g | ]}|‘qS r   r   r|   r   r   r   r0   P  r1   r   rs   rt   z7iter_nodes(groupobject, classname = 'Leaf') test passedc                 S   s   g | ]}|‘qS r   r   r|   r   r   r   r0   f  r1   r   rh   rr   z8iter_nodes(groupobject, classname = 'Table') test passedN)r   rT   rU   r'   r   rV   rW   rX   r"   ru   rv   rw   Ú
iter_nodesrx   r:   rZ   r[   r]   r^   ry   r   r   r   Útest02b_iterNodes  sˆ    

ÿ
ÿÿÿÿzTreeTestCase.test02b_iterNodesc                 C   s†  t jr tddƒ td| jj ƒ t | jd¡| _g }g }g }| j 	¡ D ]P}| 
|j¡ | j |d¡D ]}| 
|j¡ qd| j |d¡D ]}| 
|j¡ q„qF|  |g d¢¡ |  |g d¢¡ |  |g d	¢¡ t jrÖtd
ƒ g }g }g }| j 	d¡D ]T}| 
|j¡ | j |d¡D ]}| 
|j¡ q| j |d¡D ]}| 
|j¡ q.qî|  |ddg¡ |  |dg¡ |  |ddg¡ t jr‚tdƒ dS )z&Checking the File.walk_groups() methodrB   rC   z!Running %s.test03_TraverseTree...rD   r   r   rI   ©rF   rh   rr   rM   zwalk_groups() test passedrK   rL   rr   rQ   rH   z!walk_groups(pathname) test passedN)r   rT   rU   r'   r   rV   rW   rX   r"   Úwalk_groupsr:   rZ   rw   r[   )r%   ÚgroupsÚtables_Úarraysr4   r)   rl   r   r   r   Útest03_TraverseTreey  sZ    
ÿÿþÿÿÿz TreeTestCase.test03_TraverseTreec           	      C   sØ  t jr tddƒ td| jj ƒ t | jd¡| _|  	t
t| j dd¡¡ g }g }g }g }| jjddD ].}| |j¡ |jd	dD ]}| |j¡ q‚qf| jj d	¡D ]}| |j¡ q¤| jjd
dD ]}| |j¡ qÄ|  |g d¢¡ |  |g d¢¡ |  |g d¢¡ |  |g d¢¡ t jr&tdƒ g }g }g }| jjdddD ]R}| |j¡ | d	¡D ]}| |j¡ q\| j |d
¡D ]}| |j¡ q~qB|  |ddg¡ |  |dg¡ |  |ddg¡ t jrÔtdƒ dS )zChecking File.walk_nodesrB   rC   zRunning %s.test04_walkNodes...rD   rE   rn   r   rR   r   r   rI   r€   rM   z.File.__iter__() and Group.__iter__ test passedrK   rL   rr   rQ   rH   z+walk_nodes(pathname, classname) test passedN)r   rT   rU   r'   r   rV   rW   rX   r"   ru   rv   ÚnextÚ
walk_nodesr:   rZ   Z_f_iter_nodesr5   Z_f_walknodesr[   )	r%   r‚   Ztables1Ztables2r„   r4   r)   rl   rƒ   r   r   r   Útest04_walkNodes°  sj    
ÿÿÿÿÿÿ
ÿÿzTreeTestCase.test04_walkNodesc                 C   s¦  t jr tddƒ td| jj ƒ t | jd¡| _t	| jj
ƒ}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d	|¡ |  d
|¡ |  d|¡ |  d|¡ |  d|¡ |  tt|ƒƒt|ƒ¡ t	| jj
jƒ}|  d|¡ |  d|¡ |  d
|¡ |  d|¡ |  tt|ƒƒt|ƒ¡ t	| jj
jjƒ}|  d|¡ |  d|¡ |  d
|¡ |  d|¡ |  d	|¡ |  d|¡ |  tt|ƒƒt|ƒ¡ t jr¢tdƒ dS )zChecking Group.__dir__rB   rC   zRunning %s.test05_dir...rD   Z_v_childrenZ_v_attrsZ_g_get_child_group_classZ_f_closerk   Ztable0r   ri   Ztable2rj   rA   zGroup.__dir__ test passedN)r   rT   rU   r'   r   rV   rW   rX   r"   Údirr5   ÚassertInÚassertNotInZassertSequenceEqualÚsortedÚsetrk   rj   )r%   Zroot_dirZroot_group0_dirZroot_group0_group1_dirr   r   r   Ú
test05_diró  sL    
ÿÿÿzTreeTestCase.test05_dir)r   r   r   Z	open_moder*   r,   Z
appendrowsr    r!   rg   rm   r{   r   r…   rˆ   rŽ   Ú__classcell__r   r   r&   r   r      s   #Qb`7Cr   c                       s^   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e
 ejd¡dd„ ƒZ‡  ZS )ÚDeepTreeTestCasez3Checks for deep hierarchy levels in PyTables trees.c                    sâ   t t| ƒ ¡  tjrd| _nd| _tjr4td| jƒ | jj	}tjrNtddd t
| jƒD ]z}tjrrtd| dd | j |dd	d	gd
| ¡ | j |dd	d	gd
| ¡ | j |dt|ƒ ¡ | j |dt|ƒ ¡}qX| j ¡  d S )Né   é@   zMaximum depth tested :zDepth writing progress: ú ©Úendú%3d,Úarrayé   z	depth: %dÚarray2Úgroup2_r4   )r   r   r    r   ÚheavyÚmaxdepthrT   rU   r"   r5   r6   r<   r=   r7   r#   )r%   r4   Údepthr&   r   r   r    /  s*    ÿÿzDeepTreeTestCase.setUpc                 C   sÊ   t j|dd¨}|j}tjr(tddd t| jƒD ]h}tjrLtd| dd |  |j	d d … ddg¡ |  
d|¡ |  
d	t|ƒ |¡ | |d
t|ƒ ¡}q2tjr¨tƒ  W d   ƒ n1 s¼0    Y  d S )NrD   ©Úmodez
Depth reading progress: r“   r”   r–   r˜   r™   rš   r4   )rV   rW   r5   r   rT   rU   r6   rœ   r[   r—   rŠ   r7   rY   )r%   Úfilenamer"   r4   r   r   r   r   Ú_check_treeT  s    zDeepTreeTestCase._check_treec                 C   s   |   | j¡ dS )z&Creation of a large depth object tree.N)r¡   rX   r$   r   r   r   Útest00_deepTreel  s    z DeepTreeTestCase.test00_deepTreec              	   C   s¼   t j| jdd| _t d¡}z‚t j|dd@}tjr<tdƒ | jj	| jj
|j
dd | j ¡  W d  ƒ n1 sr0    Y  |  |¡ W tj |¡r¸t |¡ ntj |¡r¶t |¡ 0 dS )	z"Copy of a large depth object tree.rD   rž   ú.h5r   ú
Copying deep tree...T©Ú	recursiveN©rV   rW   rX   r"   ÚtempfileZmktempr   rT   rU   Ú	copy_noder5   r#   r¡   ÚosÚpathÚexistsÚremove©r%   Zh5fname2Zh5file2r   r   r   Útest01a_copyDeepTreeq  s    
ÿ(ÿz%DeepTreeTestCase.test01a_copyDeepTreec              	   C   sÀ   t j| jddd| _t d¡}z„t j|ddd@}tjr@tdƒ | jj	| jj
|j
dd | j ¡  W d	  ƒ n1 sv0    Y  |  |¡ W tj |¡r¼t |¡ ntj |¡rºt |¡ 0 d	S )
z8Copy of a large depth object tree with small node cache.rD   r   ©rŸ   Znode_cache_slotsr£   r   r¤   Tr¥   Nr§   r®   r   r   r   Útest01b_copyDeepTree„  s(    
ÿ
ÿÿ(ÿz%DeepTreeTestCase.test01b_copyDeepTreec              	   C   sÀ   t j| jddd| _t d¡}z„t j|ddd@}tjr@tdƒ | jj	| jj
|j
dd | j ¡  W d	  ƒ n1 sv0    Y  |  |¡ W tj |¡r¼t |¡ ntj |¡rºt |¡ 0 d	S )
z5Copy of a large depth object tree with no node cache.rD   r   r°   r£   r   r¤   Tr¥   Nr§   r®   r   r   r   Útest01c_copyDeepTree™  s(    
ÿ
ÿÿ(ÿz%DeepTreeTestCase.test01c_copyDeepTreezonly in heavy modec              	   C   sÀ   t j| jddd| _t d¡}z„t j|ddd@}tjr@tdƒ | jj	| jj
|j
dd | j ¡  W d	  ƒ n1 sv0    Y  |  |¡ W tj |¡r¼t |¡ ntj |¡rºt |¡ 0 d	S )
z9Copy of a large depth object tree with static node cache.rD   i ÿÿÿr°   r£   r   r¤   Tr¥   Nr§   r®   r   r   r   Útest01d_copyDeepTree®  s(    
ÿ
ÿÿ(ÿz%DeepTreeTestCase.test01d_copyDeepTree)r   r   r   Ú__doc__r    r¡   r¢   r¯   r±   r²   r   Z
skipUnlessr   r›   r³   r   r   r   r&   r   r   ,  s   %r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚWideTreeTestCasez2Checks for maximum number of children for a Group.c                 C   sJ  t jrd}nd}t jr:tddƒ td| jj ƒ td|ƒ ddg}t jrTtdd	d
 t|ƒD ]<}t jrvtd| d	d
 | j | jj	dt
|ƒ |d| ¡ q\t jr¦tƒ  t ¡ }ddg}|  ¡  t jrètd|t ¡ | f ƒ tdd	d
 t|ƒD ]F}t jrtd| d	d
 t| jj	dt
|ƒ ƒ}| ¡ }|  ||¡ qðt jrFtƒ  dS )a  Checking creation of large number of leafs (1024) per group.

        Variable 'maxchildren' controls this check. PyTables support up
        to 4096 children per group, but this would take too much memory
        (up to 64 MB) for testing purposes (may be we can add a test for
        big platforms). A 1024 children run takes up to 30 MB. A 512
        children test takes around 25 MB.

        é   r‘   rB   rC   úRunning %s.test00_wideTree...ú#Maximum number of children tested :r˜   úChildren writing progress: r“   r”   r–   r—   ú	child: %dz/
Time spent opening a file with %d arrays: %s sú
Children reading progress: N)r   r›   rT   rU   r'   r   r6   r"   r<   r5   r7   ÚtimeÚ_reopenÚgetattrÚreadr[   )r%   ÚmaxchildrenÚaÚchildÚt1Zarray_Úbr   r   r   Útest00_LeafsÈ  sH    
ÿ
ÿÿzWideTreeTestCase.test00_Leafsc                 C   s4  t jrd}nd}t jr:tddƒ td| jj ƒ td|ƒ t jrLtddd	 t|ƒD ]:}t jrntd
| dd	 | j | jj	dt
|ƒ d| ¡ qTt jrœtƒ  t ¡ }|  ¡  t jrÖtd|t ¡ | f ƒ tddd	 t|ƒD ]B}t jrøtd
| dd	 t| jj	dt
|ƒ ƒ}|  |jd| ¡ qÞt jr0tƒ  dS )a  Checking creation of large number of groups (1024) per group.

        Variable 'maxchildren' controls this check. PyTables support up
        to 4096 children per group, but this would take too much memory
        (up to 64 MB) for testing purposes (may be we can add a test for
        big platforms). A 1024 children run takes up to 30 MB. A 512
        children test takes around 25 MB.

        r¶   r‘   rB   rC   r·   r¸   r¹   r“   r”   r–   r4   rº   z/
Time spent opening a file with %d groups: %s sr»   N)r   r›   rT   rU   r'   r   r6   r"   r=   r5   r7   r¼   r½   r¾   r[   Z_v_title)r%   rÀ   rÂ   rÃ   r4   r   r   r   Útest01_wideTree  sB    
ÿ
ÿÿz WideTreeTestCase.test01_wideTreeN)r   r   r   r´   rÅ   rÆ   r   r   r   r   rµ   Å  s   :rµ   c                       s€   e Zd ZdZ‡ f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‡  ZS )ÚHiddenTreeTestCasez0Check for hidden groups, leaves and hierarchies.c                    sè   t t| ƒ ¡  g | _g | _| j}| dddg¡ | dd¡}| |ddg¡ | |ddg¡ | |d¡}| |ddg¡ | j g d¢¡ | dddg¡ | dd	¡}| |ddg¡ | |ddg¡ | |ddg¡ | j g d
¢¡ d S )NrE   rÁ   r   ÚgZa1Za2)z/aú/gz/g/a1z/g/a2z/g/gz/g/g/aZ_p_aZ_p_g)z/_p_aú/_p_gú/_p_g/az
/_p_g/_p_aú/g/_p_a)	r   rÇ   r    ÚvisibleÚhiddenr"   r<   r=   rx   )r%   Úh5frÈ   Zg_gZhgr&   r   r   r    =  s&    ÿzHiddenTreeTestCase.setUpc                 C   sh   | j j}tjdtd | jD ]}|  ||v d| ¡ q| jD ]}|  ||vd| ¡ q<tjdtd dS )z*Absence of hidden nodes in `File.objects`.Úignore©Úcategoryz2Missing visible node ``%s`` from ``File.objects``.z-Found hidden node ``%s`` in ``File.objects``.ÚdefaultN)r"   rz   ÚwarningsÚfilterwarningsÚDeprecationWarningrÍ   Ú
assertTruerÎ   )r%   rz   ÚvpathÚhpathr   r   r   Ú_test00_objectsZ  s    
þ
þz"HiddenTreeTestCase._test00_objectsc                    sJ   ‡ fdd„}t jdtd |ddƒ |ddƒ |d	d
ƒ t jdtd dS )z6Object dictionaries conformance with ``walk_nodes()``.c                    st   ˆ j }t|| ƒ}dd„ | d|¡D ƒ}dd„ |D ƒ}| ¡  | ¡  ˆ  ||d|  ¡ ˆ  t|ƒt|ƒd|  ¡ d S )Nc                 S   s   g | ]
}|j ‘qS r   )rZ   )r.   ra   r   r   r   r0   u  s   ÿzJHiddenTreeTestCase._test00b_objects.<locals>.dictCheck.<locals>.<listcomp>rE   c                 S   s   g | ]}|‘qS r   r   )r.   r«   r   r   r   r0   w  r1   z8nodes in ``%s`` do not match those from ``walk_nodes()``z6length of ``%s`` differs from that of ``walk_nodes()``)r"   r¾   r‡   Úsortr[   Úlen)ZdictNamerS   Zfile_rz   Z	walkPathsZ	dictPathsr$   r   r   Ú	dictCheckq  s(    

ÿÿþÿþz6HiddenTreeTestCase._test00b_objects.<locals>.dictCheckrÐ   rÑ   rz   Nr‚   r   Zleavesr   rÓ   )rÔ   rÕ   rÖ   )r%   rÝ   r   r$   r   Ú_test00b_objectsn  s    


z#HiddenTreeTestCase._test00b_objectsc                 C   s6   | j }| jD ]}| |¡ q| jD ]}| |¡ q"dS )z(Node availability via `File.get_node()`.N)r"   rÍ   rY   rÎ   )r%   rÏ   rØ   rÙ   r   r   r   Útest01_getNode‹  s
    

z!HiddenTreeTestCase.test01_getNodec                 C   s4   | j }| j d¡D ]}|j}|  ||d| ¡ qdS )z-Hidden group absence in `File.walk_groups()`.rE   z"Walked across hidden group ``%s``.N)rÎ   r"   r   rZ   r‹   )r%   rÎ   r4   Úpathnamer   r   r   Útest02_walkGroups•  s    ÿz$HiddenTreeTestCase.test02_walkGroupsc                 C   s4   | j }| j d¡D ]}|j}|  ||d| ¡ qdS )z+Hidden node absence in `File.walk_nodes()`.rE   z!Walked across hidden node ``%s``.N)rÎ   r"   r‡   rZ   r‹   ©r%   rÎ   ra   rà   r   r   r   Útest03_walkNodesŸ  s    ÿz#HiddenTreeTestCase.test03_walkNodesc                 C   s4   | j }| j d¡D ]}|j}|  ||d| ¡ qdS )z9Listing visible nodes under a visible group (list_nodes).rÉ   úListed hidden node ``%s``.N)rÎ   r"   rw   rZ   r‹   râ   r   r   r   Útest04_listNodesVisible©  s    ÿz*HiddenTreeTestCase.test04_listNodesVisiblec                 C   s4   | j }| j d¡D ]}|j}|  ||d| ¡ qdS )z9Listing visible nodes under a visible group (iter_nodes).rÉ   rä   N)rÎ   r"   r~   rZ   r‹   râ   r   r   r   Útest04b_listNodesVisible³  s    ÿz+HiddenTreeTestCase.test04b_listNodesVisiblec                 C   sX   | j }d}d}| j d¡D ](}|j}||kr0d}|  ||d| ¡ q|  |d| ¡ dS )z8Listing visible nodes under a hidden group (list_nodes).rË   FrÊ   Trä   ú"Hidden node ``%s`` was not listed.N)rÎ   r"   rw   rZ   rŠ   r×   ©r%   rÎ   Znode_to_findZ
found_nodera   rà   r   r   r   Útest05_listNodesHidden½  s    ÿÿz)HiddenTreeTestCase.test05_listNodesHiddenc                 C   sX   | j }d}d}| j d¡D ](}|j}||kr0d}|  ||d| ¡ q|  |d| ¡ dS )z8Listing visible nodes under a hidden group (iter_nodes).rË   FrÊ   Trä   rç   N)rÎ   r"   r~   rZ   rŠ   r×   rè   r   r   r   Útest05b_iterNodesHiddenÎ  s    ÿÿz*HiddenTreeTestCase.test05b_iterNodesHiddenc                 C   s$   | j  ¡  t | j¡| _ |  ¡  dS )z#Reopening a file with hidden nodes.N)r"   r#   rV   rW   rX   Ztest00_objectsr$   r   r   r   Ú_test06_reopená  s    
z!HiddenTreeTestCase._test06_reopenc                 C   sV   | j j}|  |dƒ¡ | j  ddd¡ |  |dƒ¡ | j  ddd¡ |  |dƒ¡ dS )z0Moving a node between hidden and visible groups.rË   rÉ   rÁ   z/g/arÊ   N)r"   Úis_visible_nodeZassertFalseÚ	move_noder×   )r%   rì   r   r   r   Útest07_moveè  s    zHiddenTreeTestCase.test07_movec                 C   s2   |   d| j¡ | jjjjdd |  d| j¡ dS )z.Removing a visible group with hidden children.rÌ   Tr¥   N)rŠ   r"   r5   rÈ   Z	_f_remover‹   r$   r   r   r   Útest08_removeó  s    z HiddenTreeTestCase.test08_remove)r   r   r   r´   r    rÚ   rÞ   rß   rá   rã   rå   ræ   ré   rê   rë   rî   rï   r   r   r   r&   r   rÇ   :  s   




rÇ   c                       sD   e Zd ZdZejddZ‡ fdd„Zdd„ Zdd	„ Z	d
d„ Z
‡  ZS )ÚCreateParentsTestCasez¹Test the ``createparents`` flag.

    These are mainly for the user interface.  More thorough tests on the
    workings of the flag can be found in the ``test_do_undo.py`` module.

    r   )Z	complevelc                    s8   t t| ƒ ¡  | j dddg¡ | jjdd| jd d S )NrE   r—   r˜   r4   )r+   )r   rð   r    r"   r<   r=   r+   r$   r&   r   r   r      s    zCreateParentsTestCase.setUpc                 C   sv   | j | j j }}| jt|j|jddgdd | jt|jd|jdd | jt|jd|jdd | jt|jd|dd dS )z-Using the right type of parent node argument.rl   r˜   T©Úcreateparentsz/arrayú/groupN)	r"   r5   ru   rv   r<   r4   r©   rí   Zcopy_children)r%   r"   r5   r   r   r   Útest00_parentType
  s    
ÿ
ÿ
ÿ
ÿz'CreateParentsTestCase.test00_parentTypec                 C   sV   | j tj| jjdddd |  d| j¡ | j tj| jjddddd |  d| j¡ dS )z4Placing a node inside a nonexistent child of itself.ró   ú/group/foo/barTrñ   z
/group/foo)r¦   rò   N)ru   rV   Z	NodeErrorr"   rí   r‹   r©   rX   r$   r   r   r   Útest01_inside  s    þþz#CreateParentsTestCase.test01_insidec                 C   sF   | j jdddd |  d| j ¡ | j  d¡D ]}|  | j|j¡ q,dS )z1Propagating the filters of created parent groups.rõ   ZbazTrñ   z/group/foo/bar/bazró   N)r"   r=   rŠ   r   r[   r+   Z
_v_filters)r%   r4   r   r   r   Útest02_filters#  s    z$CreateParentsTestCase.test02_filters)r   r   r   r´   rV   ZFiltersr+   r    rô   rö   r÷   r   r   r   r&   r   rð   û  s   rð   c                  C   sn   t  ¡ } d}t|ƒD ]T}|  t  t¡¡ |  t  t¡¡ |  t  t¡¡ |  t  t¡¡ |  t  t	¡¡ q| S )Nr˜   )
r   Z	TestSuiter6   ZaddTestZ	makeSuiter   r   rµ   rÇ   rð   )ZtheSuiteZniterr@   r   r   r   Úsuite,  s    rø   Ú__main__)ZdefaultTest)#rª   r]   r¼   r¨   rÔ   rV   r   r   r   r   r   r   r   r	   r
   Ztables.testsr   Ztables.tests.commonr   r   ZTestCaseZIsDescriptionr   ZTempFileMixinr   r   rµ   rÇ   rð   rø   r   Z
parse_argvÚargvZprint_versionsÚmainr   r   r   r   Ú<module>   s6        u B1
