
    ;e                         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 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                     dS dS )    N)support)script_helperc                       e Zd Zd ZdS )GeneralTestc                 V    t          j        d          }t          j        |           d S )Nz_test_atexit.py)r   findfiler   run_test_script)selfscripts     '/usr/lib/python3.11/test/test_atexit.pytest_generalzGeneralTest.test_general   s*    !"344%f-----    N)__name__
__module____qualname__r    r   r   r   r   
   s#        . . . . .r   r   c                       e Zd Zd Zd ZdS )FunctionalTestc                    t          j        d          }t          j        d|          }|                     |j                                                                        ddg           |                     |j	                   d S )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   sz         ,T488))4466GGG!!!!!r   c                    t          j        d          }t          j        d|          }|                     |j                                                                        ddg           |                     |j	                   d S )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    s{         ,T488))4466I8NOOO!!!!!r   N)r   r   r   r&   r*   r   r   r   r   r      s2        " " "" " " " "r   r   c                   b    e Zd Zd Zd Z ej         eed          d          d             Z	dS )SubinterpreterTestc                     t          j                    }t          j        d          }t	          j        |          }|                     |d           |                     t          j                    |           d S )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_leak6   su            &t,,a   +--q11111r   c                     t          j                    }t          j        d          }t	          j        |          }|                     |d           |                     t          j                    |           d S )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_refcycleF   su            &t,,a   +--q11111r   pipezrequires os.pipe()c                 h   d}t          j                    \  }}t          j        d                    |                    }t          j        |          }t          j        |           |                     t          j	        |t          |                    |           t          j        |           d S )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_teardownU   s     +wyy1   F1II  &t,,
CMM22H===
r   N)
r   r   r   r5   r7   unittest
skipUnlesshasattrr:   rB   r   r   r   r,   r,   3   sk        2 2 2 2 2 2 XV,,.BCC  DC  r   r,   __main__)r/   r:   sysr   rC   testr   test.supportr   TestCaser   r   cpython_onlyr,   r   mainr   r   r   <module>rM      s    				 



         & & & & & &. . . . .(# . . . "  "  "  "  "X&  "  "  "F 	2 2 2 2 2* 2 2 2j zHMOOOOO r   