o
    GXh=0                     @   s   d dl Z d dlZd dlmZ G dd dejZdd ZG dd dejZ	G d	d
 d
e j
ZG dd de j
ZG dd de j
ZG dd de j
ZG dd de j
ZG dd de j
Zdd Zdd Zedkrke  dS dS )    N)Sequencec                   @      e Zd Zdd ZdS )MyConnectionc                 O   s   t jj| g|R i | d S N)sqlite
Connection__init__selfargskwargs r   >/opt/python-3.10.19/usr/lib/python3.10/sqlite3/test/factory.pyr      s   zMyConnection.__init__N__name__
__module____qualname__r   r   r   r   r   r          r   c                 C   s,   i }t | jD ]\}}|| ||d < q|S )Nr   )	enumeratedescription)cursorrowdidxcolr   r   r   dict_factory   s   r   c                   @   r   )MyCursorc                 O   s$   t jj| g|R i | t| _d S r   )r   Cursorr   r   row_factoryr	   r   r   r   r   &   s   
zMyCursor.__init__Nr   r   r   r   r   r   %   r   r   c                   @   $   e Zd Zdd Zdd Zdd ZdS )ConnectionFactoryTestsc                 C   s   t jdtd| _d S )N:memory:factory)r   connectr   conr
   r   r   r   setUp+   s   zConnectionFactoryTests.setUpc                 C      | j   d S r   r%   closer&   r   r   r   tearDown.      zConnectionFactoryTests.tearDownc                 C   s   |  | jt d S r   )assertIsInstancer%   r   r&   r   r   r   test_is_instance1   s   z'ConnectionFactoryTests.test_is_instanceN)r   r   r   r'   r+   r.   r   r   r   r   r    *   s    r    c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CursorFactoryTestsc                 C      t d| _d S Nr!   r   r$   r%   r&   r   r   r   r'   5      zCursorFactoryTests.setUpc                 C   r(   r   r)   r&   r   r   r   r+   8   r,   zCursorFactoryTests.tearDownc                 C   sR   | j  }| |tj | j t}| |t | j jdd d}| |t d S )Nc                 S   s   t | S r   )r   r%   r   r   r   <lambda>@       z5CursorFactoryTests.test_is_instance.<locals>.<lambda>r"   )r%   r   r-   r   r   r   )r
   curr   r   r   r.   ;   s   
z#CursorFactoryTests.test_is_instancec                 C   sB   |  t| jjd  |  t| jjdd  |  t| jjdd  d S )Nc                   S      d S r   r   r   r   r   r   r5   G       z9CursorFactoryTests.test_invalid_factory.<locals>.<lambda>c                 S   r8   r   r   r4   r   r   r   r5   I   r9   )assertRaises	TypeErrorr%   r   r&   r   r   r   test_invalid_factoryC   s   z'CursorFactoryTests.test_invalid_factoryN)r   r   r   r'   r+   r.   r<   r   r   r   r   r/   4   s
    r/   c                   @   r   )RowFactoryTestsBackwardsCompatc                 C   r0   r1   r2   r&   r   r   r   r'   L   r3   z$RowFactoryTestsBackwardsCompat.setUpc                 C   s8   | j jtd}|d | }| |t |  d S )Nr"   zselect 4+5 as foo)r%   r   r   executefetchoner-   dictr*   )r
   r7   r   r   r   r   test_is_produced_by_factoryO   s
   
z:RowFactoryTestsBackwardsCompat.test_is_produced_by_factoryc                 C   r(   r   r)   r&   r   r   r   r+   V   r,   z'RowFactoryTestsBackwardsCompat.tearDownN)r   r   r   r'   rA   r+   r   r   r   r   r=   K   s    r=   c                   @   sl   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dd Zdd Zdd ZdS )RowFactoryTestsc                 C   r0   r1   r2   r&   r   r   r   r'   Z   r3   zRowFactoryTests.setUpc                 C   s,   dd | j _| j d }| |t d S )Nc                 S   s   t |S r   )list)r7   r   r   r   r   r5   ^   r6   z5RowFactoryTests.test_custom_factory.<locals>.<lambda>zselect 1, 2)r%   r   r>   r?   r-   rC   r
   r   r   r   r   test_custom_factory]   s   z#RowFactoryTests.test_custom_factoryc                 C   s  t j| j_| jd }| |t j | |d dd | |d dd | |d dd	 | |d
 dd | |d dd | |d dd | |d dd | |d dd | t	 |d  W d    n1 spw   Y  | t	 |d  W d    n1 sw   Y  | t	 |d  W d    n1 sw   Y  | t	 |d  W d    n1 sw   Y  | t	 |d  W d    n1 sw   Y  | t	 |dd   W d    d S 1 sw   Y  d S )Nzselect 1 as a_1, 2 as bZa_1   z&by name: wrong result for column 'a_1'b   z$by name: wrong result for column 'b'ZA_1z&by name: wrong result for column 'A_1'Bz$by name: wrong result for column 'B'r   z#by index: wrong result for column 0z#by index: wrong result for column 1z$by index: wrong result for column -1z$by index: wrong result for column -2cza_za1i  )
r   Rowr%   r   r>   r?   r-   assertEqualr:   
IndexErrorrD   r   r   r   test_sqlite_row_indexb   s:   





"z%RowFactoryTests.test_sqlite_row_indexc                 C   s   t j| j_| jd }| |d d | t |d  W d    n1 s)w   Y  | t |d  W d    d S 1 sCw   Y  d S )Nu   select 1 as ÿ   ÿrF   u   Ÿ   ß)	r   rN   r%   r   r>   r?   rO   r:   rP   rD   r   r   r   test_sqlite_row_index_unicode   s   


"z-RowFactoryTests.test_sqlite_row_index_unicodec                 C   s   t j| j_| jd }| |dd d | |dd d | |dd d | |dd d | |dd  d | |d d d	 | |d
d d | |d
d  d | |ddd d | |ddd
 d d S )Nzselect 1, 2, 3, 4r   r   rF   )rF      )rH   rU   )rH   rU      )rF   rH   rU   rK   rJ   )rU   )rU   rV   rV   rH   )rF   rU   )rV   rH   r   rN   r%   r   r>   r?   rO   rD   r   r   r   test_sqlite_row_slice   s   
z%RowFactoryTests.test_sqlite_row_slicec                 C   s\   	 t j| j_| jd }dd |D }| |ddg dd |D }| |ddg d S )Nselect 1 as a, 2 as bc                 S      g | ]}|qS r   r   .0r   r   r   r   
<listcomp>       z8RowFactoryTests.test_sqlite_row_iter.<locals>.<listcomp>rF   rH   c                 S   rZ   r   r   r[   r   r   r   r]      r^   rW   )r
   r   itemsr   r   r   test_sqlite_row_iter   s   
z$RowFactoryTests.test_sqlite_row_iterc                 C   s@   	 t j| j_| jd }t|}| ||d |d f d S NrY   arG   )r   rN   r%   r   r>   r?   tuplerO   )r
   r   tr   r   r   test_sqlite_row_as_tuple   s
   
z(RowFactoryTests.test_sqlite_row_as_tuplec                 C   sP   	 t j| j_| jd }t|}| |d |d  | |d |d  d S ra   )r   rN   r%   r   r>   r?   r@   rO   )r
   r   r   r   r   r   test_sqlite_row_as_dict   s   
z'RowFactoryTests.test_sqlite_row_as_dictc                 C   s  	 t j| j_| jd }| jd }| jd }| jd }| jd }| ||k | ||k | ||k | ||k | ||k | |t k | ||k | ||k | ||k | ||k | ||k | |t k | 	t
 ||k W d    n1 sw   Y  | 	t
 ||k  W d    n1 sw   Y  | 	t
 ||k W d    n1 sw   Y  | 	t
 ||k W d    n1 sw   Y  | t|t| d S )NrY   zselect 1 as a, 3 as bzselect 1 as b, 2 as azselect 2 as b, 1 as a)r   rN   r%   r   r>   r?   
assertTrueZassertFalseobjectr:   r;   rO   hash)r
   Zrow_1Zrow_2Zrow_3Zrow_4Zrow_5r   r   r   test_sqlite_row_hash_cmp   s@   




z(RowFactoryTests.test_sqlite_row_hash_cmpc                 C   sP   	 t j| j_| jd }t|}| tt	|tt	| | 
|t d S )NrY   )r   rN   r%   r   r>   r?   rc   rO   rC   reversedr-   r   )r
   r   Zas_tupler   r   r   test_sqlite_row_as_sequence   s   
z+RowFactoryTests.test_sqlite_row_as_sequencec                 C   sD   G dd dt }tj| j_| t| jj| | ttj| d d S )Nc                   @   s   e Zd ZejZdS )z:RowFactoryTests.test_fake_cursor_class.<locals>.FakeCursorN)r   r   r   r   r   	__class__r   r   r   r   
FakeCursor   s    
rn   r   )strr   rN   r%   r   r:   r;   r   )r
   rn   r   r   r   test_fake_cursor_class   s   
z&RowFactoryTests.test_fake_cursor_classc                 C   r(   r   r)   r&   r   r   r   r+      r,   zRowFactoryTests.tearDownN)r   r   r   r'   rE   rQ   rT   rX   r`   re   rf   rj   rl   rp   r+   r   r   r   r   rB   Y   s    	"	
rB   c                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TextFactoryTestsc                 C   r0   r1   r2   r&   r   r   r   r'      r3   zTextFactoryTests.setUpc                 C   s2   d}| j d|f }| t|d td d S )N   Österreichselect ?r   type of row[0] must be unicode)r%   r>   r?   rO   typero   r
   austriar   r   r   r   test_unicode   s   zTextFactoryTests.test_unicodec                 C   sR   t | j_d}| jd|f }| t|d t d | |d |dd d S )Nrs   rt   r   ztype of row[0] must be bytesutf-8z(column must equal original data in UTF-8)bytesr%   text_factoryr>   r?   rO   rv   encoderw   r   r   r   test_string   s
   zTextFactoryTests.test_stringc                 C   sT   dd | j _d}| j d|f }| t|d td | |d dd d S )	Nc                 S   s   t | ddS )Nrz   ignore)ro   xr   r   r   r5      s    z.TextFactoryTests.test_custom.<locals>.<lambda>rs   rt   r   ru   Zreichz!column must contain original data)	r%   r|   r>   r?   rO   rv   ro   rg   endswithrw   r   r   r   test_custom   s
   zTextFactoryTests.test_customc                 C   s   |  t}tj| j_W d    n1 sw   Y  | d|j d}d}| jd|f	 }| jd|f	 }| 
t|d td | 
t|d td d S )Nz
factory.pyrs   Z
Deutchlandrt   r   z!type of non-ASCII row must be strz"type of ASCII-only row must be str)ZassertWarnsDeprecationWarningr   ZOptimizedUnicoder%   r|   ZassertInfilenamer>   r?   rO   rv   ro   )r
   cmrx   ZgermanyZa_rowZd_rowr   r   r   test_optimized_unicode  s   z'TextFactoryTests.test_optimized_unicodec                 C   r(   r   r)   r&   r   r   r   r+     r,   zTextFactoryTests.tearDownN)	r   r   r   r'   ry   r~   r   r   r+   r   r   r   r   rr      s    rr   c                   @   rq   )%TextFactoryTestsWithEmbeddedZeroBytesc                 C   s*   t d| _| jd | jdd d S )Nr!   zcreate table test (value text)z#insert into test (value) values (?))a b)r   r$   r%   r>   r&   r   r   r   r'     s   z+TextFactoryTestsWithEmbeddedZeroBytes.setUpc                 C   s8   | j d }| t|d t | |d d d S )Nselect value from testr   r   )r%   r>   r?   assertIsrv   ro   rO   rD   r   r   r   r~     s   z1TextFactoryTestsWithEmbeddedZeroBytes.test_stringc                 C   @   t | j_| jd }| t|d t  | |d d d S Nr   r      a b)r{   r%   r|   r>   r?   r   rv   rO   rD   r   r   r   
test_bytes      z0TextFactoryTestsWithEmbeddedZeroBytes.test_bytesc                 C   r   r   )	bytearrayr%   r|   r>   r?   r   rv   rO   rD   r   r   r   test_bytearray&  r   z4TextFactoryTestsWithEmbeddedZeroBytes.test_bytearrayc                 C   sD   dd | j _| j d }| t|d t | |d d d S )Nc                 S   s   | S r   r   r   r   r   r   r5   .  r9   zCTextFactoryTestsWithEmbeddedZeroBytes.test_custom.<locals>.<lambda>r   r   r   )r%   r|   r>   r?   r   rv   r{   rO   rD   r   r   r   r   ,  s   z1TextFactoryTestsWithEmbeddedZeroBytes.test_customc                 C   r(   r   r)   r&   r   r   r   r+   3  r,   z.TextFactoryTestsWithEmbeddedZeroBytes.tearDownN)	r   r   r   r'   r~   r   r   r   r+   r   r   r   r   r     s    r   c                  C   s$   t tttttg} tdd | D S )Nc                 S   s   g | ]	}t  |qS r   )unittestZ
TestLoaderZloadTestsFromTestCase)r\   rd   r   r   r   r]   @  s    zsuite.<locals>.<listcomp>)r    r/   rB   r=   rr   r   r   Z	TestSuite)Ztestsr   r   r   suite6  s   r   c                  C   s   t  } | t  d S r   )r   ZTextTestRunnerrunr   )Zrunnerr   r   r   testC  s   r   __main__)r   Zsqlite3r   collections.abcr   r   r   r   r   r   ZTestCaser    r/   r=   rB   rr   r   r   r   r   r   r   r   r   <module>   s$   
 &"
