3
(hM$              
   @   s   yd dl mZ W n   dd ZY nX 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Zd dl	m
Z
 d dlmZ d dlmZmZ dd	lmZmZmZmZ ejeZG d
d deZdS )    )find_executablec             C   s   d S )N )fr   r   R/tmp/pip-install-q3hcpn_q/django-nested-admin/nested_admin/tests/one_deep/tests.py<lambda>   s    r   N)SkipTest)site)BaseNestedAdminTestCaseget_model_name   )PlainStackedRootPlainTabularRootNestedStackedRootNestedTabularRootc                   s   e Zd ZdZeeeegZe	 fddZ
e	 fddZ fddZedd	 Zed
d Zd"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 )#VisualComparisonTestCaseNc                s   t jjd| _| jstd| _| j s6t jj| j r>tdt jjd| _t	t
| j  tj | _i | _i | _xP| jD ]F}tj| } fdd  | | j|< }fdd|| j|< qxW d S )	NZBLINKDIFF_BINz
blink-diffzblink-diff not installedZSCREENSHOT_OUTPUT_DIRc                s:   | j g g}x*t| dd pg D ]}|d j | qW |S )NZinlinesr   )modelgetattrappend)Zadmindatainline)descend_admin_inlinesr   r   r   .   s    
zBVisualComparisonTestCase.setUpClass.<locals>.descend_admin_inlinesc                s*   t | trdd t | D S t| S d S )Nc             S   s   g | ]}|qS r   r   ).0mr   r   r   
<listcomp>8   s    zZVisualComparisonTestCase.setUpClass.<locals>.recursive_map_model_names.<locals>.<listcomp>)
isinstancelistmapr
   )r   )recursive_map_model_namesr   r   r   6   s    
zFVisualComparisonTestCase.setUpClass.<locals>.recursive_map_model_names)osenvirongetblinkdiff_binr   pathexistsr   screenshot_output_dirsuperr	   
setUpClasstempfilemkdtemproot_temp_dir
all_modelsall_model_namesroot_models
admin_site	_registry)cls
root_modelZ
root_adminmodels)	__class__)r   r   r   r&      s     


z#VisualComparisonTestCase.setUpClassc                s   t t| j  tj| j d S )N)r%   r   tearDownClassshutilrmtreer)   )r/   )r2   r   r   r3   >   s    z&VisualComparisonTestCase.tearDownClassc                s0   t t| j  tj| jd| _| jjdd d S )N)diri  iX  )	r%   r   setUpr'   r(   r)   temp_dirseleniumset_window_size)self)r2   r   r   r7   C   s    zVisualComparisonTestCase.setUpc             C   s   | j | j S )N)r*   r0   )r;   r   r   r   r1   H   s    zVisualComparisonTestCase.modelsc             C   s   | j | j S )N)r+   r0   )r;   r   r   r   model_namesL   s    z$VisualComparisonTestCase.model_namesc             C   s   |j dd}| jdddddd|g}| jrf| jjd	}|d
d|jd |jd |jd |jd d g7 }|rr||7 }|||g7 }tj|tj	tj	d}|j
 \}}	|jdkr| jrtj| tj| tj| d S tj| d}
| jrd|
|f }
t|
d S )Nz_a.pngz	_diff.pngz	--verbosez--threshold1z--delta0z--outputz
#suit-leftz--block-outz%(x)s,%(y)s,%(w)s,%(h)sxywidthheight)r?   r@   wh)stdoutstderrr   zScreenshots do not matchz%s (See %s))replacer!   has_suitr9   find_element_by_css_selectorlocationsize
subprocessPopenPIPEcommunicate
returncoder$   r   unlinkloggerinfoAssertionError)r;   ab
extra_argsZdiff_output_pathargsZ	suit_leftprE   _msgr   r   r   assertSameScreenshotP   s4    




z-VisualComparisonTestCase.assertSameScreenshotc             C   sz   t j d d }dtjd d  }| jr0|d7 }| jp:| j}| jjj	drNdnd}t
jj|d	|||f }| jj| |S )
Nr      zdj%s%s   Z_grpZPlainrU   rV   z%s_%s_%s.png)inspectstackdjangoVERSIONhas_grappellir$   r8   r0   __name__
startswithr   r"   joinr9   Zsave_screenshot)r;   nameprefix
output_dirsuffixZ
image_pathr   r   r   get_admin_screenshots   s    z-VisualComparisonTestCase.get_admin_screenshotc          	   C   sD   | j d d d }|jjj }| jd| }|j  W d Q R X d S )Nr   r   z*//a[contains(string(.), "Add another %s")])r1   Z_metaverbose_nametitleZclickable_xpathZclick)r;   child_modelrl   elr   r   r   
add_inline~   s    z#VisualComparisonTestCase.add_inlinec             C   s@   g }x,t tgD ] }|| _| j  |j| j  qW | j|  d S )N)r   r   r0   
load_adminr   rk   r\   )r;   screenshotsr   r   r   r   test_stacked_empty   s    z+VisualComparisonTestCase.test_stacked_emptyc             C   s@   g }x,t tgD ] }|| _| j  |j| j  qW | j|  d S )N)r   r   r0   rq   r   rk   r\   )r;   rr   r   r   r   r   test_tabular_empty   s    z+VisualComparisonTestCase.test_tabular_emptyc             C   sv   g }xbt tgD ]V}|| _| jd d d }|jjdd}|jjd|dd | j|d |j| j  qW | j	|  d S )Nr   r   rU   )slugrV   )ru   rootposition)obj)
r   r   r0   r1   objectscreaterq   r   rk   r\   )r;   rr   r   rn   rv   r   r   r   test_tabular_one_item   s    z.VisualComparisonTestCase.test_tabular_one_itemc             C   sv   g }xbt tgD ]V}|| _| jd d d }|jjdd}|jjd|dd | j|d |j| j  qW | j	|  d S )Nr   r   rU   )ru   rV   )ru   rv   rw   )rx   )
r   r   r0   r1   ry   rz   rq   r   rk   r\   )r;   rr   r   rn   rv   r   r   r   test_stacked_one_item   s    z.VisualComparisonTestCase.test_stacked_one_itemc             C   sH   g }x4t tgD ](}|| _| j  | j  |j| j  qW | j|  d S )N)r   r   r0   rq   rp   r   rk   r\   )r;   rr   r   r   r   r   test_tabular_added_item   s    z0VisualComparisonTestCase.test_tabular_added_itemc             C   sH   g }x4t tgD ](}|| _| j  | j  |j| j  qW | j|  d S )N)r   r   r0   rq   rp   r   rk   r\   )r;   rr   r   r   r   r   test_stacked_added_item   s    z0VisualComparisonTestCase.test_stacked_added_itemc             C   s   g }xt tgD ]}|| _| j  | jr4| jjdd | j  | jd}|j	d W d Q R X | jd}|j	d W d Q R X | j
  |j| j  qW g }| js| jjd}|dd	|jd
 |jd |jd |jd d g7 }| j|d|i d S )Nix  i   z#id_slugrU   z#id_children-0-slugrV   z#children-0 .deletez--block-outz%(x)s,%(y)s,%(w)s,%(h)sr?   r@   rA   rB   )r?   r@   rC   rD   rW   )r   r   r0   rq   rH   r9   r:   rp   clickable_selector	send_keys	save_formr   rk   rc   rI   rJ   rK   r\   )r;   rr   r   ro   rW   
delete_colr   r   r   test_tabular_validation_error   s,    z6VisualComparisonTestCase.test_tabular_validation_errorc             C   s   g }x|t tgD ]p}|| _| j  | j  | jd}|jd W d Q R X | jd}|jd W d Q R X | j  |j| j	  qW g }| j
s| jjd}|dd|jd |jd	 |jd
 |jd d g7 }| j|d|i d S )Nz#id_slugrU   z#id_children-0-slugrV   z#children-0 .inline-deletelinkz--block-outz%(x)s,%(y)s,%(w)s,%(h)sr?   r@   rA   rB   )r?   r@   rC   rD   rW   )r   r   r0   rq   rp   r   r   r   r   rk   rc   r9   rI   rJ   rK   r\   )r;   rr   r   ro   rW   r   r   r   r   test_stacked_validation_error   s(    z6VisualComparisonTestCase.test_stacked_validation_error)N)rd   
__module____qualname__r0   r   r   r   r   r,   classmethodr&   r3   r7   propertyr1   r<   r\   rk   rp   rs   rt   r{   r|   r}   r~   r   r   __classcell__r   r   )r2   r   r      s$   !
#		r   )distutils.spawnr   ra   r_   loggingr   r4   rL   r'   Zunittestr   Zdjango.contrib.admin.sitesr   r-   Znested_admin.tests.baser	   r
   r1   r   r   r   r   	getLoggerrd   rR   r   r   r   r   r   <module>   s    
