B
    p[                 @   s   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
mZmZmZ ddlmZmZmZmZ yd dlmZ W n  ek
r   d dlmZ Y nX yd dlmZ W n  ek
r   d dlmZ Y nX G dd de
ZG d	d
 d
ZdS )    N   )	IntSliderIntTextTextWidgetjslinkHBoxwidget_serialization)
embed_dataembed_snippetembed_minimal_htmldependency_state)StringIO)
HTMLParserc               @   sv   e Zd ZdZejeddjf ddieZ	ejeddjf ddieZ
edjddZe jf ddieZdS )
CaseWidgetz#Widget to test dependency traversalT)Z
allow_nonesyncCaseWidgetModel)r   N)__name__
__module____qualname____doc__	traitletsZInstancer   tagr	   abZUnicodeZ_model_nameZDictother r   r   :lib/python3.7/site-packages/ipywidgets/tests/test_embed.pyr      s
   r   c               @   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 )	TestEmbedc             C   s$   xt tj D ]}|  qW d S )N)tupler   widgetsvaluesclose)selfwr   r   r   teardown(   s    zTestEmbed.teardownc             C   sx   t d}t|dd}t|d|d}|d d }|d }t|dksFtt|d	ksVtd
d | D }d|ksttd S )N   T)drop_defaults)viewsr'   statemanager_stater)   
view_specs      c             S   s   g | ]}|d  qS )
model_namer   ).0sr   r   r   
<listcomp>7   s    z4TestEmbed.test_embed_data_simple.<locals>.<listcomp>IntTextModel)r   r   r
   lenAssertionErrorr!   )r#   r$   r)   datar(   model_namesr   r   r   test_embed_data_simple,   s    z TestEmbed.test_embed_data_simplec             C   s   t d}t|}ttd|dks(tt }t|| ttd| dksTtt|ddd}d|ksntt }t||ddd d| kstt|ddd}ttd|dkstt }t||ddd ttd| dkstd S )Nr&   z crossoriginr-   F)ZcorsZ	requirejsT)	r   r   r3   refindallr4   r   r   getvalue)r#   r$   codefr   r   r   	test_cors:   s     
zTestEmbed.test_corsc             C   st   t d}t|}|ddks"t|ddks4tt }t|| | }|ddks^t|ddksptd S )Nz0<script A> <ScRipt> </Script> <!-- --> <b>hi</b>z
<script A>zD\u003cscript A> \u003cScRipt> \u003c/Script> \u003c!-- --> <b>hi</b>r   )r   r   findr4   r   r   r:   )r#   r$   r;   r<   contentr   r   r   test_escapeO   s    
zTestEmbed.test_escapec             C   s   t d}tddd}t|df|df t||gdd}t||gd|d}|d	 d
 }|d }t|dksltt|dks|tdd | D }d|kstd|kstd S )Nr&   r   d   )minmaxvalueT)r'   )r(   r'   r)   r*   r)   r+      r   c             S   s   g | ]}|d  qS )r.   r   )r/   r0   r   r   r   r1   h   s    z9TestEmbed.test_embed_data_two_widgets.<locals>.<listcomp>r2   IntSliderModel)r   r   r   r   r
   r3   r4   r!   )r#   w1w2r)   r5   r(   r6   r   r   r   test_embed_data_two_widgets[   s    z%TestEmbed.test_embed_data_two_widgetsc       	      C   s   t d}tddd}t|df|df t }||_t }||_||jd< ||_t|gd t|}t	|dksrt
d	d
 | D }d|kst
d|kst
d|kst
d|kst
d|kst
t|d|d}||d d kst
|d }t	|dkst
d S )Nr&   r   rB   )rC   rD   rE   Ztest)Zchildren	   c             S   s   g | ]}|d  qS )r.   r   )r/   r0   r   r   r   r1      s    z5TestEmbed.test_embed_data_complex.<locals>.<listcomp>r2   rG   r   Z	LinkModelZ	HBoxModelT)r(   r'   r)   r*   r)   r+   r-   )r   r   r   r   r   r   r   r   r   r3   r4   r!   r
   )	r#   rH   rI   Zw3Zw4r)   r6   r5   r(   r   r   r   test_embed_data_complexl   s,    
z!TestEmbed.test_embed_data_complexc             C   sf   G dd dt }td}t|dd}t|d|d}| }|| t|j |jddd	d
gksbtd S )Nc               @   s,   e Zd ZdZg Zdd Zdd Zdd ZdS )	z&TestEmbed.test_snippet.<locals>.Parserinitialc             S   sf   t |}|dkr6|dddkr6d| _| j| j n,|dkrb|dddkrbd| _| j| j d S )NZscripttype z)application/vnd.jupyter.widget-state+jsonzwidget-statez(application/vnd.jupyter.widget-view+jsonzwidget-view)dictgetr)   statesappend)r#   r   Zattrsr   r   r   handle_starttag   s    z6TestEmbed.test_snippet.<locals>.Parser.handle_starttagc             S   s
   d| _ d S )NrM   )r)   )r#   r   r   r   r   handle_endtag   s    z4TestEmbed.test_snippet.<locals>.Parser.handle_endtagc             S   sh   | j dkr6t|d }t|dks(t| jd n.| j dkrdt|}t|tsXt| jd d S )Nzwidget-stater)   r,   zcheck-widget-statezwidget-viewzcheck-widget-view)	r)   jsonloadsr3   r4   rR   rS   
isinstancerP   )r#   r5   r*   Zviewr   r   r   handle_data   s    


z2TestEmbed.test_snippet.<locals>.Parser.handle_dataN)r   r   r   r)   rR   rT   rU   rY   r   r   r   r   Parser   s
   	rZ   r&   T)r'   )r(   r'   r)   zwidget-statezcheck-widget-statezwidget-viewzcheck-widget-view)r   r   r   r   ZfeedprintrR   r4   )r#   rZ   r$   r)   Zsnippetparserr   r   r   test_snippet   s    

zTestEmbed.test_snippetc          	   C   s   t d}t }z`tj|d}t|dd}t||d|d t|d}|	 }W d Q R X |
 d dksntW d t| X d S )	Nr&   z	test.htmlT)r'   )r(   r'   r)   rr   z<!DOCTYPE html>)r   tempfileZmkdtempospathjoinr   r   openread
splitlinesr4   shutilZrmtree)r#   r$   Ztmpdoutputr)   r<   r@   r   r   r   test_minimal_html_filename   s    z$TestEmbed.test_minimal_html_filenamec             C   sJ   t d}t }t|dd}t||d|d | }| d dksFtd S )Nr&   T)r'   )r(   r'   r)   r   z<!DOCTYPE html>)r   r   r   r   r:   re   r4   )r#   r$   rg   r)   r@   r   r   r   test_minimal_html_filehandle   s    z&TestEmbed.test_minimal_html_filehandleN)r   r   r   r%   r7   r=   rA   rJ   rL   r]   rh   ri   r   r   r   r   r   &   s   '$r   )rV   r`   r8   r_   rf   r   r    r   r   r   r   r   r   r	   Zembedr
   r   r   r   ior   ImportErrorZhtml.parserr   r   r   r   r   r   r   <module>   s"   $