
    #/h#                         S SK r S SKrS SKrS SKJr  S SKrS SKJr  S SKrS SKrS SK	r	S SK
r
 " S S\	R                  5      rg)    N)Popen)mkdtempc                   H    \ rS rSrS rS rSS jrS rS rS r	S	 r
S
 rSrg)AutoreloadTest   c                 V    SU l         [        5       U l        U R                  SS05        g )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    >/usr/lib/python3/dist-packages/tornado/test/autoreload_test.pysetUpAutoreloadTest.setUp   s/    I	 	$ '	
    c                      [         R                  " U R                  5        g ! [         a9    [        R
                  " S5        [         R                  " U R                  5         g f = f)N   )shutilrmtreer
   OSErrortimesleepr   s    r   tearDownAutoreloadTest.tearDown.   sC    		%MM$))$ 	% JJqMMM$))$	%s    # A A&%A&Nc                    Uc  U R                   nUR                  5        H  u  p4[        U[        5      (       ad  [        R
                  " [        R                   R                  X#5      5        U R                  U[        R                   R                  X#5      5        M~  [        [        R                   R                  X#5      SSS9 nUR                  [        R                  " U5      5        SSS5        M     g! , (       d  f       M  = f)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   AutoreloadTest.write_files:   s     		I"jjlND(D))i67  277<<	+HI"'',,y7wOSTGGHOOH56 PO +
 POs   &C99
D	c           	         [         R                  " 5       nS[         R                  ;   aX  U[         R                  [         R                  R                  [         R                  " 5       [         R                  S   5      -   -  n[        U[        R                  [        [         R                  US9U R                  SSS9n[        S5       H]  nUR                  5       b    Of[        R                  " 5       S:X  a  [        R                  " S5        MG  [        R                  " S	5        M_     UR!                  5         [#        S
5      eUR%                  5       S   nU R'                  UR(                  S5        U$ )N
PYTHONPATH)r0   Tr   )stdoutenvcwduniversal_newlinesr   (   riscv64r   g?zsubprocess failed to terminater   )r"   getcwdenvironpathsepr
   r$   r   
subprocessPIPEr!   rangepollplatformmachiner   r   kill	ExceptioncommunicateassertEqual
returncode)r   args
pythonpathpiouts         r   run_subprocessAutoreloadTest.run_subprocessJ   s    YY[
2::%"**rww||BIIKLAY'ZZZJ??RZZJ7		#
 rAvvx#!Y.

1

3  FFH<==mmoa q)
r   c                    SnU R                  SSUS.05        S GH(  nU R                  US9   U R                  SS9   U(       a  [        R                  S	S
/nO[        R                  /nU R	                  US	S/-   5      nU R                  US5        S S S 5        U R                  SS9   U R	                  WS/-   5      nU(       a  SOSnU R                  UU S3S-  5        S S S 5        U R                  SS9   U R	                  WS/-   5      nU(       a  SOSnU R                  UU S3S-  5        S S S 5        S S S 5        GM+     g ! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       N>= f! , (       d  f       GMq  = f)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").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   rC   )r   mainrP   	base_argsrI   expect_imports         r   test_reloadAutoreloadTest.test_reloadk   s   " 	#%#'	
 %Gg.\\x\0%(^^T;O$P	%(^^$4	 --i4:K.KLC$$ 1" \\v\.--i;P:Q.QRC # 34 " $$(/)]^ /" \\{\3 --i9+.EFC # 34 "
 $$(/)ab 4G /. %00" /." 43G /.sS   E<AE	E<*9E#E<:9E+3E<	
EE<
E($E<+
E95E<<
F	c                     SnU R                  SSUS.05        U R                  [        R                  SSSS/5      nU R	                  US5        g )Nzimport 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").read())
rM   rN   rO   rS   rT   zStarting
Starting
r   rJ   rY   rZ   rC   r   r[   rI   s      r    test_reload_wrapper_preservation/AutoreloadTest.test_reload_wrapper_preservation   sd     	#%#'	
 !!^^T#7yI
 	./r   c           
          SnU R                  SU05        U R                  [        R                  SSSSSSS/5      nU R	                  US5        g )	Nzimport os
import sys

print(os.path.basename(sys.argv[0]))
print(f'argv={sys.argv[1:]}')
exec(open("run_twice_magic.py").read())
main.pyrS   rT   arg1z--arg2arg3z\main.py
argv=['arg1', '--arg2', '-m', 'arg3']
main.py
argv=['arg1', '--arg2', '-m', 'arg3']
ra   rb   s      r   test_reload_wrapper_args'AutoreloadTest.test_reload_wrapper_args   sd     	)T*+ !!$	
 	TUr   c                     SnU R                  SU05        U R                  [        R                  SSSS/5      nU R	                  US5        g )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").read())
rf   rS   rT   z--until-successzreloading
exiting cleanly
ra   rb   s      r   !test_reload_wrapper_until_success0AutoreloadTest.test_reload_wrapper_until_success   sU    
 	)T*+!!^^T#79JIV
 	<=r   )r	   r
   )N)__name__
__module____qualname____firstlineno__r   r   r   rJ   r^   rc   ri   rl   __static_attributes__ r   r   r   r      s/    
@
%7 BOb0>V:>r   r   )r"   r   r:   r   rY   tempfiler   r'   r   unittestr>   TestCaser   rs   r   r   <module>rw      s7    	    
     >X&& >r   