ó
‹²,]c           @   sW	  d  Z  d d l Z d d l Z d d l j Z d d l Z d d l Z d d l Z d d l	 m
 Z
 y d d l m Z Wn! e k
 r˜ d d l m Z n Xd d l Z d d l m Z d d l m Z d d l m 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 m Z d d l m  Z  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 j/ ƒ  Z0 e j1 e0 d d ƒ Z2 d „  Z3 d „  Z4 d e f d „  ƒ  YZ5 e j6 d „  ƒ Z7 e j8 j9 e d d ƒ e j8 j: e j8 j; e j< d k d d ƒd  „  ƒ ƒ ƒ ƒ Z= e j8 j9 e d d ƒ d! „  ƒ ƒ Z> e j8 j9 e d d ƒ d" „  ƒ ƒ Z? e j8 j9 e d d ƒ d# „  ƒ ƒ Z@ e j8 j9 e d d ƒ d$ „  ƒ ƒ ZA e j8 j9 e d d ƒ e j8 jB d% „  ƒ ƒ ƒ ZC e j8 j9 e j8 jD e d d ƒ e j8 j; e j< d k d d& ƒd' „  ƒ ƒ ƒ ƒ ZE e j8 j9 e d d ƒ e j8 j; e$ oe jF d( k d d) ƒd* „  ƒ ƒ ƒ ZG e j8 j9 e d d ƒ d+ „  ƒ ƒ ZH e j8 j9 e d d ƒ d, „  ƒ ƒ ZI e j8 j9 e d d ƒ d- „  ƒ ƒ ZJ e j8 j9 e d d ƒ d. „  ƒ ƒ ZK e j8 j9 e d d ƒ d/ „  ƒ ƒ ZL e j8 j9 e d d ƒ e j8 j; e j< d k d d0 ƒd1 „  ƒ ƒ ƒ ZM e j8 j9 e d d2 ƒ e j8 j; e j< d k d d3 ƒd4 „  ƒ ƒ ƒ ZN e j8 j9 e d d ƒ e j8 j; e$ d d5 ƒd6 „  ƒ ƒ ƒ ZO e j8 j9 e d d ƒ d7 „  ƒ ƒ ZP e j8 j9 e d d2 ƒ e j8 jQ e j8 j; e jR jS d8 d ƒ d k	 o—e j< d k d d9 ƒe j8 j; e$ d d: ƒd; „  ƒ ƒ ƒ ƒ ƒ ZU e j8 j9 e d d2 ƒ e j8 j; e j< d k d d3 ƒd< „  ƒ ƒ ƒ ZV e j8 j9 e d d ƒ d= „  ƒ ƒ ZW e j8 j9 e d d ƒ e j8 j; e j< d k ple$ ole d d> ƒd? „  ƒ ƒ ƒ ZX e d d2 ƒ e j8 j; e jR jS d8 d ƒ d k	 pºe d d@ ƒdA „  ƒ ƒ ZY e j8 j9 e d d2 ƒ e j8 j; e j< d k d d3 ƒdB „  ƒ ƒ ƒ ZZ e j8 j9 e d d ƒ dC „  ƒ ƒ Z[ e j8 j9 e d d ƒ dD „  ƒ ƒ Z\ e j8 j9 e d d ƒ dE „  ƒ ƒ Z] e j8 j9 e d d ƒ dF „  ƒ ƒ Z^ e j8 j9 e d d ƒ dG „  ƒ ƒ Z_ e j8 j9 e d dH ƒ dI „  ƒ ƒ Z` e j8 j9 e d d ƒ e j8 j; e j< d k d dJ ƒdK „  ƒ ƒ ƒ Za e j8 j9 e d d ƒ e j8 j; e j< d k d dJ ƒdL „  ƒ ƒ ƒ Zb e j8 j9 e d d ƒ e j8 j; e j< d k d dJ ƒdM „  ƒ ƒ ƒ Zc e j8 j9 e d d ƒ e j8 j; e j< d k d d& ƒdN „  ƒ ƒ ƒ Zd e j8 j9 e j8 j; e j< d k d dO ƒdP „  ƒ ƒ Ze ef dQ k rS	e jg ƒ  n  d S(R   s'   
Tests for the IPython console plugin.
iÿÿÿÿN(   t   dedent(   t   Mock(   t   flaky(   t
   KernelSpec(   t   Name(   t   PYQT5(   t   Qt(   t	   WEBENGINE(   t   QMessageBoxt   QWidget(   t   get_color_scheme(   t   CONF(   t   PY2t   to_text_string(   t
   check_text(   t   IPythonConsole(   t   create_style_class(   t   get_temp_diri N  u   æ¸¬è©¦u   Ø§Ø®ØªØ¨Ø§Ø±c         C   s   t  |  ƒ j } | t } | S(   N(   R   t   stylesR   (   t   syntax_styleR   t
   font_color(    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   get_console_font_color:   s    
c         C   s*   |  j  d ƒ d } | j  d ƒ d } | S(   Ns   background-color:i   t   ;i    (   t   split(   t   style_sheett   background_color(    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   get_console_background_color@   s    t   FaultyKernelSpecc           B   s&   e  Z d  Z e j d d d d g Z RS(   s(   Kernelspec that generates a kernel crashs   -ms   spyder_kernels.foos   -fs   {connection_file}(   t   __name__t
   __module__t   __doc__t   syst
   executablet   argv(    (    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyR   F   s   c   	   	      s  d t  f d „  ƒ  Y} t j d d d ƒ | j j d ƒ } | rJ t } n d } | j j d ƒ } | rq t } n t } | j j d ƒ } | r¥ t j d d d	 ƒ n  t	 d
 | ƒ  d t d | d | ƒ ‰  t
 ƒ  ˆ  _ ˆ  j ƒ  ‡  f d †  } | j | ƒ |  j ˆ  ƒ ˆ  j ƒ  ˆ  S(   s   IPython console fixture.t   MainWindowMockc           B   s   e  Z d  „  Z RS(   c         S   s   | d k r g  St  ƒ  Sd  S(   Nt   consoles_menu_actions(   R   (   t   selft   attr(    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   __getattr__U   s    (   R   R   R&   (    (    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyR"   T   s   t   ipython_consoles   pylab/backendi    t   non_ascii_dirt   no_stderr_filet   auto_backendi   t   parentt   testingt   test_dirt   test_no_stderrc              s   ˆ  j  ƒ  ˆ  j ƒ  d  S(   N(   t   closing_plugint   close(    (   t   console(    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   close_consolez   s    
N(   R	   R   t   sett   nodet
   get_markert   NON_ASCII_DIRt   Nonet   Truet   FalseR   R   t
   dockwidgett   create_new_clientt   addfinalizert	   addWidgett   show(	   t   qtbott   requestR"   R(   R-   R)   R.   R*   R2   (    (   R1   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt
   ipyconsoleP   s0    			

t   max_runsi   t   ntt   reasons!   It times out sometimes on Windowsc            sŽ   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QX|  j ƒ  } d | j ƒ  k sr t ‚ d | j ƒ  k sŠ t ‚ d S(   s5   Test that the automatic backend is working correctly.c              s   ˆ  j  d  k	 S(   N(   t   _prompt_htmlR7   (    (   t   shell(    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   <lambda>   t    t   timeouts   %matplotlib qt5Nt   NOTEt   Error(	   t   get_current_shellwidgett	   waitUntilt   SHELL_TIMEOUTt
   waitSignalt   executedt   executet   get_focus_widgett   toPlainTextt   AssertionError(   RA   R?   t   control(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_auto_backend‡   s    c            s¯   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j ƒ  j } |  j | d d d ƒ | j d ƒ |  j d ƒ d |  j	 ƒ  d j
 ƒ  k s‰ t ‚ d |  j	 ƒ  d j
 ƒ  k s« t ‚ d S(   s)   Test slave clients are renamed correctly.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ¢   RH   RI   iè  t   fooi    i   N(   RL   RM   RN   t   get_current_clientt   connection_filet   _create_client_for_kernelR7   t   waitt   rename_tabs_after_changet   get_clientst   get_nameRT   (   RA   R?   t   cf(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_tab_rename_for_slavesœ   s    "c            st   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j d ƒ |  j ƒ  |  j d ƒ |  j ƒ  j ƒ  } d | k sp t ‚ d S(   s/   Test that tabs can't have repeated given names.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ¶   RH   RI   RW   t   2N(   RL   RM   RN   R\   R;   RX   R^   RT   (   RA   R?   t   client_name(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_no_repeated_tabs_name±   s    
c            sw   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j ƒ  |  j j ƒ  j d d ƒ |  j ƒ  d j ƒ  } d | k ss t	 ‚ d S(   s9   Test that tabs preserve their names after they are moved.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   É   RH   RI   i    i   Ra   N(
   RL   RM   RN   R;   t	   tabwidgett   tabBart   moveTabR]   R^   RT   (   RA   R?   Rb   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt"   test_tabs_preserve_name_after_moveÄ   s    
c            sm   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ d k si t ‚ d S(   s7   Test that kernels have env vars set by our kernel spec.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   Ü   RH   RI   s,   import os; a = os.environ.get('SPY_SYMPY_O')Nt   aR9   (   RL   RM   RN   RO   RP   RQ   t	   get_valueRT   (   RA   R?   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_conf_env_varsÖ   s    c            sm   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ d k si t ‚ d S(   s-   Test that consoles can run without an stderr.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   î   RH   RI   s   a = 1NRh   i   (   RL   RM   RN   RO   RP   RQ   Ri   RT   (   RA   R?   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_no_stderr_fileç   s    s   It fails on Windowsc            sm   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ d k si t ‚ d S(   sE   Test the creation of a console with a stderr file in a non-ascii dir.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG     RH   RI   s   a = 1NRh   i   (   RL   RM   RN   RO   RP   RQ   Ri   RT   (   RA   R?   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_non_ascii_stderr_fileù   s    t   darwins+   It hangs frequently on Python 2.7 and macOSc            sm   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ d k si t ‚ d S(   s/   Test an import of the form 'from foo import *'.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG     RH   RI   s   from numpy import *Nt   egiW‹
¿@(   RL   RM   RN   RO   RP   RQ   Ri   RT   (   RA   R?   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_console_import_namespace  s    c   	         s¤  |  j  ƒ  ‰  | j ‡  f d †  d t ƒt j t d d ƒ } t j | d ƒ } t j | ƒ sn t j | ƒ n  t j	 | ƒ s™ t
 | d ƒ } | j ƒ  n  t j t d d ƒ } t j | d ƒ } t j | ƒ sß t j | ƒ n  t j	 | ƒ s
t
 | d ƒ } | j ƒ  n  |  j | ƒ |  j ƒ  } | j ƒ  d k s;t ‚ |  j | ƒ |  j ƒ  } | j ƒ  d	 k slt ‚ |  j j d
 ƒ |  j ƒ  } | j ƒ  d k s t ‚ d S(   s.   Test the disambiguation of dedicated consoles.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   $  RH   RI   Rh   t   bs   c.pys   w+t   ds   c.py/As
   c.py - d/Ai   s
   c.py - b/AN(   RL   RM   RN   t   ospt   joint   TEMP_DIRECTORYt   isdirt   ost   makedirst   isfilet   openR0   t   create_client_for_fileRX   R^   RT   Rd   t   setCurrentIndex(	   RA   R?   t   dir_bt
   filename_bt   file_ct   dir_dt
   filename_dt   file_et   client(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_console_disambiguation  s2    c            s"  |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j ƒ  } | j j } | j j } t | ƒ } t | ƒ } t	 j
 d d ƒ } t | ƒ } | d }	 | d d }
 | j d d	 ƒ } |	 j d d	 ƒ }	 | j d d	 ƒ } |
 j d d	 ƒ }
 | j ƒ  |	 j ƒ  k s t ‚ | j ƒ  |
 j ƒ  k st ‚ d
 S(   s?   Test that console gets the same coloring present in the Editor.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   J  RH   RI   t   color_schemest   selectedt
   backgroundt   normali    t   'RH   N(   RL   RM   RN   t   config_optionst   JupyterWidgetR   R   R   R   R   t   getR
   t   replacet   stripRT   (   RA   R?   R‰   R   R   t   console_font_colort   console_background_colort   selected_color_schemet   color_schemet   editor_background_colort   editor_font_color(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_console_coloringE  s"    
c            s¥   |  j  ƒ  ‰  | j ‡  f d †  d t ƒˆ  j } t | j d ƒ ƒ } ˆ  j | ƒ | j ˆ  j ƒ  ˆ  j	 d ƒ Wd QXˆ  j
 d ƒ | k s” t ‚ ˆ  j | ƒ d S(   s   Test kernel when changing cwd.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   g  RH   RI   s   queen'ss   import os; cwd = os.getcwd()Nt   cwd(   RL   RM   RN   t   _cwdR   t   mkdirt   set_cwdRO   RP   RQ   Ri   RT   (   RA   R?   t   tmpdirt   savetempt   tempdir(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_set_cwda  s    	c            s  |  j  ƒ  ‰  | j ‡  f d †  d t ƒˆ  j } t | j d ƒ ƒ } ˆ  j | k s[ t ‚ t j d k r | j	 d d ƒ } n  | j
 ˆ  j ƒ  ˆ  j d j | ƒ ƒ Wd QX| j
 ˆ  j ƒ  ˆ  j ƒ  Wd QXt j d k rõ | j	 d d ƒ } n  ˆ  j | k s
t ‚ ˆ  j | ƒ d S(	   s   Test current working directory.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   €  RH   RI   s   queen'sRC   u   \u   \\u   import os; os.chdir(u'''{}''')N(   RL   RM   RN   R–   R   R—   RT   Rv   t   nameRŒ   RO   RP   RQ   t   formatt   sig_change_cwdt   get_cwdR˜   (   RA   R?   R™   Rš   R›   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_get_cwdz  s     	c            sš   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QX| j ˆ  j ƒ  } ˆ  j ƒ  Wd QX| j d } | d d k s– t	 ‚ d S(   sB   Test that getting env vars from the kernel is working as expected.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ¡  RH   RI   s$   import os; os.environ['FOO'] = 'bar'Ni    t   FOOt   bar(
   RL   RM   RN   RO   RP   RQ   t   sig_show_envt   get_envt   argsRT   (   RA   R?   t   blockert   env_contents(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_get_envœ  s    s)   Fails due to differences in path handlingc            s¦   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ " t | ƒ } ˆ  j d | ƒ Wd QX| j ˆ  j ƒ  } ˆ  j ƒ  Wd QX| j	 d } | | k s¢ t
 ‚ d S(   sY   
    Test that getting sys.path contents from the kernel is working as
    expected.
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ¼  RH   RI   s!   import sys; sys.path.append('%s')Ni    (   RL   RM   RN   RO   RP   R   RQ   t   sig_show_syspatht   get_syspathR¦   RT   (   RA   R?   R™   t   tmp_dirR§   t   syspath_contents(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_get_syspath²  s    	i
   s   It doesn't work on Windowsc            sí   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j ƒ  } | j ƒ  | j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ | j d ƒ | j	 | d ƒ | j
 | t j ƒ ˆ  j d t ƒ | j d ƒ | j
 | t j ƒ d | j ƒ  k sé t ‚ d S(	   s>   Test that browsing command history is working while debugging.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   Ô  RH   RI   s   1/0Ns   %debugiè  s   !aa = 10t   clear(   RL   RM   RN   RR   t   setFocusRO   RP   RQ   R[   t	   keyClickst   keyClickR   t	   Key_Entert   resetR8   t   Key_UpRS   RT   (   RA   R?   RU   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_browse_history_dbgÎ  s    
s   It doesn't work on PY2c            s·   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ d k si t ‚ ˆ  j d t	 j
 d d d	 ƒg ƒ | j d
 ƒ ˆ  j d ƒ d k s³ t ‚ d S(   sG   
    Test that the Variable Explorer Works with unicode variables.
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ù  RH   RI   s   Ð´ = 10Ns   Ð´i
   i   t   protocoli   iè  (   RL   RM   RN   RO   RP   RQ   Ri   RT   t	   set_valuet   cloudpicklet   dumpsR[   (   RA   R?   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_unicode_varsð  s    "c            s{   |  j  ƒ  ‰  |  j ƒ  } | j ‡  f d †  d t ƒd } | j } t j | d d ƒ j | ƒ | | j ƒ  k sw t	 ‚ d S(   sB   
    Test the read operation of the stderr file of the kernel
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG     RH   RI   s	   Test textt   wt   cp437N(
   RL   RX   RM   RN   t   stderr_filet   codecsRy   t   writet   _read_stderrRT   (   RA   R?   R‚   t   contentR¾   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_read_stderr  s    	t   CIs   It times out on AppVeyor.s   It times out in Python 2.c            s±  |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j ƒ  } | j ƒ  | j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ | j d ƒ | j	 | d ƒ | j
 | t j ƒ | j d ƒ ˆ  j d ƒ d	 k sÉ t ‚ ˆ  j d t j d
 d d ƒg ƒ | j d ƒ ˆ  j d ƒ d
 k st ‚ ˆ  j d d ƒ | j d ƒ ˆ  j d ƒ d
 k sKt ‚ ˆ  j d ƒ | j d ƒ | j	 | d ƒ | j
 | t j ƒ | j d ƒ d | j ƒ  k s­t ‚ d S(   sa   
    Test that getting, setting, copying and removing values is working while
    debugging.
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   &  RH   RI   s   1/0Ns   %debugiè  s   !aa = 10t   aai
   i   R·   i   t   bbs   !aas'   *** NameError: name 'aa' is not defined(   RL   RM   RN   RR   R°   RO   RP   RQ   R[   R±   R²   R   R³   Ri   RT   R¸   R¹   Rº   t
   copy_valuet   remove_valueRS   (   RA   R?   RU   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_values_dbg  s0    
"c            sü   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j ƒ  } | j ƒ  | j ˆ  j ƒ  ˆ  j d ƒ Wd QX| j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ | j d ƒ | j	 | d ƒ | j
 | t j ƒ | j d ƒ ˆ  j j ƒ  j d	 ƒ d
 k sø t ‚ d S(   s#   Test our plot magic while debuggingc              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   Q  RH   RI   s   import matplotlib.pyplot as pltNs   1/0s   %debugiè  s   %plot plt.plot(range(10))s   img srci   (   RL   RM   RN   RR   R°   RO   RP   RQ   R[   R±   R²   R   R³   t   _controlt   toHtmlt   countRT   (   RA   R?   RU   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_plot_magic_dbgK  s    
c            sÅ   |  j  ƒ  ‰  | j ‡  f d †  d t ƒt d ƒ } | j ˆ  j ƒ  ˆ  j | ƒ Wd QX| j ˆ  j ƒ  ˆ  j d ƒ Wd QX| j ˆ  j ƒ  ˆ  j d ƒ Wd QXd ˆ  j j ƒ  k sÁ t	 ‚ d S(   s8   
    Test that doctests can be run without problems
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   q  RH   RI   s‹   
    def add(x, y):
        """
        >>> add(1, 2)
        3
        >>> add(5.1, 2.2)
        7.3
        """
        return x + y
    Ns   import doctests   doctest.testmod()s"   TestResults(failed=0, attempted=2)(
   RL   RM   RN   R    RO   RP   RQ   RÊ   RS   RT   (   RA   R?   t   code(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_run_doctestj  s    		s   It times out frequentlyc      	      sè   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QX| j ˆ  j ƒ  ˆ  j d ƒ Wd QX| j ˆ  j ƒ  ˆ  j d ƒ Wd QX| j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j j ƒ  j d ƒ d k sä t	 ‚ d S(	   s`   
    Test that Matplotlib backend is changed correctly when
    using the %matplotlib magic
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ˜  RH   RI   s   import matplotlib.pyplot as pltNs   plt.plot(range(10))s   %matplotlib tks   img srci   (
   RL   RM   RN   RO   RP   RQ   RÊ   RË   RÌ   RT   (   RA   R?   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_mpl_backend_changeŽ  s    	s(   It fails frequently in PyQt5 and our CIsc            sÃ   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j ƒ  } | j ƒ  | j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ | j d ƒ | j	 | t
 j d t
 j ƒ| j d ƒ d	 | j ƒ  k s¿ t ‚ d S(
   s0   
    Test that Ctrl+C works while debugging
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ¶  RH   RI   s   1/0Ns   %debugiè  t   modifieriÐ  s2   For copying text while debugging, use Ctrl+Shift+C(   RL   RM   RN   RR   R°   RO   RP   RQ   R[   R²   R   t   Key_Ct   ControlModifierRS   RT   (   RA   R?   RU   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_ctrl_c_dbg®  s    
c            sg  |  j  ƒ  ‰  | j ‡  f d †  d t ƒ|  j ƒ  } | j ƒ  | j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ | j d ƒ ˆ  j	 ƒ  | j d ƒ d | j
 ƒ  k s­ t ‚ | j | d ƒ | j | t j ƒ | j d	 ƒ ˆ  j d
 ƒ d k sø t ‚ ˆ  j d t d t ƒ | j d ƒ | j | d ƒ | j | t j ƒ | j d	 ƒ d | j
 ƒ  k sct ‚ d S(   sF   
    Test that clear and reset magics are working while debugging
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   Ñ  RH   RI   s   1/0Ns   %debugiè  s   
ipdb> s   !bb = 10iô  RÆ   i
   t   warningt   silents   !bbs'   *** NameError: name 'bb' is not defined(   RL   RM   RN   RR   R°   RO   RP   RQ   R[   t   clear_consoleRS   RT   R±   R²   R   R³   Ri   t   reset_namespaceR9   R8   (   RA   R?   RU   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_clear_and_reset_magics_dbgÉ  s*    

c            s²   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QXd ˆ  _ |  j ƒ  | j ‡  f d †  d t ƒd ˆ  j	 j
 ƒ  k s˜ t ‚ ˆ  j d ƒ s® t ‚ d S(   s1   
    Test that kernel is restarted correctly
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ú  RH   RI   s   a = 10Nc              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG     RH   s   Restarting kernel...Rh   (   RL   RM   RN   RO   RP   RQ   R7   RE   t   restart_kernelRÊ   RS   RT   t
   is_defined(   RA   R?   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_restart_kerneló  s    	
c            sÁ   |  j  ƒ  ‰  |  j ƒ  } | j ‡  f d †  d t ƒt j | j ƒ } | j d ƒ d j d ƒ d } |  j | d d d ƒ | j
 d ƒ |  j ƒ  d } | j t d	 d
 d d ƒ k s½ t ‚ d S(   s8   
    Test that a new client is created using its id
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG     RH   RI   s   kernel-iÿÿÿÿs   .jsoni    iè  i   t   int_idt   1t   str_idt   BN(   RL   RX   RM   RN   Rr   t   basenameRY   R   RZ   R7   R[   R]   t   id_t   dictRT   (   RA   R?   R‚   RY   Râ   t
   new_client(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_load_kernel_file_from_id	  s     c            s³   |  j  ƒ  ‰  |  j ƒ  } | j ‡  f d †  d t ƒt j | j ƒ } t | j | ƒ ƒ } t	 j
 | j | ƒ |  j | d d d ƒ | j d ƒ t |  j ƒ  ƒ d k s¯ t ‚ d S(   s   
    Test that a new client is created using a connection file
    placed in a different location from jupyter_runtime_dir
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   &  RH   RI   iè  i   N(   RL   RX   RM   RN   Rr   Rá   RY   R   Rs   t   shutilt   copy2RZ   R7   R[   t   lenR]   RT   (   RA   R?   R™   R‚   t   fnameRY   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt#   test_load_kernel_file_from_location  s    c            så   |  j  ƒ  ‰  |  j ƒ  } | j ‡  f d †  d t ƒ|  j | j d d d ƒ | j d ƒ |  j ƒ  d } | j	 } | j
 | j ƒ  | j d ƒ Wd QX| j t d d d	 d
 ƒ k s½ t ‚ ˆ  j d ƒ | j d ƒ k sá t ‚ d S(   s_   
    Test that a new client is created using the connection file
    of an existing client
    c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ;  RH   RI   iè  i   s   a = 10NRÝ   RÞ   Rß   Rà   Rh   (   RL   RX   RM   RN   RZ   RY   R7   R[   R]   t   shellwidgetRO   RP   RQ   Râ   Rã   RT   Ri   (   RA   R?   R™   R‚   Rä   t	   new_shell(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_load_kernel_file2  s    	$c            sv   |  j  ƒ  ‰  | j ‡  f d †  d t ƒ| j ˆ  j ƒ  ˆ  j d ƒ Wd QXˆ  j d ƒ } | d g k sr t ‚ d S(   s*   Test that sys.argv is cleared up correctlyc              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   N  RH   RI   s   import sys; A = sys.argvNt   ARH   (   RL   RM   RN   RO   RP   RQ   Ri   RT   (   RA   R?   R!   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_sys_argv_clearI  s    i   c            sZ  |  j  ƒ  ‰  |  j ƒ  } | j ‡  f d †  d t ƒ| j d 8_ | j | j j d d ƒ |  j | ƒ Wd QXd | j	 j
 ƒ  k s¢ d | j	 j
 ƒ  k s¢ t ‚ | j | j j d d ƒ Wd QXd | j	 j
 ƒ  k sô d | j	 j
 ƒ  k sô t ‚ | j d	 7_ | j | j j d d ƒ Wd QXd
 | j	 j
 ƒ  k s@t ‚ | j j j | j ƒ d S(   s=   Test that the IPython console elapsed timer is set correctly.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ]  RH   RI   ix   iˆ  Ns   00:02:00s   00:02:01s   00:02:02iÐ  s   00:00:00(   RL   RX   RM   RN   t   t0RO   t   timerRI   t   set_elapsed_timet
   time_labelt   textRT   t
   disconnectt	   show_time(   RA   R?   R‚   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_set_elapsed_timeW  s$    s   Doesn't work on Windowsc            s•   |  j  ƒ  ‰  |  j ƒ  } | j ‡  f d †  d t ƒ| j t d t d „  ƒ ƒ t j | j	 ƒ sh t
 ‚ |  j d | ƒ t j | j	 ƒ s‘ t
 ‚ d S(   s8   Test that consoles removes stderr when client is closed.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ~  RH   RI   t   questionc          W   s   t  j S(   N(   R   t   Yes(   R¦   (    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ƒ  RH   R‚   N(   RL   RX   RM   RN   t   setattrR   t   classmethodRr   t   existsR¾   RT   t   close_client(   RA   R?   t   monkeypatchR‚   (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt&   test_stderr_file_is_removed_one_kernelv  s    c            sú   |  j  ƒ  ‰  |  j ƒ  } | j ‡  f d †  d t ƒ|  j | j d d d ƒ t |  j | ƒ ƒ d k sn t	 ‚ |  j | ƒ d } | j
 | j
 k s™ t	 ‚ | j t d t d „  ƒ ƒ t j | j
 ƒ sÍ t	 ‚ |  j d | ƒ t j | j
 ƒ sö t	 ‚ d S(	   sP   Test that console removes stderr when client and related clients
    are closed.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ’  RH   RI   i   i    Rø   c          W   s   t  j S(   N(   R   Rù   (   R¦   (    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   Ÿ  RH   R‚   N(   RL   RX   RM   RN   RZ   RY   R7   Rè   t   get_related_clientsRT   R¾   Rú   R   Rû   Rr   Rü   Rý   (   RA   R?   Rþ   R‚   t   other_client(    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt'   test_stderr_file_is_removed_two_kernels‰  s    !c            sù   |  j  ƒ  ‰  |  j ƒ  } | j ‡  f d †  d t ƒ|  j | j d d d ƒ t |  j | ƒ ƒ d k sn t	 ‚ |  j | ƒ d } | j
 | j
 k s™ t	 ‚ | j t d t d „  ƒ ƒ t j | j
 ƒ sÍ t	 ‚ |  j d | ƒ t j | j
 ƒ sõ t	 ‚ d S(	   sP   Test that console doesn't remove stderr when a related client is not
    closed.c              s   ˆ  j  d  k	 S(   N(   RE   R7   (    (   RF   (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   ®  RH   RI   i   i    Rø   c          W   s   t  j S(   N(   R   t   No(   R¦   (    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   »  RH   R‚   N(   RL   RX   RM   RN   RZ   RY   R7   Rè   R   RT   R¾   Rú   R   Rû   Rr   Rü   Rý   (   RA   R?   Rþ   R‚   R  (    (   RF   sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt$   test_stderr_file_remains_two_kernels¥  s    !c            s¨   | j  j |  d ƒ t ƒ  |  j _ |  j ƒ  | j d ƒ |  j ƒ  d } | j sX t	 ‚ | j
 } t rv | j ƒ  ‰  n | j ƒ  j ƒ  ‰  | j ‡  f d †  d d ƒd S(   sC   Test that we show kernel error messages when a kernel crash occurs.t   create_kernel_specip  iÿÿÿÿc              s   t  ˆ  d ƒ S(   NRW   (   R   (    (   t   webpage(    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyRG   Ù  RH   RI   N(   t   patcht   objectR   R  t   return_valueR;   R[   R]   t   is_error_shownRT   t
   infowidgetR   t   paget	   mainFrameRM   (   RA   t   mockerR?   t   error_clientt   webview(    (   R  sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_kernel_crashÁ  s    
	s   Only works on Windowsc         C   sX   t  ƒ  } t t j | d ƒ d ƒ j ƒ  |  j ƒ  t j t j | d ƒ ƒ sT t ‚ d S(   s+   Test that we are removing old stderr files.s
   foo.stderrRh   N(   R   Ry   Rr   Rs   R0   t   _remove_old_stderr_filesRx   RT   (   RA   R?   R™   (    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   test_remove_old_stderr_filesÜ  s    	
t   __main__(h   R   R¿   Rv   t   os.patht   pathRr   Ræ   R   t   tempfilet   textwrapR    t   unittest.mockR   t   ImportErrort   mockR¹   R   t   jupyter_client.kernelspecR   t   pygments.tokenR   t   pytestt   qtpyR   t   qtpy.QtCoreR   t   qtpy.QtWebEngineWidgetsR   t   qtpy.QtWidgetsR   R	   t   spyder.config.guiR
   t   spyder.config.mainR   t   spyder.py3compatR   R   t   spyder.plugins.tests.test_helpR   t   spyder.plugins.ipythonconsoleR   t   spyder.utils.ipython.styleR   t   spyder.utils.programsR   RN   t
   gettempdirRt   Rs   R6   R   R   R   t   fixtureRA   t   markt   slowR*   t   skipifR   RV   R`   Rc   Rg   Rj   R)   Rk   R(   Rl   t   platformRo   Rƒ   R”   Rœ   R¡   R©   R®   R¶   R»   RÃ   t   no_xvfbt   environR‹   R7   RÉ   RÍ   RÏ   RÐ   RÔ   RÙ   RÜ   Rå   Rê   Rí   Rï   R÷   Rÿ   R  R  R  R  R   t   main(    (    (    sG   lib/python2.7/site-packages/spyder/plugins/tests/test_ipythonconsole.pyt   <module>   s   		
7		3							3		%			!			0 	'			3-,	0	#	$*	0(							0	0	0	0	.