o
    ^iI                     @   s   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mZmZmZmZ ddlmZmZmZmZ G dd deZG d	d
 d
ZdS )    )StringIO)
HTMLParserN   )	IntSliderIntTextTextWidgetjslinkHBoxwidget_serializationwidget)
embed_dataembed_snippetembed_minimal_htmldependency_statec                   @   sv   e Zd ZdZejeddjdddieZ	ejeddjdddieZ
edjddZe jdddieZdS )	
CaseWidgetz#Widget to test dependency traversalT)
allow_nonesyncCaseWidgetModel)r   N )__name__
__module____qualname____doc__	traitletsInstancer   tagr   abUnicode_model_nameDictotherr   r   r   V/home/ubuntu/hpml_nyu/venv/lib/python3.10/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    t tj D ]}|  qd S )N)tuplewidget_module
_instances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s#J t|d	ks+J d
d | D }d|v s:J d S )N   Tdrop_defaultsviewsr/   statemanager_stater2   
view_specs      c                 S      g | ]}|d  qS 
model_namer   .0sr   r   r#   
<listcomp>.       z4TestEmbed.test_embed_data_simple.<locals>.<listcomp>IntTextModel)r   r   r   lenr(   )r*   r+   r2   datar1   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J t }t|| ttd| dks*J t|ddd}d|vs7J t }t||ddd d| vsJJ t|ddd}ttd|dks]J t }t||ddd ttd| dksvJ d S )Nr-   z crossoriginr6   F)cors	requirejsT)r   r   r@   refindallr   r   getvalue)r*   r+   codefr   r   r#   	test_cors1   s    
 zTestEmbed.test_corsc                 C   st   t d}t|}|ddksJ |ddksJ t }t|| | }|ddks/J |ddks8J 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   findr   r   rH   )r*   r+   rI   rJ   contentr   r   r#   test_escapeF   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s6J t|dks>J dd | D }d|v sMJ d|v sSJ d S )Nr-   r   d   minmaxvalueTr.   r0   r3   r2   r4      r   c                 S   r7   r8   r   r:   r   r   r#   r=   _   r>   z9TestEmbed.test_embed_data_two_widgets.<locals>.<listcomp>r?   IntSliderModel)r   r   r	   r   r   r@   r(   )r*   w1w2r2   rA   r1   rB   r   r   r#   test_embed_data_two_widgetsR   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s9J d	d
 |
 D }d|v sHJ d|v sNJ d|v sTJ d|v sZJ d|vs`J t|d|d}||d d u sqJ |d }t	|dks}J d S )Nr-   r   rP   rQ   rT   test)children	   c                 S   r7   r8   r   r:   r   r   r#   r=   y   r>   z5TestEmbed.test_embed_data_complex.<locals>.<listcomp>r?   rV   r   	LinkModel	HBoxModelTr0   r3   r2   r4   r6   )r   r   r	   r   r   r"   r   r
   r   r@   r(   r   )	r*   rW   rX   w3w4r2   rB   rA   r1   r   r   r#   test_embed_data_complexc   s,   
z!TestEmbed.test_embed_data_complexc                 C   sb   G dd dt }td}t|dd}t|d|d}| }|| t|j |jg dks/J 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   sp   t |}|dkr|dddkrd| _| j| j d S |dkr4|dddkr6d| _| j| j d S d S d S )Nscripttype z)application/vnd.jupyter.widget-state+jsonwidget-statez(application/vnd.jupyter.widget-view+jsonwidget-view)dictgetr2   statesappend)r*   r   attrsr   r   r#   handle_starttag   s   z6TestEmbed.test_snippet.<locals>.Parser.handle_starttagc                 S   s
   d| _ d S )Nrb   )r2   )r*   r   r   r   r#   handle_endtag   s   
z4TestEmbed.test_snippet.<locals>.Parser.handle_endtagc                 S   sn   | j dkrt|d }t|dksJ | jd d S | j dkr5t|}t|ts-J | jd d S d S )Nrf   r2   r5   check-widget-staterg   check-widget-view)r2   jsonloadsr@   rj   rk   
isinstancerh   )r*   rA   r3   viewr   r   r#   handle_data   s   


z2TestEmbed.test_snippet.<locals>.Parser.handle_dataN)r   r   r   r2   rj   rm   rn   ru   r   r   r   r#   Parser   s    	rv   r-   Tr.   r0   )rf   ro   rg   rp   )r   r   r   r   feedprintrj   )r*   rv   r+   r2   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    n1 s2w   Y  |
 d dksAJ W t| d S t| w )	Nr-   z	test.htmlTr.   r0   rr   <!DOCTYPE html>)r   tempfilemkdtempospathjoinr   r   openread
splitlinesshutilrmtree)r*   r+   tmpdoutputr2   rJ   rN   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s#J d S )Nr-   Tr.   r0   r   r}   )r   r   r   r   rH   r   )r*   r+   r   r2   rN   r   r   r#   test_minimal_html_filehandle   s   z&TestEmbed.test_minimal_html_filehandleN)r   r   r   r,   rC   rK   rO   rY   ra   r{   r   r   r   r   r   r#   r$      s    '$r$   )ior   html.parserr   rq   r   rF   r~   r   r   widgetsr   r   r   r   r	   r
   r   r   r&   embedr   r   r   r   r   r$   r   r   r   r#   <module>   s   (