U
    dl                     @   s^   d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dlZd dlZG dd dej	Z
dS )    N)Popen)mkdtempc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
AutoreloadTestc                 C   s   t  | _d S )N)r   pathself r   @/tmp/pip-unpacked-wheel-fekwu36z/tornado/test/autoreload_test.pysetUp   s    zAutoreloadTest.setUpc                 C   s@   zt | j W n* tk
r:   td t | j Y nX d S )N   )shutilrmtreer   OSErrortimesleepr   r   r   r	   tearDown   s
    
zAutoreloadTest.tearDownc              	   C   s   d}t t j| jd tt j| jdd  tt j| jdd}|| W 5 Q R X t  }dt jkr|t j	t jd  7 }t
tjddgtj| jtt j|dd	d
}| d }| |d d S )Na  import os
import sys

from tornado import autoreload

# This import will fail if path is not set up correctly
import testapp

print('Starting')
if 'TESTAPP_STARTED' not in os.environ:
    os.environ['TESTAPP_STARTED'] = '1'
    sys.stdout.flush()
    autoreload._reload()
testappztestapp/__init__.pywztestapp/__main__.py
PYTHONPATH-mr   Tstdoutcwdenvuniversal_newlinesr   Starting
Starting
)osmkdirr   joinopenclosewritegetcwdenvironpathsepr   sys
executable
subprocessPIPEdictcommunicateassertEqual)r   mainf
pythonpathpoutr   r   r	   test_reload_module   s"    

z!AutoreloadTest.test_reload_modulec           	   	   C   s  d}t t j| jd t j| jdd}t|d  t j| jdd}t|d}|| W 5 Q R X t  }dt jkr|t j	t jd  7 }t
tjddddgtj| jtt j|d	d
d}tdD ]}| d k	r qtd q|  td| d }| |d d S )Na  import os
import sys

# This import will fail if path is not set up correctly
import testapp

if 'tornado.autoreload' not in sys.modules:
    raise Exception('started without autoreload wrapper')

import tornado.autoreload

print('Starting')
sys.stdout.flush()
if 'TESTAPP_STARTED' not in os.environ:
    os.environ['TESTAPP_STARTED'] = '1'
    # Simulate an internal autoreload (one not caused
    # by the wrapper).
    tornado.autoreload._reload()
else:
    # Exit directly so autoreload doesn't catch it.
    os._exit(0)
r   z__init__.pyr   z__main__.pyr   r   ztornado.autoreloadr   Tr   (   g?zsubprocess failed to terminater   r   )r   r   r   r   r    r!   r"   r#   r$   r%   r   r&   r'   r(   r)   r*   rangepollr   r   kill	Exceptionr+   r,   )	r   r-   Z	init_fileZ	main_filer.   r/   Zautoreload_procir1   r   r   r	    test_reload_wrapper_preservationB   s2    

z/AutoreloadTest.test_reload_wrapper_preservationN)__name__
__module____qualname__r
   r   r2   r9   r   r   r   r	   r      s   'r   )r   r   r(   r   r&   tempfiler   r   ZunittestZTestCaser   r   r   r   r	   <module>   s   