o
    °ó®g`/  ã                   @   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   úJ/Users/admin/.pyenv/versions/3.10.0/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   s(   t j| j_| j d¡ ¡ }|D ]}qdS )z$Checks if the row object is iterableúselect 1 as a, 2 as bN)r   rN   r%   r   r>   r?   )r
   r   r   r   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 tuplerX   Ú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 dictionaryrX   rZ   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 correctlyrX   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 rX   N)r   rN   r%   r   r>   r?   r[   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    
rf   r   )Ústrr   rN   r%   r   r:   r;   r   )r
   rf   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   rW   rY   r]   r^   rb   rd   rh   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   Útyperg   ©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 )Nrk   rl   r   ztype of row[0] must be bytesúutf-8z(column must equal original data in UTF-8)Úbytesr%   Útext_factoryr>   r?   rO   rn   Úencodero   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 )Nrr   Úignore)rg   ©Úxr   r   r   r5   ù   s    z.TextFactoryTests.test_custom.<locals>.<lambda>rk   rl   r   rm   Zreichz!column must contain original data)	r%   rt   r>   r?   rO   rn   rg   r_   Úendswithro   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.pyrk   Z
Deutchlandrl   r   z!type of non-ASCII row must be strz"type of ASCII-only row must be str)ZassertWarnsÚDeprecationWarningr   ZOptimizedUnicoder%   rt   ZassertInÚfilenamer>   r?   rO   rn   rg   )r
   Úcmrp   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'   rq   rv   r{   r   r+   r   r   r   r   rj   è   s    rj   c                   @   ri   )Ú%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?   ÚassertIsrn   rg   rO   rD   r   r   r   rv     s   z1TextFactoryTestsWithEmbeddedZeroBytes.test_stringc                 C   ó@   t | j_| j d¡ ¡ }|  t|d ƒt ¡ |  |d d¡ d S ©Nr‚   r   ó   a b)rs   r%   rt   r>   r?   rƒ   rn   rO   rD   r   r   r   Ú
test_bytes  ó   z0TextFactoryTestsWithEmbeddedZeroBytes.test_bytesc                 C   r„   r…   )Ú	bytearrayr%   rt   r>   r?   rƒ   rn   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   rx   r   r   r   r5   (  r9   zCTextFactoryTestsWithEmbeddedZeroBytes.test_custom.<locals>.<lambda>r‚   r   r†   )r%   rt   r>   r?   rƒ   rn   rs   rO   rD   r   r   r   r{   &  s   z1TextFactoryTestsWithEmbeddedZeroBytes.test_customc                 C   r(   r   r)   r&   r   r   r   r+   -  r,   z.TextFactoryTestsWithEmbeddedZeroBytes.tearDownN)	r   r   r   r'   rv   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)Ú.0r\   r   r   r   Ú
<listcomp>:  s    zsuite.<locals>.<listcomp>)r    r/   rB   r=   rj   r€   r‹   Z	TestSuite)Ztestsr   r   r   Úsuite0  s   úÿrŽ   c                  C   s   t  ¡ } |  tƒ ¡ d S r   )r‹   ZTextTestRunnerÚrunrŽ   )Zrunnerr   r   r   Útest=  s   r   Ú__main__)r‹   Zsqlite3r   Úcollections.abcr   r   r   r   r   r   ZTestCaser    r/   r=   rB   rj   r€   rŽ   r   r   r   r   r   r   Ú<module>   s$   
 &"
ÿ