ó
æNXc           @   sÕ   d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z	 d d l
 m Z d e f d „  ƒ  YZ d	 „  Z d
 e j f d „  ƒ  YZ d e f d „  ƒ  YZ d e j f d „  ƒ  YZ d S(   sL   Tests for the key interactiveshell module.

Authors
-------
* Julian Taylor
iÿÿÿÿN(   t   InputTransformer(   t   skipif(   t	   py3compat(   t   toolst   mock_input_helperc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sZ   Machinery for tests of the main interact loop.

    Used by the mock_input decorator.
    c         C   s"   | |  _  d  |  _ t ƒ  |  _ d  S(   N(   t   testgent   Nonet	   exceptiont   get_ipythont   ip(   t   selfR   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   __init__#   s    		c         C   s"   |  j  j |  _ |  j |  j  _ |  S(   N(   R	   t	   raw_inputt   orig_raw_inputt
   fake_input(   R
   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt	   __enter__(   s    c         C   s   |  j  |  j _ d  S(   N(   R   R	   R   (   R
   t   etypet   valuet   tb(    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   __exit__-   s    c         C   sX   y t  |  j ƒ SWn@ t k
 r1 t |  j _ d St j ƒ  |  _ t |  j _ d SXd  S(   Nu    (	   t   nextR   t   StopIterationt   TrueR	   t   exit_nowt   syst   exc_infoR   (   R
   t   prompt(    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyR   0   s    (   t   __name__t
   __module__t   __doc__R   R   R   R   (    (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyR      s
   			c            s   ‡  f d †  } | S(   s·   Decorator for tests of the main interact loop.

    Write the test as a generator, yield-ing the input strings, which IPython
    will see as if they were typed in at the prompt.
    c            s‡   ˆ  |  ƒ } t  | ƒ  } | j j d t ƒ Wd  QX| j d  k	 rƒ | j \ } } } d d  l } | j | d t j	 ƒ~ | ‚ n  d  S(   Nt   display_banneriÿÿÿÿt   file(
   R   R	   t   interactt   FalseR   R   t	   tracebackt   print_tbR   t   stdout(   R
   R   t   mihR   R   R   R"   (   t   testfunc(    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   test_methodA   s    (    (   R&   R'   (    (   R&   sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt
   mock_input;   s    t   InteractiveShellTestCasec           B   s~  e  Z d  „  Z d „  Z e e ƒ  j d ƒ d „  ƒ Z e e ƒ  j d ƒ e e e ƒ  j	 d ƒ d ƒ d „  ƒ ƒ Z
 e e ƒ  j d ƒ e e e ƒ  j	 d ƒ d ƒ d „  ƒ ƒ Z e e ƒ  j d ƒ e e e ƒ  j	 d ƒ d ƒ d „  ƒ ƒ Z e e ƒ  j d ƒ e e e ƒ  j	 d ƒ d ƒ d	 „  ƒ ƒ Z e e ƒ  j d ƒ e e e ƒ  j	 d ƒ d ƒ d
 „  ƒ ƒ Z e d „  ƒ Z RS(   c         C   s:   g  t  | d d d ƒ D] } | j | j ƒ  | ƒ ^ q S(   s-   Get last n readline history entries as a listi   iÿÿÿÿ(   t   ranget   get_history_itemt   get_current_history_length(   R
   t   rlt   nt   x(    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   rl_hist_entriesS   s    c         C   s/   t  ƒ  } t | _ d | _ | j d d ƒ d S(   s2   Test that function does not throw without readlineu   sourcei    N(   R   R!   t   has_readlineR   t   readlinet   _replace_rlhist_multiline(   R
   R	   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   test_runs_without_rlX   s    			s   no readlinec         C   s;   t  ƒ  } t | j d ƒ r' | j ` n  | j d d ƒ d S(   sS   Test that function does not throw on windows without
           remove_history_itemt   remove_history_itemu   sourcei    N(   R   t   hasattrR2   R5   R3   (   R
   R	   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt%   test_runs_without_remove_history_item_   s    	R5   s   no remove_history_itemc         C   s¢   t  ƒ  } t | _ d d g } x | D] } | j j | ƒ q% W| j j ƒ  } | j d | ƒ } |  j | j j ƒ  | ƒ |  j | j d ƒ } |  j | | ƒ d S(   s4   Test that multiline replace does nothing if disabledu   line1u   line2u   sourcâ‚¬
source2i   N(	   R   R!   t   multiline_historyR2   t   add_historyR,   R3   t   assertEqualR0   (   R
   R	   t   ghistt   ht   hlen_b4_cellt   hist(    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt$   test_replace_multiline_hist_disabledh   s    				c         C   sG   t  ƒ  } | j j ƒ  } | j d | ƒ } |  j | | j j ƒ  ƒ d S(   s1   Test that multiline replace function adds historyu   sourcâ‚¬N(   R   R2   R,   R3   R:   (   R
   R	   R=   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt    test_replace_multiline_hist_adds|   s
    		c         C   s¢   t  ƒ  } t | _ d d g } x | D] } | j j | ƒ q% W| j j ƒ  } | j d | ƒ } |  j | j j ƒ  | ƒ |  j | j d ƒ } |  j | | ƒ d S(   s3   Test that multiline replace does not delete historyu   line1u   line2u   sourcâ‚¬
source2i   N(	   R   R   R8   R2   R9   R,   R3   R:   R0   (   R
   R	   R;   R<   R=   R>   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt)   test_replace_multiline_hist_keeps_history‰   s    				c         C   s  t  ƒ  } t | _ | j j d ƒ | j j ƒ  } | j j d ƒ | j j d ƒ | j d | ƒ } | j j d ƒ | j j d ƒ | j d | ƒ } |  j | j j ƒ  | ƒ |  j | j d ƒ } d d d g } t	 j
 j pá d	 } g  | D] } t j | | ƒ ^ që } |  j | | ƒ d
 S(   s.   Test that multiline entries are replaced twiceu   line0s   lâ‚¬ne1t   line2u   lâ‚¬ne1
line2s   lâ‚¬ne3t   line4u   lâ‚¬ne3
line4i   s   utf-8N(   R   R   R8   R2   R9   R,   R3   R:   R0   R   t   stdint   encodingR   t   unicode_to_str(   R
   R	   R=   R>   t   expectedt   enct   e(    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt*   test_replace_multiline_hist_replaces_twice¡   s&    						%c         C   s¨  t  ƒ  } t | _ | j j d ƒ | j j ƒ  } | j j d ƒ | j j d ƒ | j d | ƒ } | j j d ƒ | j d | ƒ } | j j d ƒ | j d | ƒ } | j j d	 ƒ | j d	 | ƒ } | j j d
 ƒ | j j d ƒ | j d
 | ƒ } | j j d ƒ | j d | ƒ } |  j | j j ƒ  | ƒ |  j | j d ƒ } d d d d g } t	 j
 j pld } g  | D] } t j | | ƒ ^ qv} |  j | | ƒ d S(   s2   Test that multiline history skips empty line cellsu   line0s   lâ‚¬ne1RB   u   lâ‚¬ne1
line2t    u    s   lâ‚¬ne3u   lâ‚¬ne3s     s   	s   	 RC   u   line4i   s   utf-8N(   R   R   R8   R2   R9   R,   R3   R:   R0   R   RD   RE   R   RF   (   R
   R	   R=   R>   RG   RH   RI   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt/   test_replace_multiline_hist_replaces_empty_lineÁ   s4    				%c         c   sÍ   t  ƒ  } t ƒ  } | j j j | ƒ | j j j | ƒ zg t j d d t ƒ
 d VWd  QXt j d d t ƒ
 d VWd  QXt j d d t ƒ
 d VWd  QXWd  | j j j	 | ƒ | j j j	 | ƒ Xd  S(   Nt   4t   suppressu
   print(2*2)s   SyntaxError: input containsu   print(2345) # syntaxerrort   16u
   print(4*4)(
   R   t   SyntaxErrorTransformert   input_splittert   python_line_transformst   appendt   input_transformer_managert   ttt   AssertPrintsR!   t   remove(   R
   R	   t   transformer(    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt!   test_inputtransformer_syntaxerroræ   s    		(   R   R   R0   R4   R   R   R1   R7   R6   R2   R?   R@   RA   RJ   RL   R(   RY   (    (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyR)   R   s&   			#RP   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   sJ   | j  d ƒ } | d k rF t d ƒ } | | _ | d | _ | ‚ n  | S(   Nt   syntaxerrori    s   input contains "syntaxerror"i   (   t   findt   SyntaxErrort   textt   offset(   R
   t   linet   posRI   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   pushþ   s    		c         C   s   d  S(   N(    (   R
   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   reset  s    (   R   R   Ra   Rb   (    (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyRP   ý   s   		t   TerminalMagicsTestCasec           B   s   e  Z d  „  Z d „  Z RS(   c      	   C   so   t  ƒ  } d } | j j d } t j d ƒ  | j | ƒ Wd QXt j d ƒ  | j | d d ƒWd QXd S(   s‚   Test that an IndentationError while using paste magics doesn't
        trigger a message about paste magics and also the opposite.s   for a in range(5):
print(a)t   TerminalMagicssS   If you want to paste code into IPython, try the %paste and %cpaste magic functions.Nt   name(	   R   t   magics_managert   registryRU   RV   t   run_cellt   AssertNotPrintst   store_or_executeR   (   R
   R	   t   st   tm(    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   test_paste_magics_message  s    	c         C   sS   t  ƒ  } d } | j j d } | j | d d ƒ|  j | j d d ƒ d ƒ d S(   s=   Test that code with a blank line doesn't get split (gh-3246).s-   def pasted_func(a):
    b = a+1

    return bRd   Re   t   pasted_funci6   i7   N(   R   Rf   Rg   Rj   R   R:   t   user_ns(   R
   R	   Rk   Rl   (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   test_paste_magics_blankline  s
    	(   R   R   Rm   Rp   (    (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyRc   
  s   	(   R   R   t   typest   unittestt   IPython.core.inputtransformerR    t   IPython.testing.decoratorsR   t   IPython.utilsR   t   IPython.testingR   RU   t   objectR   R(   t   TestCaseR)   RP   Rc   (    (    (    sc   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/terminal/tests/test_interactivshell.pyt   <module>   s   	«