o
    
i                     @   sr   d dl Z 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 dej
Zedkr7e  dS dS )    N)picklec                   @   sf   e Zd 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ejjdddd ZdS )CloudPickleFileTestszIn Cloudpickle, expected behaviour when pickling an opened file
    is to send its contents over the wire and seek to the same position.c                 C   s&   t  | _tj| jd| _d| _d S )NtestfilezHello world!)tempfilemkdtemptmpdirospathjointmpfilepath
teststringself r   a/home/ubuntu/.local/lib/python3.10/site-packages/srsly/tests/cloudpickle/cloudpickle_file_test.pysetUp   s   

zCloudPickleFileTests.setUpc                 C   s   t | j d S N)shutilrmtreer   r   r   r   r   tearDown   s   zCloudPickleFileTests.tearDownc              	   C   sh   t | jd  t | jd}| dtt|  W d    n1 s'w   Y  t	
| j d S )Nwr )openr   closeassertEqualr   loadscloudpickledumpsreadr   remove)r   fr   r   r   test_empty_file   s
   z$CloudPickleFileTests.test_empty_filec                 C   s   t | jd}|| j W d    n1 sw   Y  ttj}t	| W d    n1 s2w   Y  dt
|jv s@J t| j d S )Nr   zCannot pickle closed files)r   r   writer   pytestraisesr   PicklingErrorr   r   strvaluer   r    )r   r!   excinfor   r   r   test_closed_file    s   z%CloudPickleFileTests.test_closed_filec                 C   s   t | jd}|| j W d    n1 sw   Y  t | jd}tt|}| | j|	  W d    n1 s>w   Y  t
| j d S )Nr   r   )r   r   r#   r   r   r   r   r   r   r   r   r    r   r!   new_fr   r   r   test_r_mode)   s   z CloudPickleFileTests.test_r_modec                    sh   t | jd  | j  d | tj fdd W d    n1 s'w   Y  t	| j d S )Nr   r   c                      s
   t  S r   )r   r   r   r!   r   r   <lambda>8   s   
 z2CloudPickleFileTests.test_w_mode.<locals>.<lambda>)
r   r   r#   r   seekassertRaisesr   r&   r   r    r   r   r.   r   test_w_mode3   s   

z CloudPickleFileTests.test_w_modec                 C   st   t | jd$}|| j |d tt|}| 	| j|
  W d    n1 s-w   Y  t| j d S )Nw+r   )r   r   r#   r   r0   r   r   r   r   r   r   r   r    r+   r   r   r   test_plus_mode;   s   
z#CloudPickleFileTests.test_plus_modec                 C   s   t | jd>}|| j |d tt|}| 	d|
  | 	| jdd  |  |d | 	| j|  W d    n1 sGw   Y  t| j d S )Nr3      r   )r   r   r#   r   r0   r   r   r   r   r   tellr   r   r    )r   r!   	unpickledr   r   r   	test_seekD   s   


zCloudPickleFileTests.test_seekzRequires pytest -s to pass)reasonc              	   C   s@   t jt jfD ]}| |tt| q| tj	dd  d S )Nc                   S   s   t tjS r   )r   r   sysstdinr   r   r   r   r/   X   s    zICloudPickleFileTests.test_pickling_special_file_handles.<locals>.<lambda>)
r:   stdoutstderrr   r   r   r   r   r1   r&   )r   outr   r   r   "test_pickling_special_file_handlesR   s
   z7CloudPickleFileTests.test_pickling_special_file_handlesN)__name__
__module____qualname____doc__r   r   r"   r*   r-   r2   r4   r8   r$   markskipr?   r   r   r   r   r      s    	
	r   __main__)r   r   r:   r   unittestr$   srsly.cloudpickler   srsly.cloudpickle.compatr   TestCaser   r@   mainr   r   r   r   <module>   s    N