B
    18™\V,  ã               @   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rÒeƒ  dS )é    N)ÚSequencec               @   s   e Zd Zdd„ ZdS )ÚMyConnectionc             O   s   t jj| f|ž|Ž d S )N)ÚsqliteÚ
ConnectionÚ__init__)ÚselfÚargsÚkwargs© r
   úX/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/sqlite3/test/factory.pyr      s    zMyConnection.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r
   r
   r
   r   r      s   r   c             C   s0   i }x&t | jƒD ]\}}|| ||d < qW |S )Nr   )Ú	enumerateÚdescription)ÚcursorÚrowÚdÚidxÚcolr
   r
   r   Údict_factory    s    r   c               @   s   e Zd Zdd„ ZdS )ÚMyCursorc             O   s   t jj| f|ž|Ž t| _d S )N)r   ÚCursorr   r   Úrow_factory)r   r   r	   r
   r
   r   r   '   s    zMyCursor.__init__N)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S )ÚConnectionFactoryTestsc             C   s   t jdtd| _d S )Nz:memory:)Úfactory)r   Úconnectr   Úcon)r   r
   r
   r   ÚsetUp,   s    zConnectionFactoryTests.setUpc             C   s   | j  ¡  d S )N)r   Úclose)r   r
   r
   r   ÚtearDown/   s    zConnectionFactoryTests.tearDownc             C   s   |   | jt¡ d S )N)ÚassertIsInstancer   r   )r   r
   r
   r   ÚCheckIsInstance2   s    z&ConnectionFactoryTests.CheckIsInstanceN)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   s   t  d¡| _d S )Nz:memory:)r   r   r   )r   r
   r
   r   r   6   s    zCursorFactoryTests.setUpc             C   s   | j  ¡  d S )N)r   r   )r   r
   r
   r   r    9   s    zCursorFactoryTests.tearDownc             C   sR   | j  ¡ }|  |tj¡ | j  t¡}|  |t¡ | j jdd„ d}|  |t¡ d S )Nc             S   s   t | ƒS )N)r   )r   r
   r
   r   Ú<lambda>A   ó    z4CursorFactoryTests.CheckIsInstance.<locals>.<lambda>)r   )r   r   r!   r   r   r   )r   Úcurr
   r
   r   r"   <   s    
z"CursorFactoryTests.CheckIsInstancec             C   sB   |   t| jjd ¡ |   t| jjdd„ ¡ |   t| jjdd„ ¡ d S )Nc               S   s   d S )Nr
   r
   r
   r
   r   r$   H   r%   z8CursorFactoryTests.CheckInvalidFactory.<locals>.<lambda>c             S   s   d S )Nr
   )r   r
   r
   r   r$   J   r%   )ÚassertRaisesÚ	TypeErrorr   r   )r   r
   r
   r   ÚCheckInvalidFactoryD   s    z&CursorFactoryTests.CheckInvalidFactoryN)r   r   r   r   r    r"   r)   r
   r
   r
   r   r#   5   s   r#   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚRowFactoryTestsBackwardsCompatc             C   s   t  d¡| _d S )Nz:memory:)r   r   r   )r   r
   r
   r   r   M   s    z$RowFactoryTestsBackwardsCompat.setUpc             C   s8   | j jtd}| d¡ | ¡ }|  |t¡ | ¡  d S )N)r   zselect 4+5 as foo)r   r   r   ÚexecuteÚfetchoner!   Údictr   )r   r&   r   r
   r
   r   ÚCheckIsProducedByFactoryP   s
    
z7RowFactoryTestsBackwardsCompat.CheckIsProducedByFactoryc             C   s   | j  ¡  d S )N)r   r   )r   r
   r
   r   r    W   s    z'RowFactoryTestsBackwardsCompat.tearDownN)r   r   r   r   r.   r    r
   r
   r
   r   r*   L   s   r*   c               @   sd   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S )ÚRowFactoryTestsc             C   s   t  d¡| _d S )Nz:memory:)r   r   r   )r   r
   r
   r   r   [   s    zRowFactoryTests.setUpc             C   s,   dd„ | j _| j  d¡ ¡ }|  |t¡ d S )Nc             S   s   t |ƒS )N)Úlist)r&   r   r
   r
   r   r$   _   r%   z4RowFactoryTests.CheckCustomFactory.<locals>.<lambda>zselect 1, 2)r   r   r+   r,   r!   r0   )r   r   r
   r
   r   ÚCheckCustomFactory^   s    z"RowFactoryTests.CheckCustomFactoryc          	   C   sL  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 Q R X |  t	¡ |d  W d Q R X |  t	¡ |d  W d Q R X |  t	¡ |dd   W d Q R X d S )Nzselect 1 as a, 2 as bÚaÚbé   z$by name: wrong result for column 'a'é   ÚAÚBz$by name: wrong result for column 'A'z$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Úcéýÿÿÿiè  )
r   ÚRowr   r   r+   r,   r!   ÚassertEqualr'   Ú
IndexError)r   r   Zcol1Zcol2r
   r
   r   ÚCheckSqliteRowIndexc   s*    
z#RowFactoryTests.CheckSqliteRowIndexc             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
   r4   )r4   é   )r5   r@   )r5   r@   é   )r4   r5   r@   r9   r8   )r@   )r@   rA   rA   r5   )r4   r@   )rA   r5   )r   r<   r   r   r+   r,   r=   )r   r   r
   r
   r   ÚCheckSqliteRowSlice~   s    
z#RowFactoryTests.CheckSqliteRowSlicec             C   s,   t j| j_| j d¡ ¡ }x|D ]}q W dS )z$Checks if the row object is iterablezselect 1 as a, 2 as bN)r   r<   r   r   r+   r,   )r   r   r   r
   r
   r   ÚCheckSqliteRowIter   s    

z"RowFactoryTests.CheckSqliteRowIterc             C   s>   t j| j_| j d¡ ¡ }t|ƒ}|  ||d |d f¡ dS )z4Checks if the row object can be converted to a tuplezselect 1 as a, 2 as br2   r3   N)r   r<   r   r   r+   r,   Útupler=   )r   r   Útr
   r
   r   ÚCheckSqliteRowAsTuple—   s    
z%RowFactoryTests.CheckSqliteRowAsTuplec             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 dictionaryzselect 1 as a, 2 as br2   r3   N)r   r<   r   r   r+   r,   r-   r=   )r   r   r   r
   r
   r   ÚCheckSqliteRowAsDictž   s
    
z$RowFactoryTests.CheckSqliteRowAsDictc             C   sÎ   t j| j_| j d¡ ¡ }| j d¡ ¡ }| j d¡ ¡ }|  ||¡ |  ||¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||¡ |  t	|ƒt	|ƒ¡ |  
||¡ |  
t	|ƒt	|ƒ¡ dS )z6Checks if the row object compares and hashes correctlyzselect 1 as a, 2 as bzselect 1 as a, 3 as bN)r   r<   r   r   r+   r,   r=   Ú
assertTrueÚassertFalseÚhashÚassertNotEqual)r   Zrow_1Zrow_2Zrow_3r
   r
   r   ÚCheckSqliteRowHashCmp¦   s    
z%RowFactoryTests.CheckSqliteRowHashCmpc             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 zselect 1 as a, 2 as bN)r   r<   r   r   r+   r,   rD   r=   r0   Úreversedr!   r   )r   r   Zas_tupler
   r
   r   ÚCheckSqliteRowAsSequenceº   s
    
z(RowFactoryTests.CheckSqliteRowAsSequencec             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 )z8RowFactoryTests.CheckFakeCursorClass.<locals>.FakeCursorN)r   r   r   r   r   Ú	__class__r
   r
   r
   r   Ú
FakeCursorÇ   s   rP   r
   )Ústrr   r<   r   r   r'   r(   r   )r   rP   r
   r
   r   ÚCheckFakeCursorClassÃ   s    
z$RowFactoryTests.CheckFakeCursorClassc             C   s   | j  ¡  d S )N)r   r   )r   r
   r
   r   r    Í   s    zRowFactoryTests.tearDownN)r   r   r   r   r1   r?   rB   rC   rF   rG   rL   rN   rR   r    r
   r
   r
   r   r/   Z   s   	
r/   c               @   s<   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   s   t  d¡| _d S )Nz:memory:)r   r   r   )r   r
   r
   r   r   Ñ   s    zTextFactoryTests.setUpc             C   s2   d}| j  d|f¡ ¡ }|  t|d ƒtd¡ d S )Nu   Ã–sterreichzselect ?r   ztype of row[0] must be unicode)r   r+   r,   r=   ÚtyperQ   )r   Úaustriar   r
   r
   r   ÚCheckUnicodeÔ   s    zTextFactoryTests.CheckUnicodec             C   sR   t | j_d}| j d|f¡ ¡ }|  t|d ƒt d¡ |  |d | d¡d¡ d S )Nu   Ã–sterreichzselect ?r   ztype of row[0] must be byteszutf-8z(column must equal original data in UTF-8)Úbytesr   Útext_factoryr+   r,   r=   rT   Úencode)r   rU   r   r
   r
   r   ÚCheckStringÙ   s
    zTextFactoryTests.CheckStringc             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 )Nzutf-8Úignore)rQ   )Úxr
   r
   r   r$   á   r%   z.TextFactoryTests.CheckCustom.<locals>.<lambda>u   Ã–sterreichzselect ?r   ztype of row[0] must be unicodeZreichz!column must contain original data)	r   rX   r+   r,   r=   rT   rQ   rH   Úendswith)r   rU   r   r
   r
   r   ÚCheckCustomà   s
    zTextFactoryTests.CheckCustomc             C   sj   t j| j_d}d}| j d|f¡ ¡ }| j d|f¡ ¡ }|  t|d ƒtd¡ |  t|d ƒtd¡ d S )Nu   Ã–sterreichZ
Deutchlandzselect ?r   z!type of non-ASCII row must be strz"type of ASCII-only row must be str)	r   ÚOptimizedUnicoder   rX   r+   r,   r=   rT   rQ   )r   rU   ZgermanyZa_rowZd_rowr
   r
   r   ÚCheckOptimizedUnicodeç   s    
z&TextFactoryTests.CheckOptimizedUnicodec             C   s   | j  ¡  d S )N)r   r   )r   r
   r
   r   r    ò   s    zTextFactoryTests.tearDownN)	r   r   r   r   rV   rZ   r^   r`   r    r
   r
   r
   r   rS   Ð   s   rS   c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú%TextFactoryTestsWithEmbeddedZeroBytesc             C   s*   t  d¡| _| j d¡ | j dd¡ d S )Nz:memory:zcreate table test (value text)z#insert into test (value) values (?))z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 )Nzselect value from testr   za b)r   r+   r,   ÚassertIsrT   rQ   r=   )r   r   r
   r
   r   rZ   û   s    z1TextFactoryTestsWithEmbeddedZeroBytes.CheckStringc             C   s@   t | j_| j d¡ ¡ }|  t|d ƒt ¡ |  |d d¡ d S )Nzselect value from testr   s   a b)rW   r   rX   r+   r,   rb   rT   r=   )r   r   r
   r
   r   Ú
CheckBytes  s    z0TextFactoryTestsWithEmbeddedZeroBytes.CheckBytesc             C   s@   t | j_| j d¡ ¡ }|  t|d ƒt ¡ |  |d d¡ d S )Nzselect value from testr   s   a b)Ú	bytearrayr   rX   r+   r,   rb   rT   r=   )r   r   r
   r
   r   ÚCheckBytearray  s    z4TextFactoryTestsWithEmbeddedZeroBytes.CheckBytearrayc             C   sD   dd„ | j _| j  d¡ ¡ }|  t|d ƒt¡ |  |d d¡ d S )Nc             S   s   | S )Nr
   )r\   r
   r
   r   r$     r%   zCTextFactoryTestsWithEmbeddedZeroBytes.CheckCustom.<locals>.<lambda>zselect value from testr   s   a b)r   rX   r+   r,   rb   rT   rW   r=   )r   r   r
   r
   r   r^     s    z1TextFactoryTestsWithEmbeddedZeroBytes.CheckCustomc             C   s   | j  ¡  d S )N)r   r   )r   r
   r
   r   r      s    z.TextFactoryTestsWithEmbeddedZeroBytes.tearDownN)	r   r   r   r   rZ   rc   re   r^   r    r
   r
   r
   r   ra   õ   s   ra   c              C   s^   t  td¡} t  td¡}t  td¡}t  td¡}t  td¡}t  td¡}t  | |||||f¡S )NÚCheck)	ÚunittestÚ	makeSuiter   r#   r*   r/   rS   ra   Ú	TestSuite)Úconnection_suiteÚcursor_suiteZrow_suite_compatZ	row_suiteZ
text_suiteZtext_zero_bytes_suiter
   r
   r   Úsuite  s    rl   c              C   s   t  ¡ } |  tƒ ¡ d S )N)rg   ÚTextTestRunnerÚrunrl   )Úrunnerr
   r
   r   Útest   s    rp   Ú__main__)rg   Úsqlite3r   Úcollections.abcr   r   r   r   r   r   ÚTestCaser   r#   r*   r/   rS   ra   rl   rp   r   r
   r
   r
   r   Ú<module>   s   
v%"	