o
    GXîh=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 s‰w   Y  |  t	¡ |d  W d   ƒ n1 s¢w   Y  |  t	¡ |d  W d   ƒ n1 s»w   Y  |  t	¡ |d  W d   ƒ n1 sÔw   Y  |  t	¡ |dd   W d   ƒ d S 1 sðw   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 1éÿÿÿÿz$by index: wrong result for column -1éþÿÿÿz$by index: wrong result for column -2Úcza_za1éýÿÿÿiè  )
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   sZ   t j| j_| j d¡ ¡ }dd„ |D ƒ}|  |ddg¡ dd„ |D ƒ}|  |ddg¡ dS )z$Checks if the row object is iterableú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^   NrW   )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 )z4Checks if the row object can be converted to a tuplerY   ÚarG   N)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   sN   t j| j_| j d¡ ¡ }t|ƒ}|  |d |d ¡ |  |d |d ¡ dS )zCChecks if the row object can be correctly converted to a dictionaryrY   ra   rG   N)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 s—w   Y  |  	t
¡ ||k  W d  ƒ n1 s°w   Y  |  	t
¡ ||k W d  ƒ n1 sÉw   Y  |  	t
¡ ||k W d  ƒ n1 sâw   Y  |  t|ƒt|ƒ¡ dS )z6Checks if the row object compares and hashes correctlyrY   zselect 1 as a, 3 as bzselect 1 as b, 2 as azselect 2 as b, 1 as aN)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   sN   t j| j_| j d¡ ¡ }t|ƒ}|  tt	|ƒƒtt	|ƒƒ¡ |  
|t¡ dS )z2 Checks if the row object can act like a sequence rY   N)r   rN   r%   r   r>   r?   rb   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    
rm   r   )Ústrr   rN   r%   r   r:   r;   r   )r
   rm   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`   rd   re   ri   rk   ro   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   Útypern   ©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 )Nrr   rs   r   ztype of row[0] must be bytesúutf-8z(column must equal original data in UTF-8)Úbytesr%   Útext_factoryr>   r?   rO   ru   Úencoderv   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 )Nry   Úignore)rn   ©Úxr   r   r   r5   ÿ   s    z.TextFactoryTests.test_custom.<locals>.<lambda>rr   rs   r   rt   Zreichz!column must contain original data)	r%   r{   r>   r?   rO   ru   rn   rf   Úendswithrv   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.pyrr   Z
Deutchlandrs   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   ru   rn   )r
   Úcmrw   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'   rx   r}   r‚   r†   r+   r   r   r   r   rq   î   s    rq   c                   @   rp   )Ú%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?   ÚassertIsru   rn   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)rz   r%   r{   r>   r?   rŠ   ru   rO   rD   r   r   r   Ú
test_bytes   ó   z0TextFactoryTestsWithEmbeddedZeroBytes.test_bytesc                 C   r‹   rŒ   )Ú	bytearrayr%   r{   r>   r?   rŠ   ru   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Š   ru   rz   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\   rc   r   r   r   r]   @  s    zsuite.<locals>.<listcomp>)r    r/   rB   r=   rq   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   rq   r‡   r“   r•   r   r   r   r   r   Ú<module>   s$   
 &"
ÿ