o
    û›hœ"  ã                   @   s–   d Z ddlmZmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlZddlmZ ddlmZ er9dd	lmZ eƒ Zd
d„ Zdd„ ZG dd„ de
ƒZdS )zY
Test for async helpers.

Should only trigger on python 3.5+ or will have syntax errors.
é    )ÚchainÚrepeat)ÚdedentÚindent)ÚTYPE_CHECKING)ÚTestCaseN)Ú_should_be_async)Úskip_without)Úget_ipythonc                 C   s   t  t| ƒ¡ ¡ S ©N)ÚipÚrun_cellr   Úraise_error©Úx© r   ú[c:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/core/tests/test_async_helpers.pyÚiprc   s   r   c                 C   s   t  t| ƒ¡S r   )r   r   r   r   r   r   r   Úiprc_nr   s   r   c                   @   s°   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zejjdd�ejjdd�dd„ ƒƒZedƒdd„ ƒZedƒdd„ ƒZedƒdd„ ƒZdd „ Zd!S )"Ú	AsyncTestc                 C   s@   |   tdƒ¡ |  tdƒ¡ |  tdƒ¡ |   ttdƒƒ¡ d S )NÚFalsezawait bar()zx = await bar()zA
            async def awaitable():
                pass
        )ZassertFalser   Ú
assertTruer   ©Úselfr   r   r   Útest_should_be_async   s   ÿÿÿzAsyncTest.test_should_be_asyncc                 C   s¢   g }|  d¡ |  dtdƒf¡ |  dtdƒf¡ |  dtdƒf¡ |  dtd	ƒf¡ |  d
tdƒf¡ |  dtdƒf¡ |  dtdƒf¡ |  dtdƒf¡ |S )N)Úbasicz{val}Úifz,
        if True:
            {val}
        ÚwhilezA
        while True:
            {val}
            break
        ÚtryzI
        try:
            {val}
        except:
            pass
        ÚexceptzI
        try:
            pass
        except:
            {val}
        Úfinallyzk
        try:
            pass
        except:
            pass
        finally:
            {val}
        Úforz6
        for _ in range(4):
            {val}
        Únestedz^
        if True:
            while True:
                {val}
                break
        zdeep-nesteda  
        if True:
            while True:
                break
                for x in range(3):
                    if True:
                        while True:
                            for x in range(3):
                                {val}
        ©Úappendr   ©r   Z
test_casesr   r   r   Ú_get_top_level_cases.   s   
	zAsyncTest._get_top_level_casesc                 C   s,   g }|  dtdƒf¡ |  dtdƒf¡ |S )NÚclassz,
        class V:
            {val}
        znested-classzE
        class V:
            class C:
                {val}
        r#   r%   r   r   r   Ú_get_ry_syntax_errors   s   zAsyncTest._get_ry_syntax_errorsc                 C   sø   |   ¡ }| |  ¡ ¡ dddtdƒf}|D ]d\}}|  |df¡� t|jdd�ƒ W d   ƒ n1 s3w   Y  |D ]>}|  ||f¡�- d||f }| jt|d�� t|j|d�ƒ W d   ƒ n1 sdw   Y  W d   ƒ n1 ssw   Y  q:qd S )	NÚreturnÚyieldú yield from (_ for _ in range(3))zj
                    def f():
                        pass
                    return
                    Úpass©Úvalz"Syntax error not raised for %s, %s©Úmsg)	r&   Úextendr(   r   ÚsubTestr   ÚformatÚassertRaisesÚSyntaxError)r   Ztl_err_test_casesÚvalsÚ	test_nameÚ	test_caser.   r0   r   r   r   Útest_top_level_return_error“   s(   ÿÿÿ€þ€ÿúz%AsyncTest.test_top_level_return_errorc                 C   st  g }|  ddtdƒf¡ |  ddtdƒf¡ |  ddtdƒf¡ |  d	dtd
ƒf¡ |  ddtdƒf¡ dd„ }d}t|  ¡ tdƒƒ}t|  ¡ tdƒƒ}t||ƒ}|D ]d\}}}	|D ]\\\}
}}||	|ƒ}|D ]N}||
|f}|j|d�}|  |¡�4 |r¢dt	|ƒ }| j
t|d�� t|ƒ t|ƒ W d   ƒ n1 sœw   Y  nt|ƒ W d   ƒ n1 s°w   Y  qgqZqSd S )NÚfuncFz
        def f():Úmethodz@
        class MyClass:
            def __init__(self):
        z
async-funcTz
        async def f():zasync-methodz6
        class MyClass:
            async def f(self):Úclosurez/
        def f():
            def g():
        c                 S   sP   |   ¡  ¡ }d}|d D ]}|dkr n|d7 }qt|d|d  ƒ}| d | S )Nr   éÿÿÿÿú é   é   Ú
)ÚstripÚ
splitlinesr   )ÚcontextÚcaseÚlinesÚ
prefix_lenÚcZindented_caser   r   r   Ú	nest_caseÄ   s   
z2AsyncTest.test_in_func_no_error.<locals>.nest_case)r)   r*   r+   r-   zSyntaxError not raised for %sr/   )r$   r   Úzipr&   r   r(   r   r3   r2   Ústrr4   r5   r   Úprint)r   Zfunc_contextsrI   r6   Zsuccess_testsÚfailure_testsÚtestsZcontext_nameZ
async_funcrD   r7   r8   Zshould_failZnested_caser.   Ztest_idÚcellr0   r   r   r   Útest_in_func_no_error«   sD   


ÿ
ý€€÷€üýÿzAsyncTest.test_in_func_no_errorc                 C   sN   |   t¡� tdƒ tdƒ tdƒ W d   ƒ n1 sw   Y  tdƒ d S )Nz
nonlocal xz�
            x = 1
            def f():
                nonlocal x
                x = 10000
                yield x
            z”
            def f():
                def g():
                    nonlocal x
                    x = 10000
                    yield x
            z�
        def f():
            x = 20
            def g():
                nonlocal x
                x = 10000
                yield x
        )r4   r5   r   r   r   r   r   Útest_nonlocalî   s   
÷zAsyncTest.test_nonlocalc                 C   ó   t dƒ d S )NzC
        import asyncio
        await asyncio.sleep(0.001)
        ©r   r   r   r   r   Útest_execute  s   zAsyncTest.test_executec                 C   s   t dƒ t dƒ t dƒ d S )Nz%autoawait Falsez%autoawait TruezD
        from asyncio import sleep
        await sleep(0.1)
        rS   r   r   r   r   Útest_autoawait  s   zAsyncTest.test_autoawaitc                 C   s   t dƒ dS )zl
        The pgen parser in 3.8 or before use to raise MemoryError on too many
        nested parens anymorea�  (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))NrS   r   r   r   r   Útest_memory_error  s   zAsyncTest.test_memory_errorz+fail on curio 1.6 and before on Python 3.12)ÚreasonzRskip_without(curio) fails on 3.12 for now even with other skip so must uncond skipc                 C   rR   )Nz%autoawait curiorS   r   r   r   r   Útest_autoawait_curio#  s   zAsyncTest.test_autoawait_curioZtrioc                 C   rR   )Nú%autoawait triorS   r   r   r   r   Útest_autoawait_trio+  s   zAsyncTest.test_autoawait_trioc                 C   óH   t dƒ tdƒ}|  t¡� | ¡  W d   ƒ d S 1 sw   Y  d S )NrY   z?
        import asyncio
        await asyncio.sleep(0)
        )r   r   r4   Ú	TypeErrorr   ©r   Úresr   r   r   Útest_autoawait_trio_wrong_sleep/  ó
   
"ÿz)AsyncTest.test_autoawait_trio_wrong_sleepc                 C   r[   )Nz%autoawait asyncioz9
        import trio
        await trio.sleep(0)
        )r   r   r4   ÚRuntimeErrorr   r]   r   r   r   Ú"test_autoawait_asyncio_wrong_sleep9  r`   z,AsyncTest.test_autoawait_asyncio_wrong_sleepc                 C   s
   dt _d S )NÚasyncio)r   Zloop_runnerr   r   r   r   ÚtearDownD  s   
zAsyncTest.tearDownN)Ú__name__Ú
__module__Ú__qualname__r   r&   r(   r9   rP   rQ   rT   rU   rV   ÚpytestÚmarkZxfailÚskiprX   r	   rZ   r_   rb   rd   r   r   r   r   r      s,    QC	ÿ

	

r   )Ú__doc__Ú	itertoolsr   r   Útextwrapr   r   Útypingr   Zunittestr   rh   ZIPython.core.async_helpersr   ZIPython.testing.decoratorsr	   ZIPythonr
   r   r   r   r   r   r   r   r   Ú<module>   s    