o
    3ήc#                     @   sd   d Z ddlZddlZddlZedZddlZG dd dZdd Z	G dd	 d	Z
G d
d dZdS )zUnit tests for shp.
    Nz	osgeo.ogrc                   @   sT   e 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S )TestShpc                 C   s  t jfdd}t d}tjt d}tjt d}tjt d}| |||| t	| g d| _
dd	gd	d
gg df| _g d| _dd	gd	d
gddgf| _g d| _||}||}t| j| j
D ]+\}}	t | }
t t j}|D ]}|j|  q~|
| |
d|	 ||
 qk||}||t j}t t j}| jD ]}t t j}|D ]}|j|  q|| qt | }|| |dd || || _|| _|| _|| _d S )Nc                 S   s4   |  dd |}tdtj}|d || |S )NedgesName    )CreateLayerogr	FieldDefn	OFTStringSetWidthCreateField)driver	layerTypelyrnamedef r   H/tmp/pip-target-vg8gfxp4/lib/python/networkx/readwrite/tests/test_shp.pycreatelayer   s
   

z)TestShp.setup_method.<locals>.createlayerESRI Shapefileshpdirz
tmpshp.shpztmp_mshp.shp)abcr   )      ?r   )       @r   )      @r   )?r   )      @r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   )r   wkbLineStringGetDriverByNameospathjointempfile
gettempdir	deletetmpmkdirnamespathssimplified_namessimplified_pathsmulti_namesCreateDataSourcezipFeatureGetLayerDefnGeometryAddPoint_2DSetGeometrySetFieldCreateFeaturewkbMultiLineStringAddGeometryshppathmulti_shppathtestdirdrv)selfr   r;   r:   r8   r9   shpr   r"   namefeatgp	multi_shp	multi_lyrmulti_g
multi_featr   r   r   setup_method   sX   











zTestShp.setup_methodc                 G   s$   |D ]}t j|r|| qd S N)r!   r"   existsDeleteDataSource)r<   r;   r)   rA   r   r   r   r&   S   s
   
zTestShp.deletetmpc                 C   sh   dd }t | j}||| j| j t j| jdd}||| j| j t j| jdd}||| j| j d S )Nc                    s|   t  }|D ]}t || qt|jt jksJ t| t  ks)J  fdd  D }|t|ks<J d S )Nc                    s    g | ]\}}  ||d  qS )r   )get_edge_data).0ser@   r   r   
<listcomp>_   s     zGTestShp.testload.<locals>.compare_graph_paths_names.<locals>.<listcomp>)nxDiGraphadd_pathsortednodesr   )r@   r)   r(   expectedrA   g_namesr   rN   r   compare_graph_paths_namesY   s   z3TestShp.testload.<locals>.compare_graph_paths_namesFsimplify)	rP   read_shpr8   r+   r*   r)   r(   r9   r,   )r<   rW   Gr   r   r   testloadX   s   
zTestShp.testloadc                 C   sF   |  }g }|r||   |  }|st|t|ks!J d S rG   )GetNextFeatureappendGetGeometryRefExportToWktrS   )r<   r   rU   feature	actualwktr   r   r   	checkgeomn   s   zTestShp.checkgeomc                 C   s   d}d}d}d}t jt d}t| j}t|| t	
|}| |d| | |d| tj| jdd	}t|| t	
|}| |d| | |d| d S )
N)POINT (1 1)POINT (2 2)POINT (3 3)POINT (0.9 0.9)POINT (4 2))LINESTRING (1 1,2 2)LINESTRING (2 2,3 3)z LINESTRING (0.9 0.9,4.0 0.9,4 2))rd   re   rf   rg   zPOINT (4.0 0.9)rh   )ri   rj   zLINESTRING (0.9 0.9,4.0 0.9)zLINESTRING (4.0 0.9,4 2)r   rT   r   FrX   )r!   r"   r#   r$   r%   rP   rZ   r8   	write_shpr   Openrc   GetLayerByName)r<   expectedpoints_simpleexpectedlines_simpleexpectedpointsexpectedlinestpathr[   r   r   r   r   test_geometryexportv   s   

zTestShp.test_geometryexportc                 C   sT   dd }t jt d}t| j}t|| t	
|}|d}||| d S )Nc                 S   sl   |   }|r4g }| }| d }|d||f}|d}|j| d |ks,J |   }|sd S d S )N   r   r   )r]   r_   GetPointCountGetPoint_2DGetFieldAsStringrJ   )r   graphra   coordsreflast
edge_nodesr>   r   r   r   testattributes   s   
z4TestShp.test_attributeexport.<locals>.testattributesr   r   )r!   r"   r#   r$   r%   rP   rZ   r8   rk   r   rl   rm   )r<   r}   rr   r[   r   r   r   r   r   test_attributeexport   s   

zTestShp.test_attributeexportc           
      C   s   t jt d}t }d}d}d}||| ||| d}|jddD ]\}}||d< q't	|| t
|}	|	jddD ]\}}|d |ksMJ qAd S )	Nr   r   r   rt   rt      r   
node_labelTdatalabel)r!   r"   r#   r$   r%   rP   rQ   add_edgerT   rk   rZ   )
r<   rr   r[   ABCr   ndHr   r   r   test_nodeattributeexport   s   

z TestShp.test_nodeattributeexportc              
   C   s   t  }tjt d}d}d}|jd|d d |jd|d d |jdd|d d zt 	|| W n t
yE } zJ |d }~ww t|}| |d	| | |d
| d S )Nr   )rg   rh   )zLINESTRING (0.9 0.9,4 2)rt   r   )Wktr   FrT   r   )rP   rQ   r!   r"   r#   r$   r%   add_noder   rk   	Exceptionr   rl   rc   rm   )r<   r[   rr   pointslineerrr   r   r   r   test_wkt_export   s    
zTestShp.test_wkt_exportc                 C   s   |  | j| j| j d S rG   )r&   r;   r:   r8   r<   r   r   r   teardown_method      zTestShp.teardown_methodN)__name__
__module____qualname__rF   r&   r\   rc   rs   r~   r   r   r   r   r   r   r   r      s    D,r   c                  C   s:   t t td} W d    d S 1 sw   Y  d S )N)hopefully_this_file_will_not_be_available)pytestraisesRuntimeErrorrP   rZ   )r[   r   r   r   test_read_shp_nofile   s   "r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestMissingGeometryc                 C   s   |    |   |   d S rG   )
setup_pathdelete_shapedircreate_shapedirr   r   r   r   rF      s   z TestMissingGeometry.setup_methodc                 C      |    d S rG   r   r   r   r   r   r         z#TestMissingGeometry.teardown_methodc                 C      t jt d| _d S )Nmissing_geometryr!   r"   r#   r$   r%   r   r   r   r   r      r   zTestMissingGeometry.setup_pathc                 C   sT   t d}|| j}|dd t j}t | }|d  |	| |
  d S )Nr   rT   )r   r    r-   r"   r   wkbPointr/   r0   r3   r5   Destroy)r<   r;   r=   r   ra   r   r   r   r      s   


z#TestMissingGeometry.create_shapedirc                 C   ,   t d}tj| jr|| j d S d S Nr   r   r    r!   r"   rH   rI   r<   r;   r   r   r   r         
z#TestMissingGeometry.delete_shapedirc                 C   s>   t tj t| j}W d    d S 1 sw   Y  d S rG   )r   r   rP   NetworkXErrorrZ   r"   )r<   r[   r   r   r   test_missing_geometry   s   "z)TestMissingGeometry.test_missing_geometryN)	r   r   r   rF   r   r   r   r   r   r   r   r   r   r      s    	r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestMissingAttrWritec                 C   s   |    |   d S rG   )r   r   r   r   r   r   rF     s   z!TestMissingAttrWrite.setup_methodc                 C   r   rG   r   r   r   r   r   r     r   z$TestMissingAttrWrite.teardown_methodc                 C   r   )Nmissing_attributesr   r   r   r   r   r   	  r   zTestMissingAttrWrite.setup_pathc                 C   r   r   r   r   r   r   r   r     r   z$TestMissingAttrWrite.delete_shapedirc           	      C   s   t  }d}d}d}|j||dd ||| t || j t | j}|jddD ]%\}}}||kr@||kr@|d dks@J ||krP||krP|d d u sPJ q+d S )	Nr   r   r   d   )fooTr   r   )rP   rQ   r   rk   r"   rZ   r   )	r<   r[   r   r   r   r   uvr   r   r   r   test_missing_attributes  s   z,TestMissingAttrWrite.test_missing_attributesN)r   r   r   rF   r   r   r   r   r   r   r   r   r     s    r   )__doc__r!   r$   r   importorskipr   networkxrP   r   r   r   r   r   r   r   r   <module>   s    
 P