B
    ™i‚\ˆœ  ã               @   sX  d dl mZ d dl mZ 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 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rTe $ej%¡ e &¡  ej'dd dS )é    )Úprint_function)Úabsolute_importN)ÚGroupÚLeafÚTableÚArray)Ú	StringColÚIntColÚInt16ColÚFloatColÚ
Float32Col)Úcommon)Úunittest)ÚPyTablesTestCase)Úrangec               @   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.7/site-packages/tables/tests/test_tree.pyr      s
   
r   c                   s‚   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e ejd dk d¡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}xþtdƒD ]ò}| j j|dt|ƒ t| jd | jd}|j}xXt| jƒD ]J}d| j|  |d< ||d< || |d< t	|ƒ|d	< t	|ƒ|d
< | 
¡  qPW | ¡  dd„ | ¡ D ƒ}dd„ | ¡ D ƒ}| j  |d|d¡ | j  |d	|d¡ | j  |dt|ƒ ¡}	|	}qW 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>C   s    z-TreeTestCase.populateFile.<locals>.<listcomp>c             S   s   g | ]}|d  ‘qS )r   r   )r.   r/   r   r   r   r0   D   s    Ú1Ú4Úgroup)r%   Úrootr   Zcreate_tableÚstrr   r+   r-   ÚrowÚfloatÚappendÚflushZiterrowsÚcreate_arrayÚcreate_group)
r'   r3   ZmaxshortÚjr*   ÚdÚiZvar1ListZvar4ListÚgroup2r   r   r   r$   +   s,    
zTreeTestCase.populateFilec          
   C   sH  t jr tddƒ td| jj ƒ t | jd¡| _ddddg}g }x$|D ]}| j 	|¡}| 
|j¡ qFW |  ||¡ t jr€td	ƒ dd
ddg}ddg}g }xN|D ]F}x@|D ]8}y| j 	||¡}W n tk
rÒ   Y q¨X | 
|j¡ q¨W qžW |  |ddddddg¡ t jrtdƒ dd
dddg}g }g }	xv|D ]n}y| jj	|dd}W n< tk
r€   t jr|t ¡ \}
}}tdƒ t|ƒ Y nX | 
|j¡ |	 
|¡ q,W |  |dd
ddg¡ t jrÂtdƒ ddg}g }xL|	D ]D}x<|D ]4}y| j 	||d¡}W n   Y nX | 
|j¡ qÞW qÔW |  |ddddddg¡ t jrDtdƒ dS )z3Checking the File.get_node() with string node namesÚ
z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zRunning %s.test00_getNode...Úrú/z/table0z/group0/var1z/group0/group1/var4zget_node(pathname) test passedz/group0z/group0/group1z/group0/group1/group2r   r   z/var1z/var4z/group0/var4z/group0/group1/var1z%get_node(groupname, name) test passedr   )Ú	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_noder8   Ú_v_pathnameÚassertEqualÚLookupErrorÚsysÚexc_info)r'   ÚnodelistÚ	nodenamesÚnodeÚobjectZ
nodegroupsZ	nodepathsr3   ÚnameZgroupobjectsÚtypeÚvalueÚ	tracebackZ
nodearraysr   r   r   Útest00_getNodeN   s|    








zTreeTestCase.test00_getNodec             C   sÞ   t jr tddƒ td| jj ƒ t | jd¡| _| j 	d¡}|  
t|tƒ¡ | j 	dd¡}|  
t|tƒ¡ | j 	| jjjd¡}|  
t|tƒ¡ | j 	d¡}|  
t|tƒ¡ |  
t|tƒ¡ | j 	dd	d
¡}|  
t|tƒ¡ dS )z+Checking the File.get_node() with instancesr@   z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=z!Running %s.test01_getNodeClass...rA   z/group0/table1z/group0Útable1z/group0/var1Úgroup1r   N)r   rD   rE   r(   r   rF   rG   rH   r%   rI   Ú
assertTrueÚ
isinstancer   r4   Úgroup0r   r   r   )r'   r*   Úarrr3   r   r   r   Útest01_getNodeClassŸ   s     
z TreeTestCase.test01_getNodeClassc       
      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
g}g }g }xN|D ]F}y| j |¡}W n   Y q`X | |¡ x|D ]}| |j¡ q’W q`W |  |ddd
dddddg¡ t jrÔtdƒ g }xF|D ]>}y| j |¡}W n   Y qÞX x|D ]}| |j¡ qW qÞW |  |ddddd	dddg¡ t jrLtdƒ g }xz|D ]r}y| j |d¡}W n< t
k
r¨   t jr¤t ¡ \}}}	tdƒ t|ƒ Y nX x|D ]}| |j¡ q°W qVW |  |ddddddg¡ t jrôtdƒ g }xz|D ]r}y| j |d¡}W n< t
k
rP   t jrLt ¡ \}}}	tdƒ t|ƒ Y nX x|D ]}| |j¡ qXW qþW |  |ddg¡ t jr”tdƒ dS )z%Checking the File.list_nodes() methodr@   z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zRunning %s.test02_listNodes...rA   rB   ÚNoSuchClassz/group0z/group0/table1z/group0/group1/group2z/var1z/table0z/var4z/group0/group1z/group0/var1z/group0/var4z list_nodes(pathname) test passedz/group0/group1/table2z/group0/group1/var1z/group0/group1/var4z#list_nodes(groupobject) test passedr   z(
Great!, the next TypeError was catched!z7list_nodes(groupobject, classname = 'Leaf') test passedr   z8list_nodes(groupobject, classname = 'Table') test passedN)r   rD   rE   r(   r   rF   rG   rH   r%   ÚassertRaisesÚ	TypeErrorÚ
list_nodesÚextendr8   rJ   rK   rM   rN   )
r'   rO   rP   ÚobjectsrQ   Ú
objectlistrR   rT   rU   rV   r   r   r   Útest02_listNodesº   s    













zTreeTestCase.test02_listNodesc       
      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
g}g }g }xX|D ]P}ydd„ | j |¡D ƒ}W n   Y q`X | |¡ x|D ]}| |j¡ qœW q`W |  |ddd
dddddg¡ t jrÞtdƒ g }xP|D ]H}ydd„ | j |¡D ƒ}W n   Y qèX x|D ]}| |j¡ qW qèW |  |ddddd	dddg¡ t jr`tdƒ g }x„|D ]|}ydd„ | j |d¡D ƒ}W n< t
k
rÆ   t jrÂt ¡ \}}}	tdƒ t|ƒ Y nX x|D ]}| |j¡ qÎW qjW |  |ddddddg¡ t jrtdƒ g }x„|D ]|}ydd„ | j |d¡D ƒ}W n< t
k
rx   t jrtt ¡ \}}}	tdƒ t|ƒ Y nX x|D ]}| |j¡ q€W qW |  |ddg¡ t jr¼tdƒ dS ) z%Checking the File.iter_nodes() methodr@   z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zRunning %s.test02b_iterNodes...rA   rB   r_   z/group0z/group0/table1z/group0/group1/group2z/var1c             S   s   g | ]}|‘qS r   r   )r.   Úor   r   r   r0   .  s    z2TreeTestCase.test02b_iterNodes.<locals>.<listcomp>z/table0z/var4z/group0/group1z/group0/var1z/group0/var4z iter_nodes(pathname) test passedc             S   s   g | ]}|‘qS r   r   )r.   rg   r   r   r   r0   @  s    z/group0/group1/table2z/group0/group1/var1z/group0/group1/var4z#iter_nodes(groupobject) test passedc             S   s   g | ]}|‘qS r   r   )r.   rg   r   r   r   r0   S  s    r   z(
Great!, the next TypeError was catched!z7iter_nodes(groupobject, classname = 'Leaf') test passedc             S   s   g | ]}|‘qS r   r   )r.   rg   r   r   r   r0   i  s    r   z8iter_nodes(groupobject, classname = 'Table') test passedN)r   rD   rE   r(   r   rF   rG   rH   r%   r`   ra   rb   Ú
iter_nodesrc   r8   rJ   rK   rM   rN   )
r'   rO   rP   rd   rQ   re   rR   rT   rU   rV   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 }xf| j 	¡ D ]X}| 
|j¡ x"| j |d¡D ]}| 
|j¡ qhW x"| j |d¡D ]}| 
|j¡ qŒW qHW |  |ddd	d
g¡ |  |dddg¡ |  |ddddddg¡ t jrðtdƒ g }g }g }xn| j 	d	¡D ]^}| 
|j¡ x$| j |d¡D ]}| 
|j¡ q*W x$| j |d¡D ]}| 
|j¡ qPW q
W |  |d	d
g¡ |  |dg¡ |  |ddg¡ t jrªtdƒ dS )z&Checking the File.walk_groups() methodr@   z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=z!Running %s.test03_TraverseTree...rA   r   r   rB   z/group0z/group0/group1z/group0/group1/group2z/table0z/group0/table1z/group0/group1/table2z/var1z/var4z/group0/var1z/group0/var4z/group0/group1/var1z/group0/group1/var4zwalk_groups() test passedz!walk_groups(pathname) test passedN)r   rD   rE   r(   r   rF   rG   rH   r%   Úwalk_groupsr8   rJ   rb   rK   )r'   ÚgroupsÚtables_Úarraysr3   r*   r]   r   r   r   Útest03_TraverseTree|  sT    



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 }xD| jjddD ]2}| |j¡ x |jd	dD ]}| |j¡ q†W qhW x"| jj d	¡D ]}| |j¡ q®W x"| jjd
dD ]}| |j¡ qÒW |  |ddddg¡ |  |dddg¡ |  |dddg¡ |  |ddddddg¡ t jrFtdƒ g }g }g }xn| jjdddD ]Z}| |j¡ x | d	¡D ]}| |j¡ q€W x$| j |d
¡D ]}| |j¡ q¦W qdW |  |ddg¡ |  |dg¡ |  |ddg¡ t jr tdƒ dS )zChecking File.walk_nodesr@   z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zRunning %s.test04_walkNodes...rA   rB   r_   r   )rC   r   r   z/group0z/group0/group1z/group0/group1/group2z/table0z/group0/table1z/group0/group1/table2z/var1z/var4z/group0/var1z/group0/var4z/group0/group1/var1z/group0/group1/var4z.File.__iter__() and Group.__iter__ test passedz+walk_nodes(pathname, classname) test passedN)r   rD   rE   r(   r   rF   rG   rH   r%   r`   ra   ÚnextÚ
walk_nodesr8   rJ   Z_f_iter_nodesr4   Z_f_walknodesrK   )	r'   rk   Ztables1Ztables2rm   r3   r*   r]   rl   r   r   r   Útest04_walkNodes³  sd    




zTreeTestCase.test04_walkNodesr   r)   z2Special method `__dir__()` introduced in Python-3.c             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__r@   z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zRunning %s.test05_dir...rA   Z_v_childrenZ_v_attrsZ_g_get_child_group_classZ_f_closer\   Ztable0r   rX   Ztable2rY   r?   zGroup.__dir__ test passedN)r   rD   rE   r(   r   rF   rG   rH   r%   Údirr4   ZassertInZassertNotInZassertSequenceEqualÚsortedÚsetr\   rY   )r'   Zroot_dirZroot_group0_dirZroot_group0_group1_dirr   r   r   Ú
test05_dirö  sF    



zTreeTestCase.test05_dir)r   r   r   Z	open_moder+   r-   Z
appendrowsr#   r$   rW   r^   rf   ri   rn   rq   r   ZskipIfrM   Úversion_inforu   Ú__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 xˆt
| jƒD ]z}tjrttd| dd | j |dd	d	gd
| ¡ | j |dd	d	gd
| ¡ | j |dt|ƒ ¡ | j |dt|ƒ ¡}qZW | j ¡  d S )Né   é@   zMaximum depth tested :zDepth writing progress: ú )Úendz%3d,Úarrayé   z	depth: %dÚarray2Úgroup2_r3   )r"   rx   r#   r   ÚheavyÚmaxdepthrD   rE   r%   r4   r   r:   r;   r5   r&   )r'   r3   Údepth)r(   r   r   r#   3  s&    zDeepTreeTestCase.setUpc          	   C   s¾   t j|dd¦}|j}tjr(tddd xzt| jƒD ]l}tjrNtd| dd |  |j	d d … ddg¡ |  
d|k¡ |  
d	t|ƒ |k¡ | |d
t|ƒ ¡}q4W tjr°tƒ  W d Q R X d S )NrA   )Úmodez
Depth reading progress: r{   )r|   z%3d,r~   r   r€   r3   )rF   rG   r4   r   rD   rE   r   r‚   rK   r}   rZ   r5   rI   )r'   Úfilenamer%   r3   rƒ   r   r   r   Ú_check_treeX  s    zDeepTreeTestCase._check_treec             C   s   |   | j¡ dS )z&Creation of a large depth object tree.N)r†   rH   )r'   r   r   r   Útest00_deepTreep  s    z DeepTreeTestCase.test00_deepTreec          	   C   s’   t j| jdd| _t d¡}zXt j|dd6}tjr<tdƒ | jj	| jj
|j
dd | j ¡  W dQ R X |  |¡ W dtj |¡rŒt |¡ X dS )	z"Copy of a large depth object tree.rA   )r„   z.h5r   z
Copying deep tree...T)Ú	recursiveN)rF   rG   rH   r%   ÚtempfileÚmktempr   rD   rE   Ú	copy_noder4   r&   r†   ÚosÚpathÚexistsÚremove)r'   Úh5fname2Úh5file2r   r   r   Útest01a_copyDeepTreeu  s    
z%DeepTreeTestCase.test01a_copyDeepTreec          	   C   s–   t j| jddd| _t d¡}zZt j|ddd6}tjr@tdƒ | jj	| jj
|j
dd | j ¡  W d	Q R X |  |¡ W d	tj |¡rt |¡ X d	S )
z8Copy of a large depth object tree with small node cache.rA   r    )r„   Únode_cache_slotsz.h5r   z
Copying deep tree...T)rˆ   N)rF   rG   rH   r%   r‰   rŠ   r   rD   rE   r‹   r4   r&   r†   rŒ   r   rŽ   r   )r'   r   r‘   r   r   r   Útest01b_copyDeepTreeˆ  s    



z%DeepTreeTestCase.test01b_copyDeepTreec          	   C   s–   t j| jddd| _t d¡}zZt j|ddd6}tjr@tdƒ | jj	| jj
|j
dd | j ¡  W d	Q R X |  |¡ W d	tj |¡rt |¡ X d	S )
z5Copy of a large depth object tree with no node cache.rA   r   )r„   r“   z.h5r   z
Copying deep tree...T)rˆ   N)rF   rG   rH   r%   r‰   rŠ   r   rD   rE   r‹   r4   r&   r†   rŒ   r   rŽ   r   )r'   r   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¡}zZt j|ddd6}tjr@tdƒ | jj	| jj
|j
dd | j ¡  W d	Q R X |  |¡ W d	tj |¡rt |¡ X d	S )
z9Copy of a large depth object tree with static node cache.rA   i ÿÿÿ)r„   r“   z.h5r   z
Copying deep tree...T)rˆ   N)rF   rG   rH   r%   r‰   rŠ   r   rD   rE   r‹   r4   r&   r†   rŒ   r   rŽ   r   )r'   r   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–   rw   r   r   )r(   r   rx   0  s   %rx   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   sR  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
 xHt|ƒD ]<}t jrxtd| d	d
 | j | jj	dt
|ƒ |d| ¡ q^W t jrªtƒ  t ¡ }ddg}|  ¡  t jrìtd|t ¡ | f ƒ tdd	d
 xRt|ƒD ]F}t jrtd| d	d
 t| jj	dt
|ƒ ƒ}| ¡ }|  ||¡ qöW t jrNtƒ  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.

        i   ry   r@   z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zRunning %s.test00_wideTree...z#Maximum number of children tested :r~   zChildren writing progress: r{   )r|   z%3d,r}   z	child: %dz/
Time spent opening a file with %d arrays: %s sz
Children reading progress: N)r   r   rD   rE   r(   r   r   r%   r:   r4   r5   ÚtimeÚ_reopenÚgetattrÚreadrK   )r'   ÚmaxchildrenÚaÚchildÚt1Zarray_Úbr   r   r   Útest00_LeafsÌ  sB    

zWideTreeTestCase.test00_Leafsc             C   s<  t jrd}nd}t jr:tddƒ td| jj ƒ td|ƒ t jrLtddd	 xFt|ƒD ]:}t jrptd
| dd	 | j | jj	dt
|ƒ d| ¡ qVW t jr tƒ  t ¡ }|  ¡  t jrÚtd|t ¡ | f ƒ tddd	 xNt|ƒD ]B}t jrþtd
| dd	 t| jj	dt
|ƒ ƒ}|  |jd| ¡ qäW t jr8tƒ  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.

        i   ry   r@   z<-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=zRunning %s.test00_wideTree...z#Maximum number of children tested :zChildren writing progress: r{   )r|   z%3d,r3   z	child: %dz/
Time spent opening a file with %d groups: %s sz
Children reading progress: N)r   r   rD   rE   r(   r   r   r%   r;   r4   r5   r™   rš   r›   rK   Z_v_title)r'   r   rŸ   r    r3   r   r   r   Útest01_wideTree  s<    

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 ddd	d
ddg¡ | dddg¡ | dd¡}| |ddg¡ | |ddg¡ | |ddg¡ | j dddddg¡ d S )NrB   rž   r   ÚgZa1Za2z/az/gz/g/a1z/g/a2z/g/gz/g/g/aZ_p_aZ_p_gz/_p_az/_p_gz/_p_g/az
/_p_g/_p_az/g/_p_a)	r"   r¤   r#   ÚvisibleÚhiddenr%   r:   r;   rc   )r'   Úh5fr¥   Zg_gZhg)r(   r   r   r#   A  s$    zHiddenTreeTestCase.setUpc             C   sp   | j j}tjdtd x"| jD ]}|  ||kd| ¡ qW x"| jD ]}|  ||kd| ¡ qBW 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%   rd   ÚwarningsÚfilterwarningsÚDeprecationWarningr¦   rZ   r§   )r'   rd   ÚvpathÚhpathr   r   r   Ú_test00_objects^  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   )rJ   )r.   rQ   r   r   r   r0   y  s   zJHiddenTreeTestCase._test00b_objects.<locals>.dictCheck.<locals>.<listcomp>rB   c             S   s   g | ]}|‘qS r   r   )r.   r   r   r   r   r0   {  s    z8nodes in ``%s`` do not match those from ``walk_nodes()``z6length of ``%s`` differs from that of ``walk_nodes()``)r%   r›   rp   ÚsortrK   Úlen)ZdictNamerC   Zfile_rd   Z	walkPathsZ	dictPaths)r'   r   r   Ú	dictChecku  s    
z6HiddenTreeTestCase._test00b_objects.<locals>.dictCheckr©   )rª   rd   Nrk   r   Zleavesr   r«   )r¬   r­   r®   )r'   r´   r   )r'   r   Ú_test00b_objectsr  s    


z#HiddenTreeTestCase._test00b_objectsc             C   s>   | j }x| jD ]}| |¡ qW x| jD ]}| |¡ q(W dS )z(Node availability via `File.get_node()`.N)r%   r¦   rI   r§   )r'   r¨   r¯   r°   r   r   r   Útest01_getNode  s
    z!HiddenTreeTestCase.test01_getNodec             C   s:   | j }x.| j d¡D ]}|j}|  ||kd| ¡ qW dS )z-Hidden group absence in `File.walk_groups()`.rB   z"Walked across hidden group ``%s``.N)r§   r%   rj   rJ   rZ   )r'   r§   r3   Úpathnamer   r   r   Útest02_walkGroups™  s
    
z$HiddenTreeTestCase.test02_walkGroupsc             C   s:   | j }x.| j d¡D ]}|j}|  ||kd| ¡ qW dS )z+Hidden node absence in `File.walk_nodes()`.rB   z!Walked across hidden node ``%s``.N)r§   r%   rp   rJ   rZ   )r'   r§   rQ   r·   r   r   r   Útest03_walkNodes£  s
    
z#HiddenTreeTestCase.test03_walkNodesc             C   s:   | j }x.| j d¡D ]}|j}|  ||kd| ¡ qW dS )z9Listing visible nodes under a visible group (list_nodes).z/gzListed hidden node ``%s``.N)r§   r%   rb   rJ   rZ   )r'   r§   rQ   r·   r   r   r   Útest04_listNodesVisible­  s
    
z*HiddenTreeTestCase.test04_listNodesVisiblec             C   s:   | j }x.| j d¡D ]}|j}|  ||kd| ¡ qW dS )z9Listing visible nodes under a visible group (iter_nodes).z/gzListed hidden node ``%s``.N)r§   r%   rh   rJ   rZ   )r'   r§   rQ   r·   r   r   r   Útest04b_listNodesVisible·  s
    
z+HiddenTreeTestCase.test04b_listNodesVisiblec             C   s^   | j }d}d}x:| j d¡D ]*}|j}||kr2d}|  ||kd| ¡ qW |  |d| ¡ dS )z8Listing visible nodes under a hidden group (list_nodes).z/_p_g/aFz/_p_gTzListed hidden node ``%s``.z"Hidden node ``%s`` was not listed.N)r§   r%   rb   rJ   rZ   )r'   r§   Únode_to_findÚ
found_noderQ   r·   r   r   r   Útest05_listNodesHiddenÁ  s    
z)HiddenTreeTestCase.test05_listNodesHiddenc             C   s^   | j }d}d}x:| j d¡D ]*}|j}||kr2d}|  ||kd| ¡ qW |  |d| ¡ dS )z8Listing visible nodes under a hidden group (iter_nodes).z/_p_g/aFz/_p_gTzListed hidden node ``%s``.z"Hidden node ``%s`` was not listed.N)r§   r%   rh   rJ   rZ   )r'   r§   r¼   r½   rQ   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&   rF   rG   rH   Ztest00_objects)r'   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.z/_p_g/az/grž   z/g/az/_p_gN)r%   Úis_visible_nodeÚassertFalseÚ	move_noderZ   )r'   rÁ   r   r   r   Útest07_moveì  s    zHiddenTreeTestCase.test07_movec             C   s6   |   d| jk¡ | jjjjdd |  d| jk¡ dS )z.Removing a visible group with hidden children.z/g/_p_aT)rˆ   N)rZ   r%   r4   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Å   rw   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 )NrB   r}   r~   r3   )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.r]   r~   T)Úcreateparentsz/arrayz/groupN)	r%   r4   r`   ra   r:   r3   r‹   rÃ   Zcopy_children)r'   r%   r4   r   r   r   Útest00_parentType  s    



z'CreateParentsTestCase.test00_parentTypec             C   sZ   | j tj| jjdddd |  d| jk¡ | j tj| jjddddd |  d| jk¡ dS )z4Placing a node inside a nonexistent child of itself.z/groupz/group/foo/barT)rÇ   z
/group/foo)rˆ   rÇ   N)r`   rF   Z	NodeErrorr%   rÃ   rÂ   r‹   rH   )r'   r   r   r   Útest01_inside  s    
z#CreateParentsTestCase.test01_insidec             C   sL   | j jdddd |  d| j k¡ x$| j  d¡D ]}|  | j|j¡ q0W dS )z1Propagating the filters of created parent groups.z/group/foo/barZbazT)rÇ   z/group/foo/bar/bazz/groupN)r%   r;   rZ   rj   rK   r,   Z
_v_filters)r'   r3   r   r   r   Útest02_filters'  s    z$CreateParentsTestCase.test02_filters)r   r   r   r—   rF   ZFiltersr,   r#   rÈ   rÉ   rÊ   rw   r   r   )r(   r   rÆ   ÿ  s   rÆ   c              C   sr   t  ¡ } d}x`t|ƒD ]T}|  t  t¡¡ |  t  t¡¡ |  t  t¡¡ |  t  t¡¡ |  t  t	¡¡ qW | S )Nr~   )
r   Z	TestSuiter   ZaddTestZ	makeSuiter   rx   r˜   r¤   rÆ   )ZtheSuiteZniterr>   r   r   r   Úsuite0  s    rË   Ú__main__)ZdefaultTest)(Z
__future__r   r   rŒ   rM   r™   r‰   r¬   rF   r   r   r   r   r   r	   r
   r   r   Ztables.testsr   Ztables.tests.commonr   r   ZTestCaseZ	six.movesr   ZIsDescriptionr   ZTempFileMixinr   rx   r˜   r¤   rÆ   rË   r   Z
parse_argvÚargvZprint_versionsÚmainr   r   r   r   Ú<module>   s<        u B1
