B
    2*™\î<  ã               @   s‚  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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 d0d1„ d1e jƒZG d2d3„ d3e jƒZG d4d5„ d5e jƒZG d6d7„ d7eƒZG d8d9„ d9eƒZG d:d;„ d;eƒZ d<d=„ Z!d>d?„ Z"e#d@kr~e"ƒ  dS )Aé    Nc               C   s   dS )NÚfoo© r   r   r   úEC:\ALexclude\prg\programme\Python37\Lib\sqlite3\test\userfunctions.pyÚfunc_returntext   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 )Ng…ë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 )Ns   blobr   r   r   r   r   Úfunc_returnblob&   s    r   c               C   s   dS )Nl        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             C   s   t | ƒtkS )N)ÚtypeÚstr)Úvr   r   r   Úfunc_isstring-   s    r   c             C   s   t | ƒtkS )N)r   Úint)r   r   r   r   Ú
func_isint/   s    r   c             C   s   t | ƒtkS )N)r   Úfloat)r   r   r   r   Úfunc_isfloat1   s    r   c             C   s   t | ƒt d ƒkS )N)r   )r   r   r   r   Úfunc_isnone3   s    r   c             C   s   t | ttfƒS )N)Ú
isinstanceÚbytesÚ
memoryview)r   r   r   r   Úfunc_isblob5   s    r   c             C   s   t | tƒo| dkS )Nl        )r   r   )r   r   r   r   Úfunc_islonglong7   s    r   c              G   s   t | ƒS )N)Úlen)Úargsr   r   r   Úfunc:   s    r    c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú
AggrNoStepc             C   s   d S )Nr   )Úselfr   r   r   Ú__init__>   s    zAggrNoStep.__init__c             C   s   dS )Né   r   )r"   r   r   r   ÚfinalizeA   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 )Nr   )r"   r   r   r   r#   E   s    zAggrNoFinalize.__init__c             C   s   d S )Nr   )r"   Úxr   r   r   ÚstepH   s    zAggrNoFinalize.stepN)r&   r'   r(   r#   r+   r   r   r   r   r)   D   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 )Nr   r   r   )r"   r   r   r   r#   L   s    zAggrExceptionInInit.__init__c             C   s   d S )Nr   )r"   r*   r   r   r   r+   O   s    zAggrExceptionInInit.stepc             C   s   d S )Nr   )r"   r   r   r   r%   R   s    zAggrExceptionInInit.finalizeN)r&   r'   r(   r#   r+   r%   r   r   r   r   r,   K   s   r,   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrExceptionInStepc             C   s   d S )Nr   )r"   r   r   r   r#   V   s    zAggrExceptionInStep.__init__c             C   s   dd  d S )Nr   r   r   )r"   r*   r   r   r   r+   Y   s    zAggrExceptionInStep.stepc             C   s   dS )Nr   r   )r"   r   r   r   r%   \   s    zAggrExceptionInStep.finalizeN)r&   r'   r(   r#   r+   r%   r   r   r   r   r-   U   s   r-   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrExceptionInFinalizec             C   s   d S )Nr   )r"   r   r   r   r#   `   s    z AggrExceptionInFinalize.__init__c             C   s   d S )Nr   )r"   r*   r   r   r   r+   c   s    zAggrExceptionInFinalize.stepc             C   s   dd  d S )Nr   r   r   )r"   r   r   r   r%   f   s    z AggrExceptionInFinalize.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 )ÚAggrCheckTypec             C   s
   d | _ d S )N)Úval)r"   r   r   r   r#   j   s    zAggrCheckType.__init__c             C   s.   t tttd ƒtdœ}t|| t|ƒkƒ| _d S )N)r   r   r   ÚNoneÚblob)r   r   r   r   r   r0   )r"   Ú	whichTyper0   ÚtheTyper   r   r   r+   m   s    zAggrCheckType.stepc             C   s   | j S )N)r0   )r"   r   r   r   r%   r   s    zAggrCheckType.finalizeN)r&   r'   r(   r#   r+   r%   r   r   r   r   r/   i   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   )r0   )r"   r   r   r   r#   v   s    zAggrCheckTypes.__init__c             G   sD   t tttd ƒtdœ}x*|D ]"}|  jt|| t|ƒkƒ7  _qW d S )N)r   r   r   r1   r2   )r   r   r   r   r   r0   )r"   r3   Zvalsr4   r0   r   r   r   r+   y   s    
zAggrCheckTypes.stepc             C   s   | j S )N)r0   )r"   r   r   r   r%      s    zAggrCheckTypes.finalizeN)r&   r'   r(   r#   r+   r%   r   r   r   r   r5   u   s   r5   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚAggrSumc             C   s
   d| _ d S )Ng        )r0   )r"   r   r   r   r#   ƒ   s    zAggrSum.__init__c             C   s   |  j |7  _ d S )N)r0   )r"   r0   r   r   r   r+   †   s    zAggrSum.stepc             C   s   | j S )N)r0   )r"   r   r   r   r%   ‰   s    zAggrSum.finalizeN)r&   r'   r(   r#   r+   r%   r   r   r   r   r6   ‚   s   r6   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'S )(Ú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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 )Nz:memory:Z
returntextr   ZreturnunicodeZ	returnintZreturnfloatZ
returnnullZ
returnblobZreturnlonglongZraiseexceptionÚisstringr$   ZisintZisfloatZisnoneZisblobZ
islonglongZspaméÿÿÿÿ)ÚsqliteÚconnectÚconÚcreate_functionr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r    )r"   r   r   r   ÚsetUp   s     zFunctionTests.setUpc             C   s   | j  ¡  d S )N)r<   Úclose)r"   r   r   r   ÚtearDown¡   s    zFunctionTests.tearDownc          	   C   s0   |   tj¡ | j dddd„ ¡ W d Q R X d S )NÚblaiœÿÿÿc             S   s   d|  S )Né   r   )r*   r   r   r   Ú<lambda>¦   ó    z6FunctionTests.CheckFuncErrorOnCreate.<locals>.<lambda>)ÚassertRaisesr:   ÚOperationalErrorr<   r=   )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 )Nr$   r   r   r   r   r   Úfª   s    z;FunctionTests.CheckFuncRefCount.<locals>.getfunc.<locals>.fr   )rH   r   r   r   Úgetfunc©   s    z0FunctionTests.CheckFuncRefCount.<locals>.getfuncr   Zreftestr   zselect reftest())Úglobalsr<   r=   ÚcursorÚexecute)r"   rI   rH   Úcurr   r   r   ÚCheckFuncRefCount¨   s    

zFunctionTests.CheckFuncRefCountc             C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returntext()r   r   )r<   rK   rL   ÚfetchoneÚassertEqualr   r   )r"   rM   r0   r   r   r   ÚCheckFuncReturnText´   s
    

z!FunctionTests.CheckFuncReturnTextc             C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnunicode()r   r   )r<   rK   rL   rO   rP   r   r   )r"   rM   r0   r   r   r   ÚCheckFuncReturnUnicode»   s
    

z$FunctionTests.CheckFuncReturnUnicodec             C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnint()r   r   )r<   rK   rL   rO   rP   r   r   )r"   rM   r0   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)r<   rK   rL   rO   rP   r   r   Zfail)r"   rM   r0   r   r   r   ÚCheckFuncReturnFloatÉ   s    

z"FunctionTests.CheckFuncReturnFloatc             C   sD   | j  ¡ }| d¡ | ¡ d }|  t|ƒtd ƒ¡ |  |d ¡ d S )Nzselect returnnull()r   )r<   rK   rL   rO   rP   r   )r"   rM   r0   r   r   r   ÚCheckFuncReturnNullÑ   s
    

z!FunctionTests.CheckFuncReturnNullc             C   s@   | j  ¡ }| d¡ | ¡ d }|  t|ƒt¡ |  |d¡ d S )Nzselect returnblob()r   s   blob)r<   rK   rL   rO   rP   r   r   )r"   rM   r0   r   r   r   ÚCheckFuncReturnBlobØ   s
    

z!FunctionTests.CheckFuncReturnBlobc             C   s0   | j  ¡ }| d¡ | ¡ d }|  |d¡ d S )Nzselect returnlonglong()r   l        )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckFuncReturnLongLongß   s    

z%FunctionTests.CheckFuncReturnLongLongc          	   C   sJ   | j  ¡ }|  tj¡}| d¡ | ¡  W d Q R X |  t|j	ƒd¡ d S )Nzselect raiseexception()z&user-defined function raised exception)
r<   rK   rE   r:   rF   rL   rO   rP   r   Ú	exception)r"   rM   Úcmr   r   r   ÚCheckFuncExceptionå   s
    

z FunctionTests.CheckFuncExceptionc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect isstring(?))r   r   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckParamStringì   s    
zFunctionTests.CheckParamStringc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect isint(?))r   r   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckParamIntò   s    
zFunctionTests.CheckParamIntc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect isfloat(?))g…ëQ¸	@r   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckParamFloatø   s    
zFunctionTests.CheckParamFloatc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect isnone(?))Nr   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckParamNoneþ   s    
zFunctionTests.CheckParamNonec             C   s8   | j  ¡ }| dtdƒf¡ | ¡ d }|  |d¡ d S )Nzselect isblob(?)s   blobr   r$   )r<   rK   rL   r   rO   rP   )r"   rM   r0   r   r   r   ÚCheckParamBlob  s    
zFunctionTests.CheckParamBlobc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect islonglong(?))l        r   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckParamLongLong
  s    
z FunctionTests.CheckParamLongLongc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect spam(?, ?))r$   rB   r   rB   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckAnyArguments  s    
zFunctionTests.CheckAnyArgumentsN)r&   r'   r(   r>   r@   rG   rN   rQ   rR   rS   rT   rU   rV   rW   rZ   r[   r\   r]   r^   r_   r`   ra   r   r   r   r   r7   Œ   s&   r7   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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¡ d S )Nz:memory:z´
            create table test(
                t text,
                i integer,
                f float,
                n,
                b blob
                )
            z6insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)r   r   g…ëQ¸	@s   blobZnostepr$   Z
nofinalizeZexcInitZexcStepZexcFinalizeZ	checkTyperB   Z
checkTypesr9   Zmysum)r:   r;   r<   rK   rL   r   Zcreate_aggregater!   r)   r,   r-   r.   r/   r5   r6   )r"   rM   r   r   r   r>     s    
zAggregateTests.setUpc             C   s   d S )Nr   )r"   r   r   r   r@   0  s    zAggregateTests.tearDownc          	   C   s,   |   tj¡ | j ddt¡ W d Q R X d S )NrA   iœÿÿÿ)rE   r:   rF   r<   r=   r6   )r"   r   r   r   ÚCheckAggrErrorOnCreate5  s    z%AggregateTests.CheckAggrErrorOnCreatec          	   C   s@   | j  ¡ }|  t¡}| d¡ W d Q R X |  t|jƒd¡ d S )Nzselect nostep(t) from testz+'AggrNoStep' object has no attribute 'step')r<   rK   rE   ÚAttributeErrorrL   rP   r   rX   )r"   rM   rY   r   r   r   ÚCheckAggrNoStep9  s    
zAggregateTests.CheckAggrNoStepc          	   C   sN   | j  ¡ }|  tj¡}| d¡ | ¡ d }W d Q R X |  t|j	ƒd¡ d S )Nzselect nofinalize(t) from testr   z7user-defined aggregate's 'finalize' method raised error)
r<   rK   rE   r:   rF   rL   rO   rP   r   rX   )r"   rM   rY   r0   r   r   r   ÚCheckAggrNoFinalize?  s
    

z"AggregateTests.CheckAggrNoFinalizec          	   C   sN   | j  ¡ }|  tj¡}| d¡ | ¡ d }W d Q R X |  t|j	ƒd¡ d S )Nzselect excInit(t) from testr   z7user-defined aggregate's '__init__' method raised error)
r<   rK   rE   r:   rF   rL   rO   rP   r   rX   )r"   rM   rY   r0   r   r   r   ÚCheckAggrExceptionInInitF  s
    

z'AggregateTests.CheckAggrExceptionInInitc          	   C   sN   | j  ¡ }|  tj¡}| d¡ | ¡ d }W d Q R X |  t|j	ƒd¡ d S )Nzselect excStep(t) from testr   z3user-defined aggregate's 'step' method raised error)
r<   rK   rE   r:   rF   rL   rO   rP   r   rX   )r"   rM   rY   r0   r   r   r   ÚCheckAggrExceptionInStepM  s
    

z'AggregateTests.CheckAggrExceptionInStepc          	   C   sN   | j  ¡ }|  tj¡}| d¡ | ¡ d }W d Q R X |  t|j	ƒd¡ d S )Nzselect excFinalize(t) from testr   z7user-defined aggregate's 'finalize' method raised error)
r<   rK   rE   r:   rF   rL   rO   rP   r   rX   )r"   rM   rY   r0   r   r   r   ÚCheckAggrExceptionInFinalizeT  s
    

z+AggregateTests.CheckAggrExceptionInFinalizec             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('str', ?))r   r   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckAggrCheckParamStr[  s    
z%AggregateTests.CheckAggrCheckParamStrc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('int', ?))r   r   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckAggrCheckParamInta  s    
z%AggregateTests.CheckAggrCheckParamIntc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkTypes('int', ?, ?))r   é   r   rB   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckAggrCheckParamsIntg  s    
z&AggregateTests.CheckAggrCheckParamsIntc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('float', ?))g…ëQ¸	@r   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckAggrCheckParamFloatm  s    
z'AggregateTests.CheckAggrCheckParamFloatc             C   s2   | j  ¡ }| dd¡ | ¡ d }|  |d¡ d S )Nzselect checkType('None', ?))Nr   r$   )r<   rK   rL   rO   rP   )r"   rM   r0   r   r   r   ÚCheckAggrCheckParamNones  s    
z&AggregateTests.CheckAggrCheckParamNonec             C   s8   | j  ¡ }| dtdƒf¡ | ¡ d }|  |d¡ d S )Nzselect checkType('blob', ?)s   blobr   r$   )r<   rK   rL   r   rO   rP   )r"   rM   r0   r   r   r   ÚCheckAggrCheckParamBloby  s    
z&AggregateTests.CheckAggrCheckParamBlobc             C   sL   | j  ¡ }| d¡ | ddddg¡ | d¡ | ¡ d }|  |d¡ d S )	Nzdelete from testzinsert into test(i) values (?))é
   )é   )é   zselect mysum(i) from testr   é<   )r<   rK   rL   ZexecutemanyrO   rP   )r"   rM   r0   r   r   r   ÚCheckAggrCheckAggrSum  s    


z$AggregateTests.CheckAggrCheckAggrSumN)r&   r'   r(   r>   r@   rc   re   rf   rg   rh   ri   rj   rk   rm   rn   ro   rp   ru   r   r   r   r   rb     s   rb   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)r:   ÚSQLITE_SELECTZSQLITE_DENYÚ	SQLITE_OK)ÚactionÚarg1Úarg2ÚdbnameÚsourcer   r   r   Úauthorizer_cbˆ  s
    
zAuthorizerTests.authorizer_cbc             C   s6   t  d¡| _| j d¡ | j d¡ | j | j¡ d S )Nz:memory: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)r:   r;   r<   ZexecutescriptrL   Zset_authorizerr€   )r"   r   r   r   r>     s
    zAuthorizerTests.setUpc             C   s   d S )Nr   )r"   r   r   r   r@   ž  s    zAuthorizerTests.tearDownc          	   C   s:   |   tj¡}| j d¡ W d Q R X |  dt|jƒ¡ d S )Nzselect * from t2Ú
prohibited)rE   r:   ÚDatabaseErrorr<   rL   ÚassertInr   rX   )r"   rY   r   r   r   Útest_table_access¡  s    z!AuthorizerTests.test_table_accessc          	   C   s:   |   tj¡}| j d¡ W d Q R X |  dt|jƒ¡ d S )Nzselect c2 from t1r   )rE   r:   r‚   r<   rL   rƒ   r   rX   )r"   rY   r   r   r   Útest_column_access¦  s    z"AuthorizerTests.test_column_accessN)	r&   r'   r(   Ústaticmethodr€   r>   r@   r„   r…   r   r   r   r   rv   ‡  s
   rv   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 )Nrw   rx   )r:   ry   Ú
ValueErrorrz   )r{   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 )Ng        rw   rx   )r:   ry   rz   )r{   r|   r}   r~   r   r   r   r   r€   µ  s
    
z(AuthorizerIllegalTypeTests.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 )ÚAuthorizerLargeIntegerTestsc             C   s(   | t jkrdS |dks|dkr"dS t jS )Nl        rw   rx   )r:   ry   rz   )r{   r|   r}   r~   r   r   r   r   r€   ¾  s
    
z)AuthorizerLargeIntegerTests.authorizer_cbN)r&   r'   r(   r†   r€   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)	ÚunittestZ	makeSuiter7   rb   rv   Z	TestSuiter‡   r‰   rŠ   )Zfunction_suiteZaggregate_suiteZauthorizer_suiter   r   r   ÚsuiteÇ  s    
rŒ   c              C   s   t  ¡ } |  tƒ ¡ d S )N)r‹   ZTextTestRunnerÚrunrŒ   )Zrunnerr   r   r   ÚtestÔ  s    rŽ   Ú__main__)$r‹   Zsqlite3r:   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r    r!   r)   r,   r-   r.   r/   r5   r6   ZTestCaser7   rb   rv   r‡   r‰   rŠ   rŒ   rŽ   r&   r   r   r   r   Ú<module>   sF   



 p$		

