
    Mh#                     |    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d dl	Z	 G d de	j
                  ZdS )    N)Popen)mkdtempc                   @    e Zd Zd Zd Zd
dZd Zd Zd Zd Z	d	 Z
dS )AutoreloadTestc                 h    d| _         t                      | _        |                     ddi           d S )Ni   zrun_twice_magic.pya  
                    import os
                    import sys

                    import tornado.autoreload

                    sys.stdout.flush()

                    if "TESTAPP_STARTED" not in os.environ:
                        os.environ["TESTAPP_STARTED"] = "1"
                        tornado.autoreload._reload()
                    else:
                        os._exit(0)
                )maxDiffr   pathwrite_filesselfs    \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/test/autoreload_test.pysetUpzAutoreloadTest.setUp   sE    II	 	$ '	
 	
 	
 	
 	
    c                     	 t          j        | j                   d S # t          $ r1 t	          j        d           t          j        | j                   Y d S w xY w)N   )shutilrmtreer	   OSErrortimesleepr   s    r   tearDownzAutoreloadTest.tearDown-   sd    		%M$)$$$$$ 	% 	% 	% JqMMMM$)$$$$$$	%s    7AANc                 "   || j         }|                                D ]\  }}t          |t                    rgt	          j        t          j                             ||                     |                     |t          j                             ||                     t          t          j                             ||          dd          5 }|	                    t          j        |                     ddd           n# 1 swxY w Y   dS )zWrite a directory tree to self.path.

        tree is a dictionary mapping file names to contents, or
        sub-dictionaries representing subdirectories.
        Nwutf-8)encoding)r	   items
isinstancedictosmkdirjoinr
   openwritetextwrapdedent)r   tree	base_pathnamecontentsfs         r   r
   zAutoreloadTest.write_files9   s&    	I"jjll 	7 	7ND((D)) 7i66777  27<<	4+H+HIIII"',,y$77wOOO 7STGGHOH556667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7s   (DD	
D	c                    t          j                    g}dt           j        v r<|d t           j        d                             t           j                  D             z  }t           j                            |          }t          |t          j        t          t           j        |          | j
        dd          }t          d          D ],}|                                 n8t          j        d           -|                                 t!          d	          |                                d
         }|                     |j        d
           |S )N
PYTHONPATHc                 p    g | ]3}t           j                            t          j                    |          4S  )r   r	   r!   getcwd).0parts     r   
<listcomp>z1AutoreloadTest.run_subprocess.<locals>.<listcomp>N   s>        RY[[$//  r   )r,   Tr   )stdoutenvcwduniversal_newlinesr   (   g?zsubprocess failed to terminater   )r   r/   environsplitpathsepr!   r   
subprocessPIPEr   r	   rangepollr   r   kill	ExceptioncommunicateassertEqual
returncode)r   argsparts
pythonpathpiouts          r   run_subprocesszAutoreloadTest.run_subprocessI   s-    2:%%  J|4::2:FF   E Z__U++
?RZJ777	#
 
 
 r 	> 	>Avvxx#JsOOOOFFHHH<===mmooa q)))
r   c                 F   d}|                      dd|di           dD ]}|                     |          5  |                     d          5  |rt          j        d	d
g}nt          j        g}|                     |d	dgz             }|                     |d           d d d            n# 1 swxY w Y   |                     d          5  |                     |dgz             }|rdnd}|                     || ddz             d d d            n# 1 swxY w Y   |                     d          5  |                     |dgz             }|rdnd}|                     || ddz             d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )Na  import sys

# In module mode, the path is set to the parent directory and we can import testapp.
try:
    import testapp
except ImportError:
    print("import testapp failed")
else:
    print("import testapp succeeded")

spec = getattr(sys.modules[__name__], '__spec__', None)
print(f"Starting {__name__=}, __spec__.name={getattr(spec, 'name', None)}")
exec(open("run_twice_magic.py", encoding="utf-8").read())
testapp z__init__.pyz__main__.py)FT)wrappermodule)mode-mtornado.autoreloadzimport testapp succeeded
Starting __name__='__main__', __spec__.name=testapp.__main__
import testapp succeeded
Starting __name__='__main__', __spec__.name=testapp.__main__
fileztestapp/__main__.pyzimport testapp succeededzimport testapp failedz2
Starting __name__='__main__', __spec__.name=None
   	directoryz6
Starting __name__='__main__', __spec__.name=__main__
)r
   subTestsys
executablerJ   rB   )r   mainrO   	base_argsrI   expect_imports         r   test_reloadzAutoreloadTest.test_reloadk   s,   " 	#%#' 	
 	
 	
 % 1	 1	Gg.. 0 0\\x\00   5%(^T;O$P		%(^$4	 --i4:K.KLLC$$                " \\v\..  --i;P:Q.QRRC #5224 " $$(^^^                " \\{\33   --i9+.EFFC #5224 "
 $$(bbb                G0 0 0 0 0 0 0 0 0 0 0 0 0 0 01	 1	s~   FAB+F+B//F2B/3F<DFDFDF5<E=1F=FFFFF	F	c                     d}|                      dd|di           |                     t          j        ddddg          }|                     |d           d S )Na  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')

print('Starting')
exec(open("run_twice_magic.py", encoding="utf-8").read())
rL   rM   rN   rR   rS   zStarting
Starting
r
   rJ   rX   rY   rB   r   rZ   rI   s      r    test_reload_wrapper_preservationz/AutoreloadTest.test_reload_wrapper_preservation   s     	#%#' 	
 	
 	
 !!^T#7yI
 
 	./////r   c           
          d}|                      d|i           |                     t          j        dddddddg          }|                     |d           d S )	Nzimport os
import sys

print(os.path.basename(sys.argv[0]))
print(f'argv={sys.argv[1:]}')
exec(open("run_twice_magic.py", encoding="utf-8").read())
main.pyrR   rS   arg1z--arg2arg3z\main.py
argv=['arg1', '--arg2', '-m', 'arg3']
main.py
argv=['arg1', '--arg2', '-m', 'arg3']
r_   r`   s      r   test_reload_wrapper_argsz'AutoreloadTest.test_reload_wrapper_args   sy     	)T*+++ !!$	
 
 	TUUUUUr   c                     d}|                      d|i           |                     t          j        ddddg          }|                     |d           d S )Nzimport os
import sys

if "TESTAPP_STARTED" in os.environ:
    print("exiting cleanly")
    sys.exit(0)
else:
    print("reloading")
    exec(open("run_twice_magic.py", encoding="utf-8").read())
rc   rR   rS   z--until-successzreloading
exiting cleanly
r_   r`   s      r   !test_reload_wrapper_until_successz0AutoreloadTest.test_reload_wrapper_until_success   sj    
 	)T*+++!!^T#79JIV
 
 	<=====r   )N)__name__
__module____qualname__r   r   r
   rJ   r]   ra   rf   rh   r.   r   r   r   r      s        
 
 
@
% 
% 
%7 7 7 7      DO O Ob0 0 0>V V V:> > > > >r   r   )r   r   r;   r   rX   tempfiler   r$   r   unittestTestCaser   r.   r   r   <module>ro      s    				            



         @> @> @> @> @>X& @> @> @> @> @>r   