
    daf                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZ  G d dej                        Z	 G d dej                        Z
ej                   G d d	ej                               Zed
k(  r ej                          yy)    N)support)script_helperc                       e Zd Zd Zy)GeneralTestc                 X    t        j                  d      }t        j                  |       y )Nz_test_atexit.py)r   findfiler   run_test_script)selfscripts     +/root/Python-3.12.4/Lib/test/test_atexit.pytest_generalzGeneralTest.test_general
   s!    !!"34%%f-    N)__name__
__module____qualname__r    r   r   r   r   	   s    .r   r   c                       e Zd Zd Zd Zy)FunctionalTestc                    t        j                  d      }t        j                  d|      }| j	                  |j
                  j                         j                         ddg       | j                  |j                         y )Nz
            import atexit

            def f(msg):
                print(msg)

            atexit.register(f, "one")
            atexit.register(f, "two")
        -ctwoone
textwrapdedentr   assert_python_okassertEqualoutdecode
splitlinesassertFalseerrr
   coderess      r   test_shutdownzFunctionalTest.test_shutdown   sc        ,,T48)446G!r   c                    t        j                  d      }t        j                  d|      }| j	                  |j
                  j                         j                         ddg       | j                  |j                         y )Na@  
            import sys
            import atexit as atexit1
            del sys.modules['atexit']
            import atexit as atexit2
            del sys.modules['atexit']

            assert atexit2 is not atexit1

            atexit1.register(print, "atexit1")
            atexit2.register(print, "atexit2")
        r   atexit2atexit1r   r#   s      r   test_atexit_instancesz$FunctionalTest.test_atexit_instances   sd        ,,T48)446I8NO!r   N)r   r   r   r&   r*   r   r   r   r   r      s    ""r   r   c                   X    e Zd Zd Zd Z ej                   eed      d      d        Z	y)SubinterpreterTestc                     t        j                         }t        j                  d      }t	        j
                  |      }| j                  |d       | j                  t        j                         |       y )Nz
            import atexit
            def f():
                pass
            atexit.register(f)
            del atexit
        r   atexit_ncallbacksr   r   r   run_in_subinterpr   r
   nr$   rets       r   test_callbacks_leakz&SubinterpreterTest.test_callbacks_leak5   s`          &&t,a ++-q1r   c                     t        j                         }t        j                  d      }t	        j
                  |      }| j                  |d       | j                  t        j                         |       y )Nz
            import atexit
            def f():
                pass
            atexit.register(f)
            atexit.__atexit = atexit
        r   r.   r2   s       r   test_callbacks_leak_refcyclez/SubinterpreterTest.test_callbacks_leak_refcycleE   s`          &&t,a ++-q1r   pipezrequires os.pipe()c                 Z   d}t        j                         \  }}t        j                  dj	                  |            }t        j                  |      }t        j                  |       | j                  t        j                  |t        |            |       t        j                  |       y )Ns   The test has passed!z
            import os
            import atexit
            def callback():
                os.write({:d}, b"The test has passed!")
            atexit.register(callback)
        )osr8   r   r   formatr   r1   closer   readlen)r
   expectedrwr$   r4   s         r   (test_callback_on_subinterpreter_teardownz;SubinterpreterTest.test_callback_on_subinterpreter_teardownT   s}     +wwy1   F1I &&t,
CM2H=
r   N)
r   r   r   r5   r7   unittest
skipUnlesshasattrr:   rB   r   r   r   r,   r,   2   s8    2 2 XV,.BC Dr   r,   __main__)r/   r:   r   rC   testr   test.supportr   TestCaser   r   cpython_onlyr,   r   mainr   r   r   <module>rL      s~     	    &.(## . "X&&  "F 	2** 2 2j zHMMO r   