σ
mάJ]c           @` sΈ  d  Z  d d l m Z m Z m Z m Z d d l Z e j e  Z	 d d l
 m Z d d l m Z d d l m Z d d l m Z d d l m Z d d	 l m Z d> Z d"   Z d# Z d$   Z d% Z d&   Z d'   Z d( e f d)     YZ d* e f d+     YZ d, e f d-     YZ  d. d/  Z! d0   Z" d. e# d d1  Z% d2   Z& d3   Z' d4   Z( d d5  Z) d6   Z* d7   Z+ d8   Z, d9   Z- d:   Z. d;   Z/ e0 d<  Z1 d=   Z2 d S(?   u.    Provide tools for executing Selenium tests.

i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t   TimeoutException(   t   ActionChains(   t   Keys(   t   WebDriverWait(   t   Button(   t   make_idu	   alt_clicku   ButtonWrapperu   copy_table_rowsu   COUNTu   element_to_finish_resizingu   element_to_start_resizingu   enter_text_in_cellu#   enter_text_in_cell_with_click_enteru   enter_text_in_elementu   get_page_elementu   get_table_cellu   get_table_column_cellsu   get_table_rowu   get_table_selected_rowsu   hover_elementu   INITu   paste_valuesu   RECORDu   RESULTSu   SCROLLu   select_element_and_press_keyu   shift_clicku   sort_table_columnu   wait_for_canvas_resizec         C` s   d |  S(   Nu   Bokeh._testing.count(%r);(    (   t   key(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   COUNTF   s    u   Bokeh._testing.init();c         C` s   d |  | f S(   Nu   Bokeh._testing.record(%r, %s);(    (   R
   t   value(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   RECORDK   s    u   return Bokeh._testing.resultsc         C` s   d |  S(   NuΎ   
    var elt = document.getElementsByClassName("bk-canvas-events")[0];
    var event = new WheelEvent('wheel', { deltaY: %f, clientX: 100, clientY: 100} );
    elt.dispatchEvent(event);
    (    (   t   amt(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   SCROLLP   s    c         C` sG   t  |   } | j t j  | j |  | j t j  | j   d  S(   N(   R   t   key_downR   t   METAt   clickt   key_upt   perform(   t   drivert   elementt   actions(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt	   alt_clickW   s
    t   ButtonWrapperc           B` s   e  Z d    Z d   Z RS(   c         C` sE   d t    |  _ t d | d |  j g  |  _ |  j j d |  d  S(   Nu   button-t   labelt   css_classesu   button_click(   R	   t   refR   t   objt   js_on_event(   t   selfR   t   callback(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   __init__`   s    c         C` s$   | j  d |  j  } | j   d  S(   Nu   .%s .bk-btn(   t   find_element_by_css_selectorR   R   (   R   R   t   button(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyR   e   s    (   t   __name__t
   __module__R!   R   (    (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyR   ^   s   	t   element_to_start_resizingc           B` s    e  Z d  Z d   Z d   Z RS(   uD    An expectation for checking if an element has started resizing
    c         C` s    | |  _  |  j  j d |  _ d  S(   Nu   width(   R   t   sizet   previous_width(   R   R   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyR!   m   s    	c         C` s4   |  j  j d } |  j | k r# t S| |  _ t Sd  S(   Nu   width(   R   R'   R(   t   Truet   False(   R   R   t   current_width(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   __call__q   s
    	(   R$   R%   t   __doc__R!   R,   (    (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyR&   i   s   	t   element_to_finish_resizingc           B` s    e  Z d  Z d   Z d   Z RS(   uF    An expectation for checking if an element has finished resizing

    c         C` s    | |  _  |  j  j d |  _ d  S(   Nu   width(   R   R'   R(   (   R   R   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyR!   ~   s    	c         C` s4   |  j  j d } |  j | k r# t S| |  _ t Sd  S(   Nu   width(   R   R'   R(   R)   R*   (   R   R   R+   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyR,      s
    	(   R$   R%   R-   R!   R,   (    (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyR.   y   s   	i   c         C` s.   t  |   } | j | | |  | j   d  S(   N(   R   t   send_keys_to_elementR   (   R   R   R
   t   press_numberR   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   select_element_and_press_key   s    c         C` s#   t  |   j |  } | j   d  S(   N(   R   t   move_to_elementR   (   R   R   t   hover(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   hover_element   s    c         C` s¨   t  |   } | j |  | d k r2 | j   n | d k rK | j   n  | ra | t j 7} n  | rw | j |  n  | j |  | r | j |  n  | j	   d  S(   Ni   i   (
   R   R2   R   t   double_clickR   t   ENTERR   t	   send_keysR   R   (   R   R   t   textR   t   entert   modR   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   enter_text_in_element   s      c         C` sE   t  |   } | j |  | j   | j | t j  | j   d  S(   N(   R   R2   R5   R7   R   R6   R   (   R   t   cellR8   R   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   enter_text_in_cell‘   s
    
c         C` sL   t  |   } | j |  | j   | j t j | t j  | j   d  S(   N(   R   R2   R   R7   R   R6   R   (   R   R<   R8   R   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt#   enter_text_in_cell_with_click_enter¨   s
    
c         C` sΟ   t  |   } t |  | d  } | j |  | j   | j t j  x8 | d D], } t |  |  } | j |  | j   qQ W| j t j  | j t j  | j	 t j
  | j t j  | j   d  S(   Ni    i   (   R   t   get_table_rowR2   R   R   R   t   SHIFTR   t   CONTROLR7   t   INSERTR   (   R   t   rowsR   t   rowt   r(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   copy_table_rows―   s    
c         C` s`   t  |   } | r" | j |  n  | j t j  | j t j  | j t j  | j   d  S(   N(	   R   R2   R   R   R@   R7   RB   R   R   (   R   t   elR   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   paste_valuesΐ   s    c         C` sn   g  } |  j  d  } | j d  } xC t |  D]5 \ } } | j  d | | f  } | j | j  q1 W| S(   Nu   .grid-canvasu
   .slick-rowu   .slick-cell.l%d.r%d(   R"   t   find_elements_by_css_selectort	   enumeratet   appendR8   (   R   t   colt   resultt   gridRC   t   iRD   t   elt(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   get_table_column_cellsΚ   s    c         C` s   |  j  d |  S(   Nu%   .grid-canvas .slick-row:nth-child(%d)(   R"   (   R   RD   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyR?   Σ   s    c         C` s|   t    } |  j d  } | j d  } xN t |  D]@ \ } } | j d  } d | j d  k r4 | j |  q4 q4 W| S(   Nu   .grid-canvasu
   .slick-rowu   .slick-cell.l1.r1u   selectedu   class(   t   setR"   RI   RJ   t   get_attributet   add(   R   RM   RN   RC   RO   RD   RP   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   get_table_selected_rowsΦ   s    	c         C` s   |  j  d | | f  S(   Nu*   .grid-canvas .slick-row:nth-child(%d) .r%d(   R"   (   R   RD   RL   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   get_table_cellΰ   s    c         C` s   |  j  |  S(   N(   R"   (   R   t   element_selector(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   get_page_elementγ   s    c         C` sG   t  |   } | j t j  | j |  | j t j  | j   d  S(   N(   R   R   R   R@   R   R   R   (   R   R   R   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   shift_clickζ   s
    c         C` s4   |  j  d |  } | j   | r0 | j   n  d  S(   Nu8   .slick-header-columns .slick-header-column:nth-child(%d)(   R"   R   (   R   RL   t   doubleRP   (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   sort_table_columnν   s    
 c         C` sQ   y9 t  | d  } | j t |    | j t |    Wn t k
 rL n Xd S(   u   

    i   N(   R   t   untilR&   R.   R   (   t   canvast   test_drivert   wait(    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   wait_for_canvas_resizeς   s    (   u	   alt_clicku   ButtonWrapperu   copy_table_rowsu   COUNTu   element_to_finish_resizingu   element_to_start_resizingu   enter_text_in_cellu#   enter_text_in_cell_with_click_enteru   enter_text_in_elementu   get_page_elementu   get_table_cellu   get_table_column_cellsu   get_table_rowu   get_table_selected_rowsu   hover_elementu   INITu   paste_valuesu   RECORDu   RESULTSu   SCROLLu   select_element_and_press_keyu   shift_clicku   sort_table_columnu   wait_for_canvas_resize(3   R-   t
   __future__R    R   R   R   t   loggingt	   getLoggerR$   t   logt   selenium.common.exceptionsR   t'   selenium.webdriver.common.action_chainsR   t   selenium.webdriver.common.keysR   t   selenium.webdriver.support.uiR   t   bokeh.modelsR   t   bokeh.util.serializationR	   t   __all__R   t   INITR   t   RESULTSR   R   t   objectR   R&   R.   R1   R4   R)   t   NoneR;   R=   R>   RF   RH   RQ   R?   RU   RV   RX   RY   R*   R[   R`   (    (    (    s;   lib/python2.7/site-packages/bokeh/_testing/util/selenium.pyt   <module>	   sr   "	                       								
				
			