B
    @\.                 @   s   d dl mZmZmZmZ d dlZe d dlZd dlmZ d dl	m
Z
 d dl	mZ ejdrdedddd	d
ddgZdZdd Zdd Zdd Zdd ZG dd deZdd Zdd ZdS )    )absolute_importdivisionprint_functionunicode_literalsN)Model)_get_cdn_urlsZBOKEH_RESOURCESz2Cannot run the unit tests with BOKEH_RESOURCES setZtracedebuginfowarnerrorZfatalzBokeh.set_log_level("info");c              C   s   t  } | jdkstd S )Ninline)	resourcesJSResourcesmodeAssertionError)r r   9lib/python3.7/site-packages/bokeh/tests/test_resources.py(test_js_resources_default_mode_is_inline1   s    r   c              C   sp   t jdd} | jdkst| jdks(tt| jdks:t| jd tksLtt| ddks^t| j	g ksltd S )Nr   )r   F   css_raw)
r   r   r   r   devlenjs_rawDEFAULT_LOG_JS_RAWhasattrmessages)r   r   r   r   -test_js_resources_inline_has_no_css_resources6   s    r   c              C   s   t  } | jdkstd S )Nr   )r   CSSResourcesr   r   )r   r   r   r   )test_css_resources_default_mode_is_inlineC   s    r    c              C   s^   t jdd} | jdkst| jdks(tt| jdks:tt| ddksLt| jg ksZtd S )Nr   )r   F   r   )	r   r   r   r   r   r   r   r   r   )r   r   r   r   test_inline_css_resourcesH   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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 )"TestResourcesc             C   s   t  }|jdkstd S )Nr   )r   	Resourcesr   r   )selfr   r   r   r   
test_basicT   s    zTestResources.test_basicc          	   C   sl   t  }x<tD ]4}||_|j|ks&t|js|jd d| kstqW tt	 t
|dd W d Q R X d S )Nr   zBokeh.set_log_level("%s");	log_levelfoo)r   r$   
LOG_LEVELSr'   r   r   r   pytestraises
ValueErrorsetattr)r%   r   levelr   r   r   test_log_levelX   s    
zTestResources.test_log_levelc             C   s$   t jjdkstt jjdks td S )Ncdnr   )r   ZCDNr   r   ZINLINE)r%   r   r   r   test_module_attrsb   s    zTestResources.test_module_attrsc             C   sp   t jdd}|jdkst|jdks(tt|jdks:t|jd tksLtt|jdks^t|j	g ksltd S )Nr   )r   Fr   r   r!   )
r   r$   r   r   r   r   r   r   r   r   )r%   r   r   r   r   test_inlinef   s    zTestResources.test_inlinec             C   s2   d}t |d}|d dgdd }d|ks.td S )Nz	0.0.1dev2)versionZurlsZbokehZjsr   z	bokeh/dev)r   r   )r%   Zdev_versionresultZurlr   r   r   test_get_cdn_urlsp   s    
zTestResources.test_get_cdn_urlsc             C   s   dt _t jddd}|jdks"t|jdks0t|jtgks@t|jg ksNt|j	g ks\tdt _t jddd}|j	dddgkstd S )	Nz1.0r0   )r   r3   Fz	1.0-1-abczRequesting CDN BokehJS version '1.0' from Bokeh development version '1.0-1-abc'. This configuration is unsupported and may not work!r
   )texttype)
r   __version__r$   r   r   r   r   r   r   r   )r%   r   r   r   r   test_cdnv   s    zTestResources.test_cdnc             C   s   t jdd}|jdkst|jdks(t|jtgks8t|jg ksFt|jg ksTt|j	ddddgksjt|j
dd	d
gks~td S )Nserver)r   Fz,http://localhost:5006/static/js/bokeh.min.jsz4http://localhost:5006/static/js/bokeh-widgets.min.jsz3http://localhost:5006/static/js/bokeh-tables.min.jsz/http://localhost:5006/static/js/bokeh-gl.min.jsz.http://localhost:5006/static/css/bokeh.min.cssz6http://localhost:5006/static/css/bokeh-widgets.min.cssz5http://localhost:5006/static/css/bokeh-tables.min.css)r   r$   r   r   r   r   r   r   r   js_files	css_files)r%   r   r   r   r   test_server_default   s    z!TestResources.test_server_defaultc             C   sh   t jddd}|jtgkst|jg ks,t|jg ks:t|jddddgksPt|jdd	d
gksdtd S )Nr:   zhttp://foo/)r   root_urlz!http://foo/static/js/bokeh.min.jsz)http://foo/static/js/bokeh-widgets.min.jsz(http://foo/static/js/bokeh-tables.min.jsz$http://foo/static/js/bokeh-gl.min.jsz#http://foo/static/css/bokeh.min.cssz+http://foo/static/css/bokeh-widgets.min.cssz*http://foo/static/css/bokeh-tables.min.css)	r   r$   r   r   r   r   r   r;   r<   )r%   r   r   r   r   test_server_root_url   s    z"TestResources.test_server_root_urlc             C   sh   t jddd}|jtgkst|jg ks,t|jg ks:t|jddddgksPt|jdd	d
gksdtd S )Nr:    )r   r>   zstatic/js/bokeh.min.jszstatic/js/bokeh-widgets.min.jszstatic/js/bokeh-tables.min.jszstatic/js/bokeh-gl.min.jszstatic/css/bokeh.min.cssz static/css/bokeh-widgets.min.csszstatic/css/bokeh-tables.min.css)	r   r$   r   r   r   r   r   r;   r<   )r%   r   r   r   r   test_server_root_url_empty   s    z(TestResources.test_server_root_url_emptyc             C   sF   dd }t jdd|d}|jdddd	gks.t|jd
ddgksBtd S )Nc             S   s   | d S )Nz?v=VERSIONEDr   )pathr   r   r   	versioner   s    z;TestResources.test_server_with_versioner.<locals>.versionerr:   zhttp://foo/)r   r>   Zpath_versionerz-http://foo/static/js/bokeh.min.js?v=VERSIONEDz5http://foo/static/js/bokeh-widgets.min.js?v=VERSIONEDz4http://foo/static/js/bokeh-tables.min.js?v=VERSIONEDz0http://foo/static/js/bokeh-gl.min.js?v=VERSIONEDz/http://foo/static/css/bokeh.min.css?v=VERSIONEDz7http://foo/static/css/bokeh-widgets.min.css?v=VERSIONEDz6http://foo/static/css/bokeh-tables.min.css?v=VERSIONED)r   r$   r;   r   r<   )r%   rC   r   r   r   r   test_server_with_versioner   s    z(TestResources.test_server_with_versionerc             C   s   t jdd}|jdkst|jdks(tt|jdks:t|jg ksHt|jg ksVtt jddd}|jt	dgksvt|jg kst|jg kstd S )	Nz
server-dev)r   r:   T   zhttp://foo/)r   r>   zBokeh.settings.dev = true)
r   r$   r   r   r   r   r   r   r   r   )r%   r   r   r   r   test_server_dev   s    zTestResources.test_server_devc             C   sX   t jdd}|jdkst|jdks(t|jtgks8t|jg ksFt|jg ksTtd S )Nrelative)r   F)	r   r$   r   r   r   r   r   r   r   )r%   r   r   r   r   test_relative   s    zTestResources.test_relativec             C   sZ   t jdd}|jdkst|jdks(t|jtdgks:t|jg ksHt|jg ksVtd S )Nzrelative-dev)r   rG   TzBokeh.settings.dev = true)	r   r$   r   r   r   r   r   r   r   )r%   r   r   r   r   test_relative_dev   s    zTestResources.test_relative_devc             C   sX   t jdd}|jdkst|jdks(t|jtgks8t|jg ksFt|jg ksTtd S )Nabsolute)r   F)	r   r$   r   r   r   r   r   r   r   )r%   r   r   r   r   test_absolute   s    zTestResources.test_absolutec             C   sZ   t jdd}|jdkst|jdks(t|jtdgks:t|jg ksHt|jg ksVtd S )Nzabsolute-dev)r   rJ   TzBokeh.settings.dev = true)	r   r$   r   r   r   r   r   r   r   )r%   r   r   r   r   test_absolute_dev   s    zTestResources.test_absolute_devc          
   C   s   t t td W d Q R X x0dD ](}t t tj|dd W d Q R X q&W x0dD ](}t t tj|dd W d Q R X qXW x0dD ](}t t tj|dd W d Q R X qW d S )Nr(   )r   r0   r:   z
server-devrJ   zabsolute-dev)Zroot_dir)r   r:   z
server-devrG   zrelative-devrJ   zabsolute-dev)r3   )r   r0   rG   zrelative-devrJ   zabsolute-dev)r>   )r*   r+   r,   r   r$   )r%   r   r   r   r   test_argument_checks   s    


z"TestResources.test_argument_checksN)__name__
__module____qualname__r&   r/   r1   r2   r5   r9   r=   r?   rA   rD   rF   rH   rI   rK   rL   rM   r   r   r   r   r#   R   s    

				r#   c              C   s   G dd dt } G dd dt }G dd dt }t }d|jksFtd|jksTtd	|jksbtd
|jksptd|jks~td|jkst|jddkst|jddkst|jd
dkst|jddkstdS )z This test method has to be at the end of the test modules because
    subclassing a Model causes the CustomModel to be added as a MetaModel and
    messes up the Resources state for the other tests.
    c               @   s   e Zd ZdZdZdS )zAtest_external_js_and_css_resource_embedding.<locals>.CustomModel1external_js_1external_css_1N)rN   rO   rP   __javascript____css__r   r   r   r   CustomModel1  s   rU   c               @   s   e Zd ZddgZddgZdS )zAtest_external_js_and_css_resource_embedding.<locals>.CustomModel2external_js_2external_js_3external_css_2external_css_3N)rN   rO   rP   rS   rT   r   r   r   r   CustomModel2  s   rZ   c               @   s   e Zd ZddgZddgZdS )zAtest_external_js_and_css_resource_embedding.<locals>.CustomModel3rQ   rW   rR   rX   N)rN   rO   rP   rS   rT   r   r   r   r   CustomModel3  s   r[   rQ   rR   rV   rW   rX   rY      N)r   r   r$   r;   r   r<   count)rU   rZ   r[   r   r   r   r   +test_external_js_and_css_resource_embedding  s    r^   c              C   s   G dd dt } G dd dt }t }|jd|jdk sDt|jd|jdks`t|jd	|jd
ks|td S )Nc               @   s   e Zd ZdZdS )z:test_external_js_and_css_resource_ordering.<locals>.ZClassz_classN)rN   rO   rP   rS   r   r   r   r   ZClass5  s   r`   c               @   s   e Zd ZdZdS )z:test_external_js_and_css_resource_ordering.<locals>.AClassa_classN)rN   rO   rP   rS   r   r   r   r   AClass8  s   rb   ra   r_   rY   rX   rW   rV   )r   r   r$   r;   indexr   r<   )r`   rb   r   r   r   r   *test_external_js_and_css_resource_ordering4  s    rd   )Z
__future__r   r   r   r   r*   osZbokeh.modelsr   Zbokeh.resourcesr   r   environgetRuntimeErrorr)   r   r   r   r    r"   objectr#   r^   rd   r   r   r   r   <module>   s$    
 ?$