U
    /e                     @   sP  d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZmZ ddlmZmZmZ d aag ZdddZd	d
 Ze  dd Zdd ZdZejjejdk dddd ZejjejdkddZeejjejdkdddd Z edd Z!edd Z"ejjejdkddd d! Z#ejje$edkd"dd#d$ Z%dS )%zTest eventloop integration    N)
enable_guiloop_asyncio
loop_cocoaloop_tk   )executeflush_channelsstart_new_kernelZPySide6ZPyQt5Zqt6Zqt5c               	   C   s^   dD ]T} t d|   z,tt|   t|  dtjkr@tjd= W q tk
rV   Y qX qdS )zIf any version of Qt is available, this will populate `guis_avail` with 'qt' and 'qtx'. Due
    to the import mechanism, we can't import multiple versions of Qt in one session.r
   zTrying ZQT_APIN)print
__import__gui_to_moduleqt_guis_availappendosenvironImportError)gui r   B/tmp/pip-unpacked-wheel-g43y689f/ipykernel/tests/test_eventloop.py_get_qt_vers   s    

r   c                   C   s   t  \aatt dS )zCstart the global kernel (if it isn't running) and return its clientN)r	   KMKCr   r   r   r   r   setup-   s    
r   c                   C   s0   t d k	sttd k	stt  t jdd d S )NT)now)r   AssertionErrorr   Zstop_channelsZshutdown_kernelr   r   r   r   teardown4   s    r   zD
from ipykernel.tests._asyncio_utils import async_func
async_func()
)   zonly relevant on tornado 5)reasonc                  C   s   t d k	sttd k	sttt tdt\} }|d dksBt|tt ttt\} }|d dkslt|t   tt ttt\} }|d dkstd S )Nz%gui asynciostatusok)r   r   r   r   r   
async_codeZinterrupt_kernel)Zmsg_idcontentr   r   r   test_asyncio_interruptA   s    r#   ntzcausing failures on windowsdarwinzhangs on macosc                    sN    fdd}t j|d}|  zt  W n tk
r@   Y nX |  d S )Nc                      s4   t d z jj  W n tk
r.   Y nX d S )Nr   )timesleepZapp_wrapperappquitAttributeErrorr   kernelr   r   do_thingZ   s
    
ztest_tk_loop.<locals>.do_thing)target)	threadingThreadstartr   	Exceptionjoin)r,   r-   tr   r+   r   test_tk_loopW   s    r5   c                    s*    fdd}t    | t|  d S )Nc                      s      j d S N)	call_soonstopr   Zloopr   r   r-   n   s    z#test_asyncio_loop.<locals>.do_thing)asyncioZget_event_loopr7   r   )r,   r-   r   r9   r   test_asyncio_loopl   s    
r;   c                 C   s   t d|  d S )NZtk)r   r+   r   r   r   test_enable_guiv   s    r<   z
MacOS-onlyc                 C   s   t |  d S r6   )r   r+   r   r   r   test_cocoa_loop{   s    r=   z.No viable version of PyQt or PySide installed.c                 C   s   t d }t||  t| ds tt| jds0t| j}t||  || jksNttd |  t| drftdD ]}|t krj q|qjt||  | }|jd| dksttd |  td|  t| t| jkstd S )Nr   r(   Zqt_event_loopr
   z9Cannot switch Qt versions for this session; you must use z.
Zqt)	r   r   hasattrr   r(   Z
readouterroutr   str)r,   Zcapsysr   r(   Znot_guiZcapturedr   r   r   test_qt_enable_gui   s$    





rA   )&__doc__r:   r   sysr/   r&   ZpytestZtornadoZipykernel.eventloopsr   r   r   r   utilsr   r   r	   r   r   r   r   r   r   r   r!   markZskipifversion_infor#   nameZwindows_skipplatformr5   r;   r<   r=   lenrA   r   r   r   r   <module>   sD   


	


 