ó
_y]c           @   s<  d  d l  Z  d  d l Z d  d l Z e  j d d k rJ d  d l m Z n d  d l m Z d  d l m	 Z	 m
 Z
 d  d l m Z d  d l m Z d  d	 l m Z d
 d l m Z d Z e ƒ  Z e j d „  ƒ Z e j j d e e g ƒ d „  ƒ Z d „  Z d „  Z e j j e d d ƒd e j f d „  ƒ  Yƒ Z  d S(   iÿÿÿÿNi    t   2(   t   InputSplitter(   t   TransformerManager(   t   QtCoret   QtGui(   t
   load_qtest(   t   ConsoleWidget(   t   JupyterQtConsoleAppi   (   t
   no_displayi N  c         C   sF   t  ƒ  } | j d g  ƒ |  j | j ƒ t | j _ | j j ƒ  | S(   s   Qtconsole fixture.t   argv(   R   t
   initializet	   addWidgett   windowt   Falset   confirm_exitt   show(   t   qtbott   console(    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt	   qtconsole   s    	t   debugc   
   	      sù  |  j  } | j ‰ ˆ j ‰  ˆ  j ƒ  } ˆ j ‡ f d †  d t ƒ| j ƒ  d k s[ t ‚ d d d d d g } x4 | D], } ˆ j ˆ  | ƒ ˆ j	 ˆ  t
 j j ƒ qw Wˆ j ˆ j ƒ ' ˆ j	 ˆ  t
 j j d	 t
 j j ƒWd
 QXt ‡  ‡ ‡ f d † } | r>| d d t ƒˆ j	 ˆ  t
 j j ƒ t ‡  ‡ f d † } n  | j ƒ  } x t d ƒ D] }	 | d ƒ qWW| j ƒ  | k sƒt ‚ | j ƒ  | j ƒ  d } | j | ƒ x t d ƒ D] }	 | d ƒ q·W| j ƒ  | k sãt ‚ x t d ƒ D] }	 | d ƒ qðW| j ƒ  | k st ‚ | j ƒ  } | d d t ƒˆ j d ƒ | j ƒ  | k s]t ‚ | j ƒ  | j ƒ  } | j | ƒ ˆ j d ƒ | j ƒ  | k s¥t ‚ | j ƒ  | j ƒ  d d } | j | ƒ ˆ j d ƒ | j ƒ  | k sõt ‚ d
 S(   s(   
    Make sure the scrolling works.
    c              s   ˆ  j  d  k	 S(   N(   t   _prompt_htmlt   None(    (   t   shell(    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   <lambda>.   t    t   timeouti    s   import times   def print_numbers():s       for i in range(1000):s          print(i)s          time.sleep(.01)t   modifierNc      	      sz   ˆ j  ˆ  |  ƒ | rT ˆ j ˆ j ƒ ' ˆ j ˆ  t j j d t j j ƒWd  QXn" ˆ j ˆ  t j j d t j j ƒd  S(   NR   (   t	   keyClickst
   waitSignalt   executedt   keyClickR   t   Qtt	   Key_Entert   ShiftModifier(   t   linet   block(   t   controlR   R   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   run_lineB   s    s   %debug print()R#   c            sY   ˆ j  ˆ  d |  ƒ ˆ j ˆ  t j j d t j j ƒ| rU ˆ j ‡  f d †  ƒ n  d  S(   Nt   !R   c              s    ˆ  j  ƒ  j ƒ  j ƒ  d d k S(   Niÿÿÿÿs   ipdb>(   t   toPlainTextt   stript   split(    (   R$   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR   W   s   (   R   R   R   R   R    R!   t	   waitUntil(   R"   R#   (   R$   R   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR%   Q   s    i   s   a = 1i   t   ai
   s   print_numbers()iè  i   (   R   t   active_frontendt   _controlt   verticalScrollBarR*   t   SHELL_TIMEOUTt   valuet   AssertionErrorR   R   R   R   R    R   R   R!   t   TrueR   t   ranget   pageStept   setValuet   waitt   maximum(
   R   R   R   R   t
   scroll_bart   codeR"   R%   t   prev_positiont   i(    (   R$   R   R   sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_scroll"   s^    				
	c            sg  |  j  } | j ‰ ˆ j ‰  | j ‡ f d †  d t ƒ| j ˆ j ƒ  ˆ j d ƒ Wd QXt j	 d d k ry d } n d } ˆ j d	 | d
 ƒ | j ‡  f d †  ƒ | j
 ˆ  d ƒ | j ˆ  t j j ƒ | j ‡ f d †  ƒ | j ˆ  d d t j j ƒx* t d ƒ D] } | j ˆ  t j j ƒ qW| j ‡ f d †  d t ƒd ˆ  j ƒ  k sct ‚ d S(   s   
    Test input function
    c              s   ˆ  j  d  k	 S(   N(   R   R   (    (   R   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR   •   R   R   s   import timeNi    R    t	   raw_inputt   inputs   print(s   ('name: ')); time.sleep(3)c              s   ˆ  j  ƒ  j ƒ  d d k S(   Niÿÿÿÿs   name:(   R'   R)   (    (   R$   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR   ¡   R   t   testc              s   ˆ  j  S(   N(   t   _reading(    (   R   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR   ¥   R   t   zR   i
   c              s   ˆ  j  d  k	 S(   N(   R   R   (    (   R   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR   ©   R   s   name: test
test(   R   R,   R-   R*   R/   R   R   t   executet   syst   versionR   R   R   R   R    t   ControlModifierR3   t   Key_BackspaceR'   R1   (   R   R   R   t   input_functionR;   (    (   R$   R   sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt
   test_inputŒ   s*    				c            s  |  j  } | j ‰ ˆ j ‰  | j ‡ f d †  d t ƒd } | j ˆ  | ƒ | j ˆ  t j j	 d t j j
 ƒ| j ‡  f d †  ƒ | j ˆ  d ƒ | j d ƒ | j ˆ  t j j ƒ | j ˆ  d ƒ | j d ƒ ˆ  j ƒ  j ƒ  j ƒ  d	 d
 k sý t ‚ d S(   sj   
    Make sure the cursor works while debugging

    It might not because the console is "_executing"
    c              s   ˆ  j  d  k	 S(   N(   R   R   (    (   R   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR   º   R   R   s   %debug range(1)R   c              s    ˆ  j  ƒ  j ƒ  j ƒ  d d k S(   Niÿÿÿÿs   ipdb>(   R'   R(   R)   (    (   R$   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR   Ä   R   t   abdid   t   ciÿÿÿÿt   abcdN(   R   R,   R-   R*   R/   R   R   R   R   R    R!   R6   t   Key_LeftR'   R(   R)   R1   (   R   R   R   R9   (    (   R$   R   sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt
   test_debug¯   s"    			t   reasons   Doesn't work without a displayt   TestConsoleWidgetc           B   s€   e  Z e d  „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z RS(   c         C   sJ   t  j j ƒ  |  _ |  j d k r6 t  j g  ƒ |  _ n  |  j j t ƒ d S(   s3    Create the application for the test case.
        N(   R   t   QApplicationt   instancet   _appR   t   setQuitOnLastWindowClosedR   (   t   cls(    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt
   setUpClassÒ   s    c         C   s   t  j j ƒ  d S(   s    Exit the application.
        N(   R   RP   t   quit(   RT   (    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   tearDownClassÛ   s    c         C   s0   | j  | j ƒ | j ƒ  } |  j | | ƒ d  S(   N(   t   selectt   Documentt   selectedTextt   assertEqual(   t   selft   cursort   textt	   selection(    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   assert_text_equalá   s    c         C   s‹   t  ƒ  } | j ƒ  } d d d d g } d d d d g } xK t | ƒ D]= \ } } | j | | ƒ |  j | | | ƒ | j d ƒ qF Wd	 S(
   s5    Are special characters displayed correctly?
        s   xyz=
s	   foo
bar
s
   foo
bar
s
   abcxyz=u   x=zâ€©u   fooâ€©barâ€©s   x=zR   N(   R   t   _get_prompt_cursort	   enumeratet   _insert_plain_textR`   t
   insertText(   R\   t   wR]   t   test_inputst   expected_outputsR;   R^   (    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_special_charactersæ   s    			c         C   sÅ  t  j } t  j j d ƒ } t  j j d ƒ } t  j j d ƒ } t  j j } t j } t	 ƒ  } | j
 ƒ  } | j | d ƒ | j }	 t j }
 |  j |
 j ƒ  d ƒ | | t  j d d ƒ | | | ƒ } | j |	 | ƒ |  j |
 j ƒ  t ƒ |  j |
 j ƒ  d ƒ | | t  j d d ƒ | | | ƒ } | j |	 | ƒ |  j |
 j ƒ  t ƒ |  j |
 j ƒ  d ƒ | | t  j d d ƒ | | | ƒ } | j |	 | ƒ |  j |
 j ƒ  t ƒ |  j |
 j ƒ  d ƒ d  S(   Ni    s*   <a href="http://python.org">written in</a>u    i2   i   i   s   http://python.org(   R   R   t   MouseButtont   MouseButtonst   KeyboardModifierst   QEventt	   MouseMoveR   t   QMouseEventR   Ra   t   _insert_htmlR-   t   QToolTipR[   R^   t   QPointt   eventFiltert	   isVisibleR   R2   (   R\   t   noKeyst   noButtont	   noButtonst   noModifiersRm   Rn   Re   R]   t   objt   tipt   elsewhereEventt   overTextEventt   stillOverTextEvent(    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_link_handlingú   s6    					c         C   sQ   t  ƒ  } |  j | j ƒ  t j j | ƒ ƒ |  j | j ƒ  t j j | ƒ ƒ d  S(   N(   R   R[   t   widthR   t   QWidgett   height(   R\   Re   (    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_width_height  s    	"c         C   sš  t  ƒ  } d | _ | j j ƒ  } | j d ƒ x! t d ƒ D] } | j d ƒ q; W| j ƒ  |  j | j	 ƒ  d ƒ |  j | j
 | j ƒ  ƒ |  j | j | j
 t | j ƒ ƒ | j d ƒ |  j | j
 | j ƒ  t d ƒ ƒ |  j | j | j
 t | j ƒ ƒ | j ƒ  |  j | j
 | j ƒ  ƒ |  j | j | j
 t | j ƒ ƒ | j d d t ƒ|  j | j
 | j ƒ  ƒ |  j | j | j
 t | j ƒ ƒ d S(   sL   Test the cursors that keep track of where the prompt begins and
        endss   prompt>i
   i	   s   line
R"   t   before_promptN(   R   t   _promptR-   t   documentt   setMaximumBlockCountR3   t   _append_plain_textt   _show_promptR[   t
   blockCountt   _prompt_post   _get_end_post   _append_before_prompt_post   lenR2   (   R\   Re   t   doct   _(    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_prompt_cursors#  s0    		

c         C   s  t  ƒ  } | j d ƒ d | _ | j ƒ  | j } | j ƒ  } | j | d ƒ | j ƒ  | j | ƒ | j	 ƒ  t
 j | t j j t j j ƒ t j j ƒ  j ƒ  } |  j | d ƒ | j	 ƒ  t
 j | t j j t j j ƒ t j j ƒ  j ƒ  } |  j | d ƒ d  S(   Ns   Header
s   prompt>s   if:
    passs   if:
>     passs   Header
prompt>if:
>     pass(   R   R†   Rƒ   R‡   R-   t   _get_cursort   _insert_plain_text_into_buffert   clearSelectiont   setTextCursort   select_all_smartt   QTestR   R   R   t   Key_CRE   R   t   qAppt	   clipboardR^   R[   (   R\   Re   R$   R]   t   copied(    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_select_allM  s"    		
	


c         C   s¿  t  ƒ  } | j d ƒ d | _ | j ƒ  | j } | j d ƒ |  j | j ƒ  d ƒ | j d ƒ | j ƒ  } | j	 | j
 ƒ  d ƒ | j | ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ | j d ƒ t j j ƒ  j d ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ |  j | j ƒ  j ƒ  d	 ƒ | j d ƒ t j j ƒ  j d
 ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ |  j | j ƒ  j ƒ  d	 ƒ | j d ƒ t j j ƒ  j d ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ |  j | j ƒ  j ƒ  d ƒ |  j | j ƒ  j d ƒ j ƒ  d ƒ |  j | j ƒ  j d	 ƒ j ƒ  d ƒ |  j | j ƒ  j d ƒ j ƒ  d ƒ | j d ƒ t j j ƒ  j d ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ | j d ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ t j | t j j t j j ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ | j d ƒ | j ƒ  } | j	 d ƒ | j | ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ | j d ƒ | j ƒ  } | j	 d ƒ | j | ƒ t j | t j j t j j ƒ |  j | j ƒ  d ƒ | j d ƒ | j ƒ  } | j	 d  ƒ | j | ƒ t j | t j j ƒ |  j | j ƒ  j
 ƒ  d! ƒ t j | t j j ƒ |  j | j ƒ  j
 ƒ  d  ƒ d" S(#   s,   Test the event handling code for keypresses.s   Header
s   prompt>s
   test inputi   s   test ins   test input s   pasted texts   test input pasted texti   s       pasted texts   line1
line2
line3s   test input line1
line2
line3i   i   s   prompt>test input line1s   > line2s   > line3s       s       If 1:
        passs;   foo = ['foo', 'foo', 'foo',    
       'bar', 'bar', 'bar']s6   foo = ['foo', 'foo', 'foo',    
       'bar', 'bar', 's(   foo = ['foo', 'foo', 'foo',    
       's    foo = ['foo', 'foo', 'foo',    
s   foo = ['foo', 'foo', 'foo',i#   s7   foo = ['foo', 'foo', ',    
       'bar', 'bar', 'bar']s1   foo = ['foo', 'foo', 
       'bar', 'bar', 'bar']s)   foo = ['foo', 'foo', 'bar', 'bar', 'bar']i0   s4   foo = ['foo', 'foo', 'foo',    
'bar', 'bar', 'bar']s   line 1
line 2
line 3i   i   N(   R   R†   Rƒ   R‡   R-   t   _set_input_bufferR[   t   _get_input_buffert
   textCursort   setPositiont   positionR“   R•   R   R   R   t   Key_KRE   R   R—   R˜   t   setTextt   Key_VR„   Rˆ   t   findBlockByNumberR^   RF   t
   Key_Deletet	   Key_RightRL   (   R\   Re   R$   RJ   (    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_keypressesf  s¶    		
	c         C   s¹  t  ƒ  } | j d ƒ d | _ | j ƒ  | j } | j d ƒ | j ƒ  } | j ƒ  } | j d ƒ | j | t	 j
 j ƒ | j | ƒ t j | t j j ƒ |  j | j ƒ  d ƒ | j d ƒ | j ƒ  } | j ƒ  } | j d ƒ | j | t	 j
 j ƒ | j | ƒ t j | t j j ƒ |  j | j ƒ  d ƒ | j d ƒ | j ƒ  } | j ƒ  } | j d ƒ | j | t	 j
 j ƒ | j | ƒ t j | t j j ƒ |  j | j ƒ  d	 ƒ d
 S(   s;   Test the event handling code for indent/dedent keypresses .s   Header
s   prompt>R   s   If 1:
    passs       If 1:
        passs    If 2:
     passs       If 2:
        passs       If 3:
        passs   If 3:
    passN(   R   R†   Rƒ   R‡   R-   R›   R   RŸ   Rž   R   t   QTextCursort
   KeepAnchorR“   R•   R   R   R   t   Key_TabR[   Rœ   t   Key_Backtab(   R\   Re   R$   RJ   t   pos(    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_indentç  s:    		
	c      
      s;  d t  f ‡  ‡ f d †  ƒ  Y} t ƒ  } | j ƒ  } ‡  f d †  | _ | ƒ  | _ t  ƒ  ‰ g  ‰  | j d d t ƒ|  j ˆ  d g ƒ g  ‰  | j t	 d t	 d ˆ ƒ d t	 d	 d
 d d ƒ ƒ ƒ |  j
 | d ƒ |  j ˆ  g  ƒ t  ƒ  ‰ | j d d t ƒ|  j ˆ  d g ƒ g  ‰  | j t	 d t	 d ˆ ƒ d t	 d	 d d d ƒ ƒ ƒ |  j ˆ  d t f g ƒ g  ‰  |  j
 | d ƒ t  ƒ  ‰ | j d d t ƒ|  j ˆ  d g ƒ g  ‰  |  j
 | d ƒ t j t j j ƒ } | j | | ƒ |  j
 | d ƒ | j t	 d t	 d ˆ ƒ d t	 d	 d d d ƒ ƒ ƒ |  j ˆ  g  ƒ d  S(   Nt   TestKernelClientc              s   e  Z ‡  ‡ f d  †  Z RS(   c            s   ˆ  j  | ƒ ˆ S(   N(   t   append(   R\   t   source(   t   callst   msg_id(    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   is_complete  s    (   t   __name__t
   __module__R²   (    (   R°   R±   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR­     s   c             s   ˆ  j  |  ƒ S(   N(   R®   (   t   args(   R°   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR     R   t   thingt   interactivet   parent_headerR±   t   contentt   statust
   incompletet   indents   !!!u   thingâ€©> !!!t   elset   completes   ###u   thingâ€©> !!!elseâ€©t   doneu   thingâ€©> !!!elseâ€©â€©> (   t   objectR   Ra   t   _executet   kernel_clientRB   R2   R[   t   _handle_is_complete_replyt   dictR`   R   R   Rl   t   UserRr   (   R\   R­   Re   R]   t   event(    (   R°   R±   sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_complete  sJ    				c            sï   d t  f ‡  f d †  ƒ  Y} g  ‰  t ƒ  } | j d ƒ d | _ | j ƒ  | ƒ  | _ d j d d g ƒ } | j | ƒ | j d t	 ƒ ˆ  d g k sž t
 ‚ g  ‰  d j d d g ƒ } | j | ƒ | j d t	 ƒ ˆ  d g k së t
 ‚ d S(   s6   Test that is_complete is working correctly for Python.t   TestIPyKernelClientc              s   e  Z ‡  f d  †  Z RS(   c            s)   t  ƒ  } | j | ƒ } ˆ  j | ƒ d  S(   N(   R   t   check_completeR®   (   R\   R¯   t   tmRÉ   (   t	   responses(    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyR²   D  s    	(   R³   R´   R²   (    (   RË   (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyRÈ   C  s   s   Header
s   prompt>s   
s   if True:s	       a = 1R·   R»   i   s       a = 1

R¾   N(   R»   i   (   R¾   N(   RÀ   R   R†   Rƒ   R‡   RÂ   t   joinR›   RB   R2   R1   R   (   R\   RÈ   Re   R9   (    (   RË   sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   test_complete_python@  s     		
(   R³   R´   t   classmethodRU   RW   R`   Rh   R}   R   R   Rš   R¦   R¬   RÇ   RÍ   (    (    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyRO   Ï   s   				#		*			'	2(!   RC   t   unittestt   pytestRD   t   IPython.core.inputsplitterR   R   t   IPython.core.inputtransformer2t   qtconsole.qtR   R   t   qtconsole.qt_loadersR   t   qtconsole.console_widgetR   t   qtconsole.qtconsoleappR   R   R   R/   R•   t   fixtureR   t   markt   parametrizeR2   R   R<   RH   RM   t   skipift   TestCaseRO   (    (    (    sE   lib/python2.7/site-packages/qtconsole/tests/test_00_console_widget.pyt   <module>   s&   		i	#	 