U
    g                     @  s   d dl mZ d dlmZ d dlZd dlZddlmZ ddlm	Z	m
Z
 ejddG d	d
 d
e
ZejddG dd de	ZddddZddddZdS )    )annotations)NoReturnN   )StapledStream)ReceiveStream
SendStreamF)slotsc                   @  sL   e Zd ZU eeZded< dddddZddd	d
Z	ddddZ
dS )RecordSendStreamzlist[str | tuple[str, object]]recordobjectNone)datareturnc                   s   | j d|f d S )Nsend_allr
   append)selfr    r   F/tmp/pip-unpacked-wheel-ks04xdmi/trio/_tests/test_highlevel_generic.pyr      s    zRecordSendStream.send_allr   c                   s   | j d d S )Nwait_send_all_might_not_blockr   r   r   r   r   r      s    z.RecordSendStream.wait_send_all_might_not_blockc                   s   | j d d S Nacloser   r   r   r   r   r      s    zRecordSendStream.acloseN)__name__
__module____qualname__attrsFactorylistr
   __annotations__r   r   r   r   r   r   r   r	      s   
r	   c                   @  s@   e Zd ZU eeZded< ddddddZd	d
ddZ	dS )RecordReceiveStreamz"list[str | tuple[str, int | None]]r
   Nz
int | Nonebytes)	max_bytesr   c                   s   | j d|f dS )Nreceive_some    r   )r   r#   r   r   r   r$      s    z RecordReceiveStream.receive_somer   r   c                   s   | j d d S r   r   r   r   r   r   r   "   s    zRecordReceiveStream.aclose)N)
r   r   r   r   r   r   r
   r    r$   r   r   r   r   r   r!      s   
r!   r   r   c                    sT  t   t } t | }|j ks$t|j| ks2t|dI d H  | I d H   jddgksbt j	  |
 I d H   jdgkst j	  dd fdd}| _
|
 I d H   jd	gkst j	  | jg kst|d
I d H  | jdgkst jg kst| j	  | I d H  | jdgks>t jdgksPtd S )N   foo)r   r&   r   r   r   r   c                     s    j d d S )Nsend_eofr   r   send_streamr   r   fake_send_eof:   s    z)test_StapledStream.<locals>.fake_send_eofr'     )r$   r+   )r	   r!   r   r)   AssertionErrorreceive_streamr   r   r
   clearr'   r$   r   )r-   stapledr*   r   r(   r   test_StapledStream&   s8    





r0   c               	     s   G dd dt } G dd dt}t|  | }tjtdd}| I d H  W 5 Q R X t|jj	tsht
|jjdgkszt
|jjdgkst
d S )Nc                      s"   e Zd Zdd fddZ  ZS )z@test_StapledStream_with_erroring_close.<locals>.BrokenSendStreamr   r   c                   s   t   I d H  tdd S )Nz
send errorsuperr   
ValueErrorr   	__class__r   r   r   R   s    zGtest_StapledStream_with_erroring_close.<locals>.BrokenSendStream.acloser   r   r   r   __classcell__r   r   r4   r   BrokenSendStreamQ   s   r8   c                      s"   e Zd Zdd fddZ  ZS )zCtest_StapledStream_with_erroring_close.<locals>.BrokenReceiveStreamr   r   c                   s   t   I d H  tdd S )Nz
recv errorr1   r   r4   r   r   r   W   s    zJtest_StapledStream_with_erroring_close.<locals>.BrokenReceiveStream.acloser6   r   r   r4   r   BrokenReceiveStreamV   s   r9   z^(send|recv) error$)matchr   )r	   r!   r   pytestZraisesr3   r   
isinstancevalue__context__r,   r)   r
   r-   )r8   r9   r/   excinfor   r   r   &test_StapledStream_with_erroring_closeN   s    r@   )
__future__r   typingr   r   r;   Z_highlevel_genericr   abcr   r   Zdefiner	   r!   r0   r@   r   r   r   r   <module>   s   

(