
    Tg%e5'                     L   d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	Z	d dl
mZmZmZmZmZmZmZ d dlmZ  G d d          Z G d	 d
e          Z G d d          Z G d d          Z G d d          Z G d d          Z G d deee          Z G d deee          Z G d deeee          Z G d de          Z G d de          Z G d de          Z G d d e          Z  G d! d"eeee          Z! G d# d$eeee          Z" G d% d&eeee          Z#dS )'    N)abstractmethod)mock)AnyOptional)	BaseQueueFifoMemoryQueueLifoMemoryQueueFifoDiskQueueLifoDiskQueueFifoSQLiteQueueLifoSQLiteQueue)QueuelibTestCasec                   d    e Zd Zd
dZdeddfdZdee         fdZdee         fdZd
dZ	d	 Z
dS )
DummyQueuereturnNc                 ,    t                      | _        d S N)listqselfs    9lib/python3.11/site-packages/queuelib/tests/test_queue.py__init__zDummyQueue.__init__   s        objc                 :    | j                             |           d S r   )r   append)r   r   s     r   pushzDummyQueue.push   s    cr   c                 F    | j         r| j                                         nd S r   )r   popr   s    r   r    zDummyQueue.pop   s    #v/tvzz|||4/r   c                 .    | j         r| j         d         nd S )N)r   r   s    r   peekzDummyQueue.peek   s    !V-tvbzz-r   c                     d S r    r   s    r   closezDummyQueue.close"   s    r   c                 *    t          | j                  S r   )lenr   r   s    r   __len__zDummyQueue.__len__%   s    46{{r   )r   N)__name__
__module____qualname__r   r   r   r   r    r#   r&   r)   r%   r   r   r   r      s                0Xc] 0 0 0 0.hsm . . . .       r   r   c                        e Zd Zd Zd Zd ZdS )InterfaceTestc                 r   t                      }|                     t                    5  |                    d           d d d            n# 1 swxY w Y   |                     t                    5  |                                 d d d            n# 1 swxY w Y   |                     t                    5  |                                 d d d            n# 1 swxY w Y   |                     t                    5  t          |           d d d            n# 1 swxY w Y   |                                 d S )Nr   )r   assertRaisesNotImplementedErrorr   r#   r    r(   r&   )r   queues     r   
test_queuezInterfaceTest.test_queue*   s   233 	 	JJsOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	233 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	233 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	233 	 	JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sG   AAA0BBB6CCC<DDDc                 6   t          t          t                    rJ t          t          t                    rJ t          t          t                    rJ t          t
          t                    sJ t          t          t                    sJ t          t          t                    sJ t          t          t                    sJ t          t          t                    sJ t          t          t                    sJ t          t          t                    sJ d S r   )
issubclassr   r   intr   r   r   r	   r
   r   r   r   r   s    r   test_issubclasszInterfaceTest.test_issubclass6   s    dI.....c9-----.	:::::*i00000/955555/955555-33333-33333/955555/95555555r   c                    t          dt                    rJ t          g t                    rJ t          t                      t                    sJ t          t                      t                    sJ t          t	                      t                    sJ t
          t          t          t          fD ]J} || 	                                          }t          |t                    sJ |
                                 Kd S )N   )
isinstancer   r   r   r	   r
   r   r   r   tempfilenamer&   )r   clsr2   s      r   test_isinstancezInterfaceTest.test_isinstanceB   s    a+++++b),,,,,*,,	22222/++Y77777/++Y77777!=/?S 	 	CC))++,,EeY/////KKMMMM	 	r   N)r*   r+   r,   r3   r7   r=   r%   r   r   r.   r.   )   sA        
 
 

6 
6 
6	 	 	 	 	r   r.   c                   H    e Zd Zedefd            Zd Zd Zd Zd Z	d Z
dS )	QueueTestMixinr   c                     t                      r   )r1   r   s    r   r2   zQueueTestMixin.queueO   s    !###r   c                 Z    |                                  }|                                J dS )zEmpty queue testN)r2   r    r   r   s     r   
test_emptyzQueueTestMixin.test_emptyS   s$    JJLLuuwwr   c                     |                                  }|                    d           |                                dk    sJ d S N   ar2   r   r    rB   s     r   test_single_pushpopz"QueueTestMixin.test_single_pushpopX   s7    JJLL	tuuww$r   c                     d}|                                  }|                    |           |                                |k    sJ d S )Ns   }q(UbodyqU U	_encodingqUutf-8qUcookiesq}qUmetaq}qUheadersq	}Uurlq
X   file:///tmp/tmphDJYsgUdont_filterqUpriorityqK UcallbackqNUmethodqUGETqUerrbackqNu.rG   )r   elemr   s      r   test_binary_elementz"QueueTestMixin.test_binary_element]   sD    @ 	 JJLL	tuuww$r   c                 <   |                                  }|                     t          |          d           |                    d           |                     t          |          d           |                    d           |                    d           |                     t          |          d           |                                 |                                 |                                 |                     t          |          d           d S )Nr   rF   r9      b   c   )r2   assertEqualr(   r   r    rB   s     r   test_lenzQueueTestMixin.test_leni   s    JJLLQ###	tQ###	t	tQ###			Q#####r   c                    |                                  }|                     |                                           |                    d           |                     |                                d           |                     |                                d           |                     |                                           d S rE   r2   assertIsNoner#   r   rP   r    rB   s     r   test_peek_one_elementz$QueueTestMixin.test_peek_one_elementv   s    JJLL!&&((###	t4((($'''!&&((#####r   N)r*   r+   r,   r   r   r2   rC   rH   rK   rQ   rU   r%   r   r   r?   r?   N   s        $y $ $ $ ^$  
  

 
 
$ $ $$ $ $ $ $r   r?   c                        e Zd Zd Zd Zd ZdS )FifoTestMixinc                    |                                  }|                    d           |                    d           |                    d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           dS zBasic push/pop testrF   rM   rN   Nr2   r   rP   r    rB   s     r   test_push_pop1zFifoTestMixin.test_push_pop1       JJLL	t	t	t$'''$'''$'''$'''''r   c                    |                                  }|                    d           |                    d           |                    d           |                    d           |                     |                                d           |                     |                                d           |                    d           |                     |                                d           |                     |                                d           |                     |                                d           dS zTest interleaved push and popsrF   rM   rN      d   eNrZ   rB   s     r   test_push_pop2zFifoTestMixin.test_push_pop2       JJLL	t	t	t	t$'''$'''	t$'''$'''$'''''r   c                    |                                  }|                     |                                           |                    d           |                    d           |                    d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                           d S NrF   rM   rN   rS   rB   s     r   test_peek_fifozFifoTestMixin.test_peek_fifo      JJLL!&&((###	t	t	t4(((4((($'''4(((4((($'''4(((4((($'''!&&((#####r   N)r*   r+   r,   r[   ra   re   r%   r   r   rW   rW      A        	( 	( 	(( ( ($ $ $ $ $r   rW   c                        e Zd Zd Zd Zd ZdS )LifoTestMixinc                    |                                  }|                    d           |                    d           |                    d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           dS rY   rZ   rB   s     r   r[   zLifoTestMixin.test_push_pop1   r\   r   c                    |                                  }|                    d           |                    d           |                    d           |                    d           |                     |                                d           |                     |                                d           |                    d           |                     |                                d           |                     |                                d           |                     |                                d           dS r^   rZ   rB   s     r   ra   zLifoTestMixin.test_push_pop2   rb   r   c                    |                                  }|                     |                                           |                    d           |                    d           |                    d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                           d S rd   rS   rB   s     r   test_peek_lifozLifoTestMixin.test_peek_lifo   rf   r   N)r*   r+   r,   r[   ra   rm   r%   r   r   ri   ri      rg   r   ri   c                   l    e Zd ZdZej                            d          d             Zd Zd Z	d Z
dS )	PersistentTestMixini z@Reenable once Scrapy.squeues stops extending from this testsuite)reasonc                 8   |                                  }|                     t          |j        d           |                     t          |j        d           |                     t          |j        d            |                     t          |j        d            d S )Nr    c                     | S r   r%   )xs    r   <lambda>zEPersistentTestMixin.test_non_bytes_raises_typeerror.<locals>.<lambda>   s    q r   )r2   r0   	TypeErrorr   rB   s     r   test_non_bytes_raises_typeerrorz3PersistentTestMixin.test_non_bytes_raises_typeerror   s    JJLL)QVQ///)QVS111)QVT222)QV[[99999r   c                     d}|                                  }|                    |           |                                 |                                  }|                                }|                     ||           d S )Ns   
)r2   r   r&   r    rP   )r   e1r   e2s       r   test_text_in_windowsz(PersistentTestMixin.test_text_in_windows   sf    JJLL	r


				JJLLUUWWR     r   c                    |                                  }|                    d           |                    d           |                    d           |                    d           |                                 |                                 |                                 ~|                                  }|                     t          |          d           |                    d           |                                 |                                 |                                 ~|                                  }|                                J |                     t          |          d           dS )	z'Test closing and re-opening keeps staterF   rM   rN   r_      r`   Nr   )r2   r   r    r&   rP   r(   rB   s     r   test_close_openz#PersistentTestMixin.test_close_open   s   JJLL	t	t	t	t						JJLLQ###	t						JJLLuuww"""Q#####r   c                 \   |                                  }g d}t          j                            | j                  sJ |D ]}|                    |           |D ]}|                                 |                                 t          j                            | j                  rJ dS )z+Test queue dir is removed if queue is empty   0   1   2   3   4N)r2   ospathexistsqpathr   r    r&   )r   r   valuesrt   s       r   test_cleanupz PersistentTestMixin.test_cleanup  s    JJLL///w~~dj))))) 	 	AFF1IIII 	 	AEEGGGG				7>>$*-------r   N)r*   r+   r,   	chunksizepytestmarkxfailrw   r{   r~   r   r%   r   r   ro   ro      su        I[`aa: : ba:! ! !$ $ $0. . . . .r   ro   c                       e Zd Zd ZdS )FifoMemoryQueueTestc                     t                      S r   )r   r   s    r   r2   zFifoMemoryQueueTest.queue         r   Nr*   r+   r,   r2   r%   r   r   r   r     #        ! ! ! ! !r   r   c                       e Zd Zd ZdS )LifoMemoryQueueTestc                     t                      S r   )r	   r   s    r   r2   zLifoMemoryQueueTest.queue  r   r   Nr   r%   r   r   r   r     r   r   r   c                        e Zd Zd Zd Zd ZdS )FifoDiskQueueTestc                 8    t          | j        | j                  S )N)r   )r
   r   r   r   s    r   r2   zFifoDiskQueueTest.queue  s    TZ4>BBBBr   c                    |                                  }|                    d           t          |                                 d          }t          j                            |d|          5  |                                J |                                J 	 d d d            n# 1 swxY w Y   |	                                 d S )Ns	   somethingzw+tailf)
r2   r   openr;   r   patchobjectr#   r    r&   )r   r   
empty_files      r   test_not_szhdrz FifoDiskQueueTest.test_not_szhdr   s    JJLL	|$++--t44
Zq':66 	# 	#6688###5577????	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	s   --B''B+.B+c                    g d}|                                  }|D ]}|                    |           t          j        t          j                            | j        d                    }|                     t          |          d| j	        z  dz              |D ]}|
                                 t          j        t          j                            | j        d                    }|                     t          |          d           dS )z#Test chunks are created and removedr   zq*   r9   N)r2   r   globr   r   joinr   rP   r(   r   r    )r   r   r   rt   chunkss        r   test_chunkszFifoDiskQueueTest.test_chunks)  s    ///JJLL 	 	AFF1IIII27<<
D99::Va4>&9A&=>>> 	 	AEEGGGG27<<
D99::Va(((((r   N)r*   r+   r,   r2   r   r   r%   r   r   r   r     sD        C C C  ) ) ) ) )r   r   c                       e Zd ZdZdS )ChunkSize1FifoDiskQueueTestr9   Nr*   r+   r,   r   r%   r   r   r   r   9          IIIr   r   c                       e Zd ZdZdS )ChunkSize2FifoDiskQueueTestr}   Nr   r%   r   r   r   r   =  r   r   r   c                       e Zd ZdZdS )ChunkSize3FifoDiskQueueTestrO   Nr   r%   r   r   r   r   A  r   r   r   c                       e Zd ZdZdS )ChunkSize4FifoDiskQueueTest   Nr   r%   r   r   r   r   E  r   r   r   c                       e Zd Zd Zd ZdS )LifoDiskQueueTestc                 *    t          | j                  S r   )r   r   r   s    r   r2   zLifoDiskQueueTest.queueJ  s    TZ(((r   c                    |                                  }|                    d           |                    d           |                                 t          j                            | j                  }|                                  }|                                 |                                 t          j                            | j                  s
J |            dS )z2Test size of queue file shrinks when popping itemsrF   rM   N)r2   r   r&   r   r   getsizer   r    )r   r   sizes      r   test_file_size_shrinksz(LifoDiskQueueTest.test_file_size_shrinksM  s    JJLL	t	t				wtz**JJLL					wtz**00D00000r   N)r*   r+   r,   r2   r   r%   r   r   r   r   I  s2        ) ) )
1 
1 
1 
1 
1r   r   c                       e Zd Zd ZdS )FifoSQLiteQueueTestc                 *    t          | j                  S r   )r   r   r   s    r   r2   zFifoSQLiteQueueTest.queue[      tz***r   Nr   r%   r   r   r   r   Z  #        + + + + +r   r   c                       e Zd Zd ZdS )LifoSQLiteQueueTestc                 *    t          | j                  S r   )r   r   r   s    r   r2   zLifoSQLiteQueueTest.queue`  r   r   Nr   r%   r   r   r   r   _  r   r   r   )$r   r   abcr   unittestr   typingr   r   r   queuelib.queuer   r   r	   r
   r   r   r   queuelib.testsr   r   r.   r?   rW   ri   ro   r   r   r   r   r   r   r   r   r   r   r%   r   r   <module>r      s   				                                                , + + + + +       (" " " " "$ " " "J.$ .$ .$ .$ .$ .$ .$ .$b)$ )$ )$ )$ )$ )$ )$ )$X)$ )$ )$ )$ )$ )$ )$ )$X8. 8. 8. 8. 8. 8. 8. 8.v! ! ! ! !-9I ! ! !
! ! ! ! !-9I ! ! !
) ) ) ) )':NL\ ) ) ):    "3       "3       "3       "3   1 1 1 1 1':NL\ 1 1 1"+ + + + +-)<nN^ + + +
+ + + + +-)<nN^ + + + + +r   