a
    åze*J  ã                   @   sh  d dl Z d dlZ d dl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G dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG d d!„ d!ƒZG d"d#„ d#ƒZG d$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ƒZG d.d/„ d/eƒZG d0d1„ d1eƒZd2d3„ Zd4d5„ Zed6krdeƒ  dS )7é    Nc                   C   s   dS )NÚfoo© r   r   r   ú0/usr/lib/python3.9/sqlite3/test/userfunctions.pyÚfunc_returntext   s    r   c                   C   s   dS )Nú1 2r   r   r   r   r   Úfunc_returntextwithnull   s    r   c                   C   s   dS )NÚbarr   r   r   r   r   Úfunc_returnunicode    s    r	   c                   C   s   dS ©Né*   r   r   r   r   r   Úfunc_returnint"   s    r   c                   C   s   dS )Nç…ëQ¸	@r   r   r   r   r   Úfunc_returnfloat$   s    r   c                   C   s   d S ©Nr   r   r   r   r   Úfunc_returnnull&   s    r   c                   C   s   dS )Nó   blobr   r   r   r   r   Úfunc_returnblob(   s    r   c                   C   s   dS )Nì        r   r   r   r   r   Úfunc_returnlonglong*   s    r   c                   C   s   dd  d S ©Né   r   r   r   r   r   r   Úfunc_raiseexception,   s    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
AggrNoStepc                 C   s   d S r   r   ©Úselfr   r   r   Ú__init__0   s    zAggrNoStep.__init__c                 C   s   dS ©Né   r   r   r   r   r   Úfinalize3   s    zAggrNoStep.finalizeN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   /   s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAggrNoFinalizec                 C   s   d S r   r   r   r   r   r   r   7   s    zAggrNoFinalize.__init__c                 C   s   d S r   r   ©r   Úxr   r   r   Ústep:   s    zAggrNoFinalize.stepN)r   r    r!   r   r%   r   r   r   r   r"   6   s   r"   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrExceptionInInitc                 C   s   dd  d S r   r   r   r   r   r   r   >   s    zAggrExceptionInInit.__init__c                 C   s   d S r   r   r#   r   r   r   r%   A   s    zAggrExceptionInInit.stepc                 C   s   d S r   r   r   r   r   r   r   D   s    zAggrExceptionInInit.finalizeN©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S )ÚAggrExceptionInStepc                 C   s   d S r   r   r   r   r   r   r   H   s    zAggrExceptionInStep.__init__c                 C   s   dd  d S r   r   r#   r   r   r   r%   K   s    zAggrExceptionInStep.stepc                 C   s   dS r
   r   r   r   r   r   r   N   s    zAggrExceptionInStep.finalizeNr'   r   r   r   r   r(   G   s   r(   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrExceptionInFinalizec                 C   s   d S r   r   r   r   r   r   r   R   s    z AggrExceptionInFinalize.__init__c                 C   s   d S r   r   r#   r   r   r   r%   U   s    zAggrExceptionInFinalize.stepc                 C   s   dd  d S r   r   r   r   r   r   r   X   s    z AggrExceptionInFinalize.finalizeNr'   r   r   r   r   r)   Q   s   r)   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrCheckTypec                 C   s
   d | _ d S r   ©Úvalr   r   r   r   r   \   s    zAggrCheckType.__init__c                 C   s.   t tttd ƒtdœ}t|| t|ƒu ƒ| _d S ©N)ÚstrÚintÚfloatÚNoneZblob©r.   r/   r0   ÚtypeÚbytesr,   )r   Ú	whichTyper,   ÚtheTyper   r   r   r%   _   s    ÿzAggrCheckType.stepc                 C   s   | j S r   r+   r   r   r   r   r   d   s    zAggrCheckType.finalizeNr'   r   r   r   r   r*   [   s   r*   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrCheckTypesc                 C   s
   d| _ d S )Nr   r+   r   r   r   r   r   h   s    zAggrCheckTypes.__init__c                 G   s@   t tttd ƒtdœ}|D ]"}|  jt|| t|ƒu ƒ7  _qd S r-   r2   )r   r5   Zvalsr6   r,   r   r   r   r%   k   s
    ÿzAggrCheckTypes.stepc                 C   s   | j S r   r+   r   r   r   r   r   q   s    zAggrCheckTypes.finalizeNr'   r   r   r   r   r7   g   s   r7   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrSumc                 C   s
   d| _ d S )Nç        r+   r   r   r   r   r   u   s    zAggrSum.__init__c                 C   s   |  j |7  _ d S r   r+   )r   r,   r   r   r   r%   x   s    zAggrSum.stepc                 C   s   | j S r   r+   r   r   r   r   r   {   s    zAggrSum.finalizeNr'   r   r   r   r   r8   t   s   r8   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrTextc                 C   s
   d| _ d S )NÚ ©Útxtr   r   r   r   r      s    zAggrText.__init__c                 C   s   | j | | _ d S r   r<   )r   r=   r   r   r   r%      s    zAggrText.stepc                 C   s   | j S r   r<   r   r   r   r   r   ƒ   s    zAggrText.finalizeNr'   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	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#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Ze ejd-k d.¡d/d0„ ƒZe ejd-k d.¡d1d2„ ƒZe ejd-kd3¡d4d5„ ƒZd6d7„ Z d8S )9ÚFunctionTestsc                 C   s  t  d¡| _| j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt¡ | j ddt	¡ | j d	dt
¡ | j d
dt¡ | j dddd„ ¡ | j dddd„ ¡ | j ddt¡ | j dddd„ ¡ | j dddd„ ¡ | j dddd„ ¡ | j d¡ d S )Nú:memory:Z
returntextr   ZreturntextwithnullZreturnunicodeZ	returnintZreturnfloatZ
returnnullZ
returnblobZreturnlonglongZ	returnnanc                   S   s   t dƒS )NÚnan)r0   r   r   r   r   Ú<lambda>“   ó    z%FunctionTests.setUp.<locals>.<lambda>Zreturntoolargeintc                   S   s   dS )Nì             r   r   r   r   r   rA   ”   rB   ZraiseexceptionZisblobr   c                 S   s
   t | tƒS r   )Ú
isinstancer4   ©r$   r   r   r   rA   —   rB   Zisnonec                 S   s   | d u S r   r   rE   r   r   r   rA   ˜   rB   Zspaméÿÿÿÿc                  W   s   t | ƒS r   )ÚlenrE   r   r   r   rA   ™   rB   zcreate table test(t text))ÚsqliteÚconnectÚconÚcreate_functionr   r   r	   r   r   r   r   r   r   Úexecuter   r   r   r   ÚsetUpˆ   s     zFunctionTests.setUpc                 C   s   | j  ¡  d S r   )rJ   Úcloser   r   r   r   ÚtearDownœ   s    zFunctionTests.tearDownc                 C   sD   |   tj¡$ | j dddd„ ¡ W d   ƒ n1 s60    Y  d S )NÚblaéœÿÿÿc                 S   s   d|  S )Né   r   rE   r   r   r   rA   ¡   rB   z6FunctionTests.CheckFuncErrorOnCreate.<locals>.<lambda>)ÚassertRaisesrH   ÚOperationalErrorrJ   rK   r   r   r   r   ÚCheckFuncErrorOnCreateŸ   s    z$FunctionTests.CheckFuncErrorOnCreatec                 C   s@   dd„ }|ƒ }|t ƒ d< | j dd|¡ | j ¡ }| d¡ d S )Nc                  S   s   dd„ } | S )Nc                   S   s   dS r   r   r   r   r   r   Úf¥   s    z;FunctionTests.CheckFuncRefCount.<locals>.getfunc.<locals>.fr   )rV   r   r   r   Úgetfunc¤   s    z0FunctionTests.CheckFuncRefCount.<locals>.getfuncr   Zreftestr   zselect reftest())ÚglobalsrJ   rK   ÚcursorrL   )r   rW   rV   Úcurr   r   r   ÚCheckFuncRefCount£   s    

zFunctionTests.CheckFuncRefCountc                 C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returntext()r   r   ©rJ   rY   rL   ÚfetchoneÚassertEqualr3   r.   ©r   rZ   r,   r   r   r   ÚCheckFuncReturnText¯   s
    

z!FunctionTests.CheckFuncReturnTextc                 C   s<   | j  ¡ }| d¡ ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returntextwithnull()r   r   r\   )r   rZ   Úresr   r   r   ÚCheckFuncReturnTextWithNullChar¶   s    
z-FunctionTests.CheckFuncReturnTextWithNullCharc                 C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnunicode()r   r   r\   r_   r   r   r   ÚCheckFuncReturnUnicode¼   s
    

z$FunctionTests.CheckFuncReturnUnicodec                 C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnint()r   r   )rJ   rY   rL   r]   r^   r3   r/   r_   r   r   r   ÚCheckFuncReturnIntÃ   s
    

z FunctionTests.CheckFuncReturnIntc                 C   sN   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |dk s@|dkrJ|  d¡ d S )Nzselect returnfloat()r   gé&1¬	@gTã¥›Ä 	@zwrong value)rJ   rY   rL   r]   r^   r3   r0   Úfailr_   r   r   r   ÚCheckFuncReturnFloatÊ   s    

z"FunctionTests.CheckFuncReturnFloatc                 C   sD   | j  ¡ }| d¡ | ¡ d }|  t|ƒtd ƒ¡ |  |d ¡ d S )Nzselect returnnull()r   )rJ   rY   rL   r]   r^   r3   r_   r   r   r   ÚCheckFuncReturnNullÒ   s
    

z!FunctionTests.CheckFuncReturnNullc                 C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnblob()r   r   )rJ   rY   rL   r]   r^   r3   r4   r_   r   r   r   ÚCheckFuncReturnBlobÙ   s
    

z!FunctionTests.CheckFuncReturnBlobc                 C   s0   | j  ¡ }| d¡ | ¡ d }|  |d¡ d S )Nzselect returnlonglong()r   r   ©rJ   rY   rL   r]   r^   r_   r   r   r   ÚCheckFuncReturnLongLongà   s    

z%FunctionTests.CheckFuncReturnLongLongc                 C   s*   | j  ¡ }| d¡ |  | ¡ d ¡ d S )Nzselect returnnan()r   )rJ   rY   rL   ZassertIsNoner]   ©r   rZ   r   r   r   ÚCheckFuncReturnNaNæ   s    

z FunctionTests.CheckFuncReturnNaNc                 C   sF   | j  ¡ }|  tj¡ | j  d¡ W d   ƒ n1 s80    Y  d S )Nzselect returntoolargeint())rJ   rY   rS   rH   rT   rL   rk   r   r   r   ÚCheckFuncReturnTooLargeIntë   s    
z(FunctionTests.CheckFuncReturnTooLargeIntc                 C   s^   | j  ¡ }|  tj¡"}| d¡ | ¡  W d   ƒ n1 s>0    Y  |  t|j	ƒd¡ d S )Nzselect raiseexception()z&user-defined function raised exception©
rJ   rY   rS   rH   rT   rL   r]   r^   r.   Ú	exception©r   rZ   Úcmr   r   r   ÚCheckFuncExceptionð   s
    

&z FunctionTests.CheckFuncExceptionc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect spam(?, ?))r   rR   r   rR   ri   r_   r   r   r   ÚCheckAnyArguments÷   s    
zFunctionTests.CheckAnyArgumentsc                 C   s"   | j  d¡}|  | ¡ d ¡ d S )Nzselect isblob(x'')r   )rJ   rL   Ú
assertTruer]   rk   r   r   r   ÚCheckEmptyBlobý   s    zFunctionTests.CheckEmptyBlobc                 C   s*   | j  dtdƒf¡}|  | ¡ d ¡ d S )Nzselect isnone(?)r@   r   )rJ   rL   r0   rt   r]   rk   r   r   r   ÚCheckNaNFloat  s    zFunctionTests.CheckNaNFloatc                 C   s   d}|   t|| jjdd¡ d S )Nz1Python int too large to convert to SQLite INTEGERúselect spam(?))rC   )ÚassertRaisesRegexÚOverflowErrorrJ   rL   )r   Úerrr   r   r   ÚCheckTooLargeInt  s    ÿzFunctionTests.CheckTooLargeIntc              
   C   s*   |   td| jjdtdƒd d d… f¡ d S )Nz could not convert BLOB to bufferrw   r   rR   )rx   Ú
ValueErrorrJ   rL   Ú
memoryviewr   r   r   r   ÚCheckNonContiguousBlob  s    þz$FunctionTests.CheckNonContiguousBlobc                 C   s   |   td| jjdd¡ d S )Nzsurrogates not allowedrw   )u   í ƒí¹­)rx   ÚUnicodeEncodeErrorrJ   rL   r   r   r   r   ÚCheckParamSurrogates  s    þz"FunctionTests.CheckParamSurrogatesc                    s¼   g ‰ ‡ fdd„}| j  dd|¡ dtfdtfdtfdtfd	tftd
ƒtfdtfdtfdtfdtfttdƒƒtftdƒtfd t	d ƒfg}|D ] \}}| j  
d|f¡}| ¡  qŠ|  |ˆ ¡ d S )Nc                    s   ˆ   | t| ƒf¡ d S r   )Úappendr3   )Úarg©Úresultsr   r   Úappend_result  s    z4FunctionTests.CheckFuncParams.<locals>.append_resultZtest_paramsr   r   rF   l   Ó{ÑC	 l           r   ÚinfÚtextr   u   Ë¢qË¡â±áµ—áµ‰r   rR   zselect test_params(?))rJ   rK   r/   r0   r.   r4   Ú	bytearrayÚranger}   r3   rL   r]   r^   )r   r…   Zdatasetr,   Ú_rZ   r   rƒ   r   ÚCheckFuncParams  s*    


ó
zFunctionTests.CheckFuncParams)é   é   rŒ   zRequires SQLite 3.8.3 or higherc                 C   s„   t jjd d}| jjdd|dd tjdk rH| j d¡ |  |j	d¡ n8|  
tj¡ | j d	¡ W d   ƒ n1 sv0    Y  d S )
N©Zreturn_valueZnondeterministicr   F©Údeterministic©rŒ   é   r   z.select nondeterministic() = nondeterministic()rR   z>create index t on test(t) where nondeterministic() is not null)ÚunittestÚmockÚMockrJ   rK   rH   Úsqlite_version_inforL   r^   Ú
call_countrS   rT   ©r   r”   r   r   r   ÚCheckFuncNonDeterministic6  s    
z'FunctionTests.CheckFuncNonDeterministicc                 C   s|   t jjd d}| jjdd|dd tjdk rH| j d¡ |  |j	d¡ n0z| j d	¡ W n tj
yv   |  d
¡ Y n0 d S )NrŽ   r   r   Tr   r‘   z(select deterministic() = deterministic()r   z;create index t on test(t) where deterministic() is not nullz/Unexpected failure while creating partial index)r“   r”   r•   rJ   rK   rH   r–   rL   r^   r—   rT   re   r˜   r   r   r   ÚCheckFuncDeterministicA  s    
z$FunctionTests.CheckFuncDeterministiczSQLite < 3.8.3 neededc                 C   sD   |   tj¡$ | jjddtdd W d   ƒ n1 s60    Y  d S )Nr   r   Tr   )rS   rH   ZNotSupportedErrorrJ   rK   r/   r   r   r   r   Ú"CheckFuncDeterministicNotSupportedN  s    z0FunctionTests.CheckFuncDeterministicNotSupportedc                 C   s@   |   t¡" | j ddtd¡ W d   ƒ n1 s20    Y  d S )Nr   r   T)rS   Ú	TypeErrorrJ   rK   r/   r   r   r   r   Ú!CheckFuncDeterministicKeywordOnlyS  s    z/FunctionTests.CheckFuncDeterministicKeywordOnlyN)!r   r    r!   rM   rO   rU   r[   r`   rb   rc   rd   rf   rg   rh   rj   rl   rm   rr   rs   ru   rv   r{   r~   r€   r‹   r“   ZskipIfrH   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	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 )"ÚAggregateTestsc              	   C   sÎ   t  d¡| _| j ¡ }| d¡ | ddddd tdƒf¡ | j dd	t¡ | j d
d	t¡ | j dd	t	¡ | j dd	t
¡ | j dd	t¡ | j ddt¡ | j ddt¡ | j dd	t¡ | j dd	t¡ d S )Nr?   z´
            create table test(
                t text,
                i integer,
                f float,
                n,
                b blob
                )
            z6insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)r   r   r   r   Znostepr   Z
nofinalizeZexcInitZexcStepZexcFinalizeZ	checkTyperR   Z
checkTypesrF   ZmysumZaggtxt)rH   rI   rJ   rY   rL   r}   Zcreate_aggregater   r"   r&   r(   r)   r*   r7   r8   r:   rk   r   r   r   rM   Y  s    

	ÿzAggregateTests.setUpc                 C   s   d S r   r   r   r   r   r   rO   r  s    zAggregateTests.tearDownc                 C   s@   |   tj¡  | j ddt¡ W d   ƒ n1 s20    Y  d S )NrP   rQ   )rS   rH   rT   rJ   rK   r8   r   r   r   r   ÚCheckAggrErrorOnCreatew  s    z%AggregateTests.CheckAggrErrorOnCreatec                 C   sT   | j  ¡ }|  t¡}| d¡ W d   ƒ n1 s40    Y  |  t|jƒd¡ d S )Nzselect nostep(t) from testz+'AggrNoStep' object has no attribute 'step')rJ   rY   rS   ÚAttributeErrorrL   r^   r.   ro   rp   r   r   r   ÚCheckAggrNoStep{  s    
(zAggregateTests.CheckAggrNoStepc                 C   sb   | j  ¡ }|  tj¡&}| d¡ | ¡ d }W d   ƒ n1 sB0    Y  |  t|j	ƒd¡ d S )Nzselect nofinalize(t) from testr   ú7user-defined aggregate's 'finalize' method raised errorrn   ©r   rZ   rq   r,   r   r   r   ÚCheckAggrNoFinalize  s
    

*z"AggregateTests.CheckAggrNoFinalizec                 C   sb   | j  ¡ }|  tj¡&}| d¡ | ¡ d }W d   ƒ n1 sB0    Y  |  t|j	ƒd¡ d S )Nzselect excInit(t) from testr   z7user-defined aggregate's '__init__' method raised errorrn   r£   r   r   r   ÚCheckAggrExceptionInInitˆ  s
    

*z'AggregateTests.CheckAggrExceptionInInitc                 C   sb   | j  ¡ }|  tj¡&}| d¡ | ¡ d }W d   ƒ n1 sB0    Y  |  t|j	ƒd¡ d S )Nzselect excStep(t) from testr   z3user-defined aggregate's 'step' method raised errorrn   r£   r   r   r   ÚCheckAggrExceptionInStep  s
    

*z'AggregateTests.CheckAggrExceptionInStepc                 C   sb   | j  ¡ }|  tj¡&}| d¡ | ¡ d }W d   ƒ n1 sB0    Y  |  t|j	ƒd¡ d S )Nzselect excFinalize(t) from testr   r¢   rn   r£   r   r   r   ÚCheckAggrExceptionInFinalize–  s
    

*z+AggregateTests.CheckAggrExceptionInFinalizec                 C   s8   | j  ¡ }| ddtƒ f¡ | ¡ d }|  |d¡ d S )Nzselect checkTypes('str', ?, ?)r   r   rR   )rJ   rY   rL   r.   r]   r^   r_   r   r   r   ÚCheckAggrCheckParamStr  s    
z%AggregateTests.CheckAggrCheckParamStrc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('int', ?))r   r   r   ri   r_   r   r   r   ÚCheckAggrCheckParamInt£  s    
z%AggregateTests.CheckAggrCheckParamIntc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkTypes('int', ?, ?))r   é   r   rR   ri   r_   r   r   r   ÚCheckAggrCheckParamsInt©  s    
z&AggregateTests.CheckAggrCheckParamsIntc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('float', ?))r   r   r   ri   r_   r   r   r   ÚCheckAggrCheckParamFloat¯  s    
z'AggregateTests.CheckAggrCheckParamFloatc                 C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('None', ?)r   r   r   ri   r_   r   r   r   ÚCheckAggrCheckParamNoneµ  s    
z&AggregateTests.CheckAggrCheckParamNonec                 C   s8   | j  ¡ }| dtdƒf¡ | ¡ d }|  |d¡ d S )Nzselect checkType('blob', ?)r   r   r   )rJ   rY   rL   r}   r]   r^   r_   r   r   r   ÚCheckAggrCheckParamBlob»  s    
z&AggregateTests.CheckAggrCheckParamBlobc                 C   sJ   | j  ¡ }| d¡ | dg d¢¡ | d¡ | ¡ d }|  |d¡ d S )Nzdelete from testzinsert into test(i) values (?)))é
   )é   )é   zselect mysum(i) from testr   é<   )rJ   rY   rL   Zexecutemanyr]   r^   r_   r   r   r   ÚCheckAggrCheckAggrSumÁ  s    


z$AggregateTests.CheckAggrCheckAggrSumc              	   C   sj   | j  ¡ }dD ]V}| j|d6 | d|f¡ | ¡ d }|  ||¡ W d   ƒ q1 sZ0    Y  qd S )N)r   r   r<   zselect aggtxt(?) from testr   )rJ   rY   ZsubTestrL   r]   r^   )r   rZ   r=   r,   r   r   r   ÚCheckAggrTextÉ  s    
zAggregateTests.CheckAggrTextN)r   r    r!   rM   rO   rŸ   r¡   r¤   r¥   r¦   r§   r¨   r©   r«   r¬   r­   r®   r³   r´   r   r   r   r   rž   X  s    rž   c                   @   s8   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚAuthorizerTestsc                 C   s,   | t jkrt jS |dks |dkr&t jS t jS ©NÚc2Út2)rH   ÚSQLITE_SELECTZSQLITE_DENYÚ	SQLITE_OK©ÚactionZarg1Zarg2ZdbnameÚsourcer   r   r   Úauthorizer_cbÓ  s
    
zAuthorizerTests.authorizer_cbc                 C   s6   t  d¡| _| j d¡ | j d¡ | j | j¡ d S )Nr?   z¿
            create table t1 (c1, c2);
            create table t2 (c1, c2);
            insert into t1 (c1, c2) values (1, 2);
            insert into t2 (c1, c2) values (4, 5);
            zselect c2 from t2)rH   rI   rJ   ZexecutescriptrL   Zset_authorizerr¾   r   r   r   r   rM   Û  s    zAuthorizerTests.setUpc                 C   s   d S r   r   r   r   r   r   rO   é  s    zAuthorizerTests.tearDownc                 C   sN   |   tj¡}| j d¡ W d   ƒ n1 s.0    Y  |  dt|jƒ¡ d S )Nzselect * from t2Ú
prohibited©rS   rH   ZDatabaseErrorrJ   rL   ZassertInr.   ro   ©r   rq   r   r   r   Útest_table_accessì  s    *z!AuthorizerTests.test_table_accessc                 C   sN   |   tj¡}| j d¡ W d   ƒ n1 s.0    Y  |  dt|jƒ¡ d S )Nzselect c2 from t1r¿   rÀ   rÁ   r   r   r   Útest_column_accessñ  s    *z"AuthorizerTests.test_column_accessN)	r   r    r!   Ústaticmethodr¾   rM   rO   rÂ   rÃ   r   r   r   r   rµ   Ò  s   
rµ   c                   @   s   e Zd Zedd„ ƒZdS )ÚAuthorizerRaiseExceptionTestsc                 C   s(   | t jkrt‚|dks|dkr"t‚t jS r¶   )rH   r¹   r|   rº   r»   r   r   r   r¾   ÷  s
    
z+AuthorizerRaiseExceptionTests.authorizer_cbN©r   r    r!   rÄ   r¾   r   r   r   r   rÅ   ö  s   rÅ   c                   @   s   e Zd Zedd„ ƒZdS )ÚAuthorizerIllegalTypeTestsc                 C   s(   | t jkrdS |dks|dkr"dS t jS )Nr9   r·   r¸   ©rH   r¹   rº   r»   r   r   r   r¾      s
    
z(AuthorizerIllegalTypeTests.authorizer_cbNrÆ   r   r   r   r   rÇ   ÿ  s   rÇ   c                   @   s   e Zd Zedd„ ƒZdS )ÚAuthorizerLargeIntegerTestsc                 C   s(   | t jkrdS |dks|dkr"dS t jS )Nl        r·   r¸   rÈ   r»   r   r   r   r¾   	  s
    
z)AuthorizerLargeIntegerTests.authorizer_cbNrÆ   r   r   r   r   rÉ     s   rÉ   c               
   C   sJ   t  td¡} t  td¡}t  t¡}t  | ||t  t¡t  t¡t  t¡f¡S )NZCheck)	r“   Z	makeSuiter>   rž   rµ   Z	TestSuiterÅ   rÇ   rÉ   )Zfunction_suiteZaggregate_suiteZauthorizer_suiter   r   r   Úsuite  s    
úrÊ   c                  C   s   t  ¡ } |  tƒ ¡ d S r   )r“   ZTextTestRunnerÚrunrÊ   )Zrunnerr   r   r   Útest  s    rÌ   Ú__main__) r“   Zunittest.mockZsqlite3rH   r   r   r	   r   r   r   r   r   r   r   r"   r&   r(   r)   r*   r7   r8   r:   ZTestCaser>   rž   rµ   rÅ   rÇ   rÉ   rÊ   rÌ   r   r   r   r   r   Ú<module>   s>   



	 Rz$		

