add-determinism 0.7.3

RPM buildroot helper to strip nondeterministic bits in files
Documentation
a

Z��^&�c@s�ddlZddlZddlZddlmZmZGdd�dej�ZGdd�dej�Z	Gdd�dej�Z
Gd	d
�d
ej�ZGdd�dej�ZGd
d�dej�Z
Gdd�dej�ZGdd�dej�ZGdd�dej�Zdd�Zdd�Zedkr�e�dS)�N)�TESTFN�unlinkc@steZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�ModuleTestscC�|�tjddtj�dS)Nz2.0zapilevel is %s, should be 2.0)�assertEqual�sqliteZapilevel��self�r	�*/usr/lib64/python3.9/sqlite3/test/dbapi.py�
CheckAPILevel �
�zModuleTests.CheckAPILevelcCr)N�zthreadsafety is %d, should be 1)rrZthreadsafetyrr	r	r
�CheckThreadSafety$rzModuleTests.CheckThreadSafetycCr)NZqmarkz%paramstyle is '%s', should be 'qmark')rrZ
paramstylerr	r	r
�CheckParamStyle(s

��zModuleTests.CheckParamStylecC�|�ttjt�d�dS)Nz&Warning is not a subclass of Exception)�
assertTrue�
issubclassr�Warning�	Exceptionrr	r	r
�CheckWarning-��zModuleTests.CheckWarningcCr)Nz$Error is not a subclass of Exception)rrr�Errorrrr	r	r
�
CheckError1rzModuleTests.CheckErrorcC�|�ttjtj�d�dS)Nz)InterfaceError is not a subclass of Error)rrr�InterfaceErrorrrr	r	r
�CheckInterfaceError5��zModuleTests.CheckInterfaceErrorcCr)Nz(DatabaseError is not a subclass of Error)rrr�
DatabaseErrorrrr	r	r
�CheckDatabaseError9rzModuleTests.CheckDatabaseErrorcCr)Nz,DataError is not a subclass of DatabaseError)rrr�	DataErrorrrr	r	r
�CheckDataError=rzModuleTests.CheckDataErrorcCr)Nz3OperationalError is not a subclass of DatabaseError)rrr�OperationalErrorrrr	r	r
�CheckOperationalErrorArz!ModuleTests.CheckOperationalErrorcCr)Nz1IntegrityError is not a subclass of DatabaseError)rrr�IntegrityErrorrrr	r	r
�CheckIntegrityErrorErzModuleTests.CheckIntegrityErrorcCr)Nz0InternalError is not a subclass of DatabaseError)rrr�
InternalErrorrrr	r	r
�CheckInternalErrorIrzModuleTests.CheckInternalErrorcCr)Nz3ProgrammingError is not a subclass of DatabaseError)rrr�ProgrammingErrorrrr	r	r
�CheckProgrammingErrorMrz!ModuleTests.CheckProgrammingErrorcCr)Nz4NotSupportedError is not a subclass of DatabaseError)rrr�NotSupportedErrorrrr	r	r
�CheckNotSupportedErrorQs

��z"ModuleTests.CheckNotSupportedErrorN)�__name__�
__module__�__qualname__rrrrrrrr r"r$r&r(r*r	r	r	r
rsrc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Ze�ejdkd�dd ��Zd!S)"�ConnectionTestscCs0t�d�|_|j��}|�d�|�dd�dS)N�:memory:z4create table test(id integer primary key, name text)�!insert into test(name) values (?)��foo)r�connect�cx�cursor�execute�r�cur	r	r
�setUpXs

zConnectionTests.setUpcC�|j��dS�N�r4�closerr	r	r
�tearDown^�zConnectionTests.tearDowncCr:r;�r4�commitrr	r	r
�CheckCommitar?zConnectionTests.CheckCommitcC�|j��|j��dSr;r@rr	r	r
�CheckCommitAfterNoChangesd�
z)ConnectionTests.CheckCommitAfterNoChangescCr:r;�r4�rollbackrr	r	r
�
CheckRollbackkr?zConnectionTests.CheckRollbackcCrCr;rFrr	r	r
�CheckRollbackAfterNoChangesnrEz+ConnectionTests.CheckRollbackAfterNoChangescCs|j��}dSr;)r4r5r7r	r	r
�CheckCursorur?zConnectionTests.CheckCursorcCs>d}|�tj��t�|�}Wd�n1s00YdS)Nz/foo/bar/bla/23534/mydb.db)�assertRaisesrr!r3)rZYOU_CANNOT_OPEN_THIS�conr	r	r
�CheckFailedOpenxszConnectionTests.CheckFailedOpencCr:r;r<rr	r	r
�
CheckClose}r?zConnectionTests.CheckClosecCs�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jj	tj	�|�|jj
tj
�|�|jjtj�|�|jjtj�dSr;)
rr4rrrrrrr!r#r%r'r)rr	r	r
�CheckExceptions�szConnectionTests.CheckExceptionscCs�t�d�}|��}|�|jd�|�d�|�|jd�|�dd�|�|jd�|�ddg�|��}|�|jd�|��|�|jd�|�ddg�|��}|�|jd�dS)	Nr/Fz?create table transactiontest(id integer primary key, name text)z,insert into transactiontest(name) values (?)r1Tz-select name from transactiontest where name=?r2)rr3r5r�in_transactionr6�fetchonerA)rr4r8�rowr	r	r
�CheckInTransaction�s

z"ConnectionTests.CheckInTransactioncCs6|�t��d|j_Wd�n1s(0YdS)NT)rKZAttributeErrorr4rPrr	r	r
�CheckInTransactionRO��z$ConnectionTests.CheckInTransactionROcCsX|�tt�Gdd�d�}|�}t�|��}|�d�Wd�n1sJ0YdS)Nc@�eZdZdd�ZdS)z9ConnectionTests.CheckOpenWithPathLikeObject.<locals>.PathcSstSr;)rrr	r	r
�
__fspath__�r?zDConnectionTests.CheckOpenWithPathLikeObject.<locals>.Path.__fspath__N)r+r,r-rWr	r	r	r
�Path��rX�create table test(id integer))�
addCleanuprrrr3r6)rrXZpathr4r	r	r
�CheckOpenWithPathLikeObject�s
z+ConnectionTests.CheckOpenWithPathLikeObjectc	Cs8tjdkrH|�tj��tjddd�Wd�n1s:0YdS|�tt�t�t��}|�d�Wd�n1s~0Ytjdtdd��}|�d�Wd�n1s�0Ytjdtddd��H}|�tj	��|�d	�Wd�n1�s
0YWd�n1�s*0YdS)
N)��r^r/T)ZurirZzfile:zinsert into test(id) values(0)z?mode=rozinsert into test(id) values(1))
r�sqlite_version_inforKr)r3r[rrr6r!)rr4r	r	r
�CheckOpenUri�s
,((zConnectionTests.CheckOpenUri)r]r]r
z&needs sqlite versions older than 3.3.1cCsP|�tj��}tjddd�Wd�n1s00Y|�t|j�d�dS)Nr/F)Zcheck_same_threadz shared connections not available)rKrr)r3r�str�	exception�r�cmr	r	r
� CheckSameThreadErrorOnOldVersion�s,z0ConnectionTests.CheckSameThreadErrorOnOldVersionN)r+r,r-r9r>rBrDrHrIrJrMrNrOrSrTr\r`�unittestZskipIfrr_rer	r	r	r
r.Vs$
�r.c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1d_d`�Z2dadb�Z3dcdd�Z4deS)f�CursorTestscCs6t�d�|_|j��|_|j�d�|j�dd�dS)Nr/z\create table test(id integer primary key, name text, income number, unique_test text unique)r0r1�rr3r4r5r8r6rr	r	r
r9�s�zCursorTests.setUpcC�|j��|j��dSr;�r8r=r4rr	r	r
r>��
zCursorTests.tearDowncC�|j�d�dS)N�delete from test�r8r6rr	r	r
�CheckExecuteNoArgs�r?zCursorTests.CheckExecuteNoArgscC�<|�tj��|j�d�Wd�n1s.0YdS)Nzselect asdf)rKrr!r8r6rr	r	r
�CheckExecuteIllegalSql��z"CursorTests.CheckExecuteIllegalSqlcCrp)Nzselect 5+4; select 4+5)rKrrr8r6rr	r	r
�CheckExecuteTooMuchSql�rrz"CursorTests.CheckExecuteTooMuchSqlcCrl)Nzselect 5+4; -- foo barrnrr	r	r
�CheckExecuteTooMuchSql2�r?z#CursorTests.CheckExecuteTooMuchSql2cCrl)NzT
            select 5+4;

            /*
            foo
            */
            rnrr	r	r
�CheckExecuteTooMuchSql3�r?z#CursorTests.CheckExecuteTooMuchSql3cCs:|�t��|j�d�Wd�n1s,0YdS�N�*)rK�	TypeErrorr8r6rr	r	r
�CheckExecuteWrongSqlArg�rUz#CursorTests.CheckExecuteWrongSqlArgcC�|j�dd�dS)N�insert into test(id) values (?))rwrnrr	r	r
�CheckExecuteArgInt�r?zCursorTests.CheckExecuteArgIntcCrz)N�#insert into test(income) values (?))gq=
ף��@rnrr	r	r
�CheckExecuteArgFloat�r?z CursorTests.CheckExecuteArgFloatcCrz)Nr0)ZHugornrr	r	r
�CheckExecuteArgString�r?z!CursorTests.CheckExecuteArgStringcCs@|j�dd�|j�d|jjf�|j��}|�|dd�dS)Nr0)�Hugoz select name from test where id=?rr�)r8r6�	lastrowidrQr�rrRr	r	r
�!CheckExecuteArgStringWithZeroByte�s
z-CursorTests.CheckExecuteArgStringWithZeroBytecCsN|�t��}|j�dd�Wd�n1s.0Y|�t|j�d�dS)Nr{rwz"parameters are of unsupported type)rK�
ValueErrorr8r6rrarbrcr	r	r
�CheckExecuteNonIterable�s,z#CursorTests.CheckExecuteNonIterablecCs>|�tj��|j�dd�Wd�n1s00YdS)Nr{)�ZEgon�rKrr'r8r6rr	r	r
�CheckExecuteWrongNoOfArgs1�z&CursorTests.CheckExecuteWrongNoOfArgs1cCrp�Nr{r�rr	r	r
�CheckExecuteWrongNoOfArgs2r�z&CursorTests.CheckExecuteWrongNoOfArgs2cCrpr�r�rr	r	r
�CheckExecuteWrongNoOfArgs3r�z&CursorTests.CheckExecuteWrongNoOfArgs3cCs:|j�d�|j�ddg�|j��}|�|dd�dS)N�%insert into test(name) values ('foo')�"select name from test where name=?r2r�r8r6rQrr�r	r	r
�CheckExecuteParamLists
z!CursorTests.CheckExecuteParamListcC�JGdd�dt�}|j�d�|j�d|��|j��}|�|dd�dS)Nc@�eZdZdd�Zdd�ZdS)z0CursorTests.CheckExecuteParamSequence.<locals>.LcS�dS)Nr
r	rr	r	r
�__len__r?z8CursorTests.CheckExecuteParamSequence.<locals>.L.__len__cSr��Nr2r	�r�xr	r	r
�__getitem__�z<CursorTests.CheckExecuteParamSequence.<locals>.L.__getitem__N)r+r,r-r�r�r	r	r	r
�Lsr�r�r�rr2)Zobjectr8r6rQr)rr�rRr	r	r
�CheckExecuteParamSequences

z%CursorTests.CheckExecuteParamSequencecCs<|j�d�|j�dddi�|j��}|�|dd�dS)Nr��&select name from test where name=:name�namer2rr�r�r	r	r
�CheckExecuteDictMapping#s
z#CursorTests.CheckExecuteDictMappingcCr�)Nc@rV)z6CursorTests.CheckExecuteDictMapping_Mapping.<locals>.DcSr�r�r	)rZkeyr	r	r
�__missing__+r?zBCursorTests.CheckExecuteDictMapping_Mapping.<locals>.D.__missing__N)r+r,r-r�r	r	r	r
�D*rYr�r�r�rr2)Zdictr8r6rQr)rr�rRr	r	r
�CheckExecuteDictMapping_Mapping)s

z+CursorTests.CheckExecuteDictMapping_MappingcC�N|j�d�|�tj��"|j�dddi�Wd�n1s@0YdS)Nr�z1select name from test where name=:name and id=:idr�r2�r8r6rKrr'rr	r	r
�$CheckExecuteDictMappingTooLittleArgs3�z0CursorTests.CheckExecuteDictMappingTooLittleArgscCsH|j�d�|�tj��|j�d�Wd�n1s:0YdS)Nr�r�r�rr	r	r
�CheckExecuteDictMappingNoArgs8r�z)CursorTests.CheckExecuteDictMappingNoArgscCr�)Nr�r�r�r2r�rr	r	r
�CheckExecuteDictMappingUnnamed=r�z*CursorTests.CheckExecuteDictMappingUnnamedcCr:r;)r8r=rr	r	r
rNBr?zCursorTests.CheckClosecCsD|j�d�|j�d�|j�d�|j�d�|�|jjd�dS)Nrmr�zupdate test set name='bar'��r8r6r�rowcountrr	r	r
�CheckRowcountExecuteEs
z CursorTests.CheckRowcountExecutecCs |j�d�|�|jjd�dS)Nzselect 5 union select 6i����r�rr	r	r
�CheckRowcountSelectLszCursorTests.CheckRowcountSelectcCs2|j�d�|j�dgd��|�|jjd�dS)Nrmr0))r
)r��r]r])r8r6�executemanyrr�rr	r	r
�CheckRowcountExecutemanyUsz$CursorTests.CheckRowcountExecutemanycCs0|j�d�|j�d�|jd|jjdd�dS)Nr�r�z"total changes reported wrong value)Zmsg)r8r6Z
assertLessr4Z
total_changesrr	r	r
�CheckTotalChangesZ�zCursorTests.CheckTotalChangescCs"|j�ddd�tdd�D��dS)Nr}cSsg|]
}|f�qSr	r	)Z.0r�r	r	r
Z
<listcomp>d�z8CursorTests.CheckExecuteManySequence.<locals>.<listcomp>�din)r8r��rangerr	r	r
�CheckExecuteManySequencecr?z$CursorTests.CheckExecuteManySequencecCs"Gdd�d�}|j�d|��dS)Nc@r�)z4CursorTests.CheckExecuteManyIterator.<locals>.MyItercSs
d|_dS�N�)�valuerr	r	r
�__init__hr?z=CursorTests.CheckExecuteManyIterator.<locals>.MyIter.__init__cSs*|jdkrt�n|jd7_|jfSdS)N�
r
)r�Z
StopIterationrr	r	r
�__next__ks
z=CursorTests.CheckExecuteManyIterator.<locals>.MyIter.__next__N)r+r,r-r�r�r	r	r	r
�MyItergsr�r}�r8r�)rr�r	r	r
�CheckExecuteManyIteratorfsz$CursorTests.CheckExecuteManyIteratorcCsdd�}|j�d|��dS)Ncsstd�D]}|fVqdSr�)r�)Zir	r	r
�mygenurUz4CursorTests.CheckExecuteManyGenerator.<locals>.mygenr}r�)rr�r	r	r
�CheckExecuteManyGeneratortsz%CursorTests.CheckExecuteManyGeneratorcCs>|�t�� |j�ddg�Wd�n1s00YdS)Nrwr��rKrxr8r�rr	r	r
�CheckExecuteManyWrongSqlArg{rUz'CursorTests.CheckExecuteManyWrongSqlArgcCs@|�tj�� |j�ddg�Wd�n1s20YdS)Nzselect ?r�)rKrr'r8r�rr	r	r
�CheckExecuteManySelectrrz"CursorTests.CheckExecuteManySelectcCs<|�t��|j�dd�Wd�n1s.0YdS)Nr}rwr�rr	r	r
�CheckExecuteManyNotIterable�rUz'CursorTests.CheckExecuteManyNotIterablecCsv|j�d�|j�dd�|j�dd�|j�d�g}|jD]}|�|d�q>|�|dd�|�|dd	�dS)
Nrmr{)r�)�zselect id from test order by idrr�r
r�)r8r6�appendr)rZlstrRr	r	r
�CheckFetchIter�s
zCursorTests.CheckFetchItercCs@|j�d�|j��}|�|dd�|j��}|�|d�dS)N�select name from testrr2r�r�r	r	r
�
CheckFetchone��


zCursorTests.CheckFetchonecCs"|j��}|��}|�|d�dSr;)r4r5rQr)r�currRr	r	r
�CheckFetchoneNoStatement�s
z$CursorTests.CheckFetchoneNoStatementcCsr|�|jjd�d|j_|j�d�|j�d�|j�d�|j�d�|j�d�|j��}|�t|�d�dS)Nr
r�rmz#insert into test(name) values ('A')z#insert into test(name) values ('B')z#insert into test(name) values ('C')r�)rr8Z	arraysizer6�	fetchmany�len�r�resr	r	r
�CheckArraySize�s
zCursorTests.CheckArraySizecCsD|j�d�|j�d�}|�t|�d�|j�d�}|�|g�dS)Nr�r�r
�r8r6r�rr�r�r	r	r
�CheckFetchmany�s
zCursorTests.CheckFetchmanycCs.|j�d�|jjdd�}|�t|�d�dS)Nr�r�)Zsizer
r�r�r	r	r
�CheckFetchmanyKwArg�szCursorTests.CheckFetchmanyKwArgcCs@|j�d�|j��}|�t|�d�|j��}|�|g�dS)Nr�r
)r8r6�fetchallrr�r�r	r	r
�
CheckFetchall�r�zCursorTests.CheckFetchallcCs|j�gd��dS)N)r]�r�)r8Z
setinputsizesrr	r	r
�CheckSetinputsizes�r?zCursorTests.CheckSetinputsizescCrz)Nr�r�r8Z
setoutputsizerr	r	r
�CheckSetoutputsize�r?zCursorTests.CheckSetoutputsizecCrlrvr�rr	r	r
�CheckSetoutputsizeNoColumn�r?z&CursorTests.CheckSetoutputsizeNoColumncCs|�|jj|j�dSr;)rr8Z
connectionr4rr	r	r
�CheckCursorConnection�r�z!CursorTests.CheckCursorConnectioncCsB|�t��$dd�}|j�|�}Wd�n1s40YdS)NcS�dSr;r	r	r	r	r
�f�r�z/CursorTests.CheckWrongCursorCallable.<locals>.f)rKrxr4r5)rr�r�r	r	r
�CheckWrongCursorCallable�sz$CursorTests.CheckWrongCursorCallablecCsLGdd�d�}|�}|�t��t�|�}Wd�n1s>0YdS)Nc@seZdZdS)z.CursorTests.CheckCursorWrongClass.<locals>.FooN)r+r,r-r	r	r	r
�Foo�r�r�)rKrxrZCursor)rr�r2r�r	r	r
�CheckCursorWrongClass�sz!CursorTests.CheckCursorWrongClassc	Csbd}dD]T}|j|d��4|j�|�|�d�|�|jjd�Wd�q1sR0YqdS)Nz+{} INTO test(id, unique_test) VALUES (?, ?))zINSERT OR REPLACEZREPLACE��	statement)r
r2r
)�subTestr8r6�formatrr�)r�sqlr�r	r	r
�CheckLastRowIDOnReplace�s
z#CursorTests.CheckLastRowIDOnReplacecCs@|j�dd�|�|jjd�|j�dd�|�|jjd�dS)Nz2insert or ignore into test(unique_test) values (?))�testr�)r8r6rr�rr	r	r
�CheckLastRowIDOnIgnore�s��z"CursorTests.CheckLastRowIDOnIgnorec
Cs�g}dD]�}d}|jd�|�d���|j�|�|�|f�|�||jjf�|�tj��&|j�|�|�|f�Wd�n1s�0Y|�||jjf�Wd�q1s�0Yqgd�}|�	||�dS)N)�FAIL�ABORT�ROLLBACKz.INSERT OR {} INTO test(unique_test) VALUES (?)zINSERT OR {}r�)�r�r�r��r�r]r��r�r�r�)
r�r�r8r6r�r�rKrr#r)rZresultsr�r�Zexpectedr	r	r
�CheckLastRowIDInsertOR�s42z"CursorTests.CheckLastRowIDInsertORN)5r+r,r-r9r>rorqrsrtruryr|r~rr�r�r�r�r�r�r�r�r�r�r�r�rNr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r	r	r
rg�sd		

		

rgc@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�ThreadTestscC�(t�d�|_|j��|_|j�d�dS)Nr/z\create table test(id integer primary key, name text, bin binary, ratio number, ts timestamp))rr3rLr5r�r6rr	r	r
r9r�zThreadTests.setUpcCrir;)r�r=rLrr	r	r
r>rkzThreadTests.tearDowncC�Rdd�}g}tj||j|d�d�}|��|��t|�dkrN|�d�|��dS)NcS�Hz|��}|�d�WdStjy.YdS|�d�Yn0dS�N�did not raise ProgrammingError�raised wrong exception)r5r�rr')rL�errorsr�r	r	r
�run
�
z'ThreadTests.CheckConCursor.<locals>.run�rLr��ZtargetZkwargsr�
��	threading�ThreadrL�start�joinr��fail�rr�r��tr	r	r
�CheckConCursor�
zThreadTests.CheckConCursorcCr�)NcS�Hz|��|�d�WdStjy.YdS|�d�Yn0dSr�)rAr�rr'r�r	r	r
r�r�z'ThreadTests.CheckConCommit.<locals>.runr�r�rr�r�rr	r	r
�CheckConCommitrzThreadTests.CheckConCommitcCr�)NcSrr�)rGr�rr'r�r	r	r
r�1r�z)ThreadTests.CheckConRollback.<locals>.runr�r�rr�r�rr	r	r
�CheckConRollback0rzThreadTests.CheckConRollbackcCr�)NcSrr��r=r�rr'r�r	r	r
r�Cr�z&ThreadTests.CheckConClose.<locals>.runr�r�rr�r�rr	r	r
�
CheckConCloseBrzThreadTests.CheckConClosecCr�)NcS�Jz|�d�|�d�WdStjy0YdS|�d�Yn0dS)N�#insert into test(name) values ('a')r�r��r6r�rr'�r�r�r	r	r
r�U�

z.ThreadTests.CheckCurImplicitBegin.<locals>.runrr�rr��r�rr�rrr�rrr	r	r
�CheckCurImplicitBeginTrz!ThreadTests.CheckCurImplicitBegincCr�)NcSrr�rrr	r	r
r�gr�z&ThreadTests.CheckCurClose.<locals>.runrr�rr�rrr	r	r
�
CheckCurClosefrzThreadTests.CheckCurClosecCs^dd�}g}|j�d�tj||j|d�d�}|��|��t|�dkrZ|�d�|��dS)NcSr
)Nr�r�r�rrr	r	r
r�yrz(ThreadTests.CheckCurExecute.<locals>.runrrr�rr��r�r6r�rrrr�rrr	r	r
�CheckCurExecutexs
zThreadTests.CheckCurExecutecCsjdd�}g}|j�d�|j�d�tj||j|d�d�}|��|��t|�dkrf|�d�|��dS)	NcSr�r�)rQr�rr')r�r�rRr	r	r
r��r�z)ThreadTests.CheckCurIterNext.<locals>.runrr�rr�rr�rrr	r	r
�CheckCurIterNext�s
zThreadTests.CheckCurIterNextN)
r+r,r-r9r>rr	r
rrrrrr	r	r	r
r�sr�c@�DeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ConstructorTestscC�t�ddd�}dS)N��r��)rZDate�rZdr	r	r
�	CheckDate�r?zConstructorTests.CheckDatecCr)N��'�#)rZTime�rrr	r	r
�	CheckTime�r?zConstructorTests.CheckTimecCst�dddddd�}dS)Nrr�rrr r!)rZ	Timestamp�rZtsr	r	r
�CheckTimestamp�r?zConstructorTests.CheckTimestampcC�t�d�}dSrv)rZ
DateFromTicksrr	r	r
�CheckDateFromTicks�r?z#ConstructorTests.CheckDateFromTickscCr&rv)rZ
TimeFromTicksr"r	r	r
�CheckTimeFromTicks�r?z#ConstructorTests.CheckTimeFromTickscCr&rv)rZTimestampFromTicksr$r	r	r
�CheckTimestampFromTicks�r?z(ConstructorTests.CheckTimestampFromTickscCr&)Ns')rZBinary)rZbr	r	r
�CheckBinary�r?zConstructorTests.CheckBinaryN)
r+r,r-rr#r%r'r(r)r*r	r	r	r
r�src@r)�ExtensionTestscCsBt�d�}|��}|�d�|�d�|��d}|�|d�dS)Nr/z�
            -- bla bla
            /* a stupid comment */
            create table a(i);
            insert into a(i) values (5);
            zselect i from arr�)rr3r5�
executescriptr6rQr)rrLr�r�r	r	r
�CheckScriptStringSql�s


z#ExtensionTests.CheckScriptStringSqlcC�Lt�d�}|��}|�tj��|�d�Wd�n1s>0YdS)Nr/z1create table test(x); asdf; create table test2(x)�rr3r5rKr!r,�rrLr�r	r	r
�CheckScriptSyntaxError��
z%ExtensionTests.CheckScriptSyntaxErrorcCr.)Nr/z5create table test(sadfsadfdsa); select foo from hurz;r/r0r	r	r
�CheckScriptErrorNormal�r2z%ExtensionTests.CheckScriptErrorNormalcCs\t�d�}|��}|�t��}|�d�Wd�n1s<0Y|�t|j�d�dS)Nr/s9create table test(foo); insert into test(foo) values (5);z script argument must be unicode.)	rr3r5rKr�r,rrarb)rrLr�rdr	r	r
�CheckCursorExecutescriptAsBytes�s

(z.ExtensionTests.CheckCursorExecutescriptAsBytescCs.t�d�}|�d���d}|�|dd�dS)Nr/zselect 5rr�z Basic test of Connection.execute)rr3r6rQr�rrLZresultr	r	r
�CheckConnectionExecute�s
z%ExtensionTests.CheckConnectionExecutecCsbt�d�}|�d�|�dddg�|�d���}|�|dddd	�|�|d
ddd	�dS)Nr/zcreate table test(foo)z insert into test(foo) values (?)r��r�z!select foo from test order by foorr]z$Basic test of Connection.executemanyr
r�)rr3r6r�r�rr5r	r	r
�CheckConnectionExecutemany�s

z)ExtensionTests.CheckConnectionExecutemanycCs8t�d�}|�d�|�d���d}|�|dd�dS)Nr/z9create table test(foo); insert into test(foo) values (5);zselect foo from testrr�z&Basic test of Connection.executescript)rr3r,r6rQrr5r	r	r
�CheckConnectionExecutescript�s

z+ExtensionTests.CheckConnectionExecutescriptN)
r+r,r-r-r1r3r4r6r8r9r	r	r	r
r+�s
r+c@�TeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�ClosedConTestscCsJt�d�}|��|�tj��|��}Wd�n1s<0YdS�Nr/)rr3r=rKr'r5r0r	r	r
�CheckClosedConCursor�r2z#ClosedConTests.CheckClosedConCursorcC�Jt�d�}|��|�tj��|��Wd�n1s<0YdSr<)rr3r=rKr'rA�rrLr	r	r
�CheckClosedConCommit�r2z#ClosedConTests.CheckClosedConCommitcCr>r<)rr3r=rKr'rGr?r	r	r
�CheckClosedConRollback�r2z%ClosedConTests.CheckClosedConRollbackcCsTt�d�}|��}|��|�tj��|�d�Wd�n1sF0YdS)Nr/zselect 4)rr3r5r=rKr'r6r0r	r	r
�CheckClosedCurExecute��

z$ClosedConTests.CheckClosedCurExecutecCsXt�d�}|��dd�}|�tj��|�dd|�Wd�n1sJ0YdS)Nr/cSr��Nr�r	)r�r	r	r
r�r�z3ClosedConTests.CheckClosedCreateFunction.<locals>.fr2r
)rr3r=rKr'Zcreate_function)rrLr�r	r	r
�CheckClosedCreateFunctionrCz(ClosedConTests.CheckClosedCreateFunctioncCs^t�d�}|��Gdd�d�}|�tj��|�dd|�Wd�n1sP0YdS)Nr/c@s$eZdZdd�Zdd�Zdd�ZdS)z6ClosedConTests.CheckClosedCreateAggregate.<locals>.AggcSr�r;r	rr	r	r
r�r?z?ClosedConTests.CheckClosedCreateAggregate.<locals>.Agg.__init__cSr�r;r	r�r	r	r
�stepr?z;ClosedConTests.CheckClosedCreateAggregate.<locals>.Agg.stepcSr�rDr	rr	r	r
�finalizer?z?ClosedConTests.CheckClosedCreateAggregate.<locals>.Agg.finalizeN)r+r,r-r�rFrGr	r	r	r
�Agg
srHr2r
)rr3r=rKr'Zcreate_aggregate)rrLrHr	r	r
�CheckClosedCreateAggregate
s

z)ClosedConTests.CheckClosedCreateAggregatecCsTt�d�}|��dd�}|�tj��|�|�Wd�n1sF0YdS)Nr/cWstjSr;)rZDENY)Zargsr	r	r
�
authorizerr?z;ClosedConTests.CheckClosedSetAuthorizer.<locals>.authorizer)rr3r=rKr'Zset_authorizer)rrLrJr	r	r
�CheckClosedSetAuthorizers

z'ClosedConTests.CheckClosedSetAuthorizercCsVt�d�}|��dd�}|�tj��|�|d�Wd�n1sH0YdS)Nr/cSr�r;r	r	r	r	r
�progress"r�z?ClosedConTests.CheckClosedSetProgressCallback.<locals>.progressr�)rr3r=rKr'Zset_progress_handler)rrLrLr	r	r
�CheckClosedSetProgressCallbackrCz-ClosedConTests.CheckClosedSetProgressCallbackcCsHt�d�}|��|�tj��|�Wd�n1s:0YdSr<)rr3r=rKr'r?r	r	r
�CheckClosedCall&r2zClosedConTests.CheckClosedCallN)r+r,r-r=r@rArBrErIrKrMrNr	r	r	r
r;�s
r;c@rV)�ClosedCurTestsc	Cs�t�d�}|��}|��dD]j}|dvr0d}n|dkrFdddgf}ng}|�tj��"t||�}||�Wd�q1s~0YqdS)	Nr/)r6r�r,r�r�rQ)r6r,)zselect 4 union select 5r�zinsert into foo(bar) values (?)r�r7)rr3r5r=rKr'Zgetattr)rrLr�Zmethod_nameZparamsZmethodr	r	r
�CheckClosed-s

zClosedCurTests.CheckClosedN)r+r,r-rPr	r	r	r
rO,rYrOc@r:)�SqliteOnConflictTestscCr�)Nr/zz
          CREATE TABLE test(
            id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE
          );
        rhrr	r	r
r9Fr�zSqliteOnConflictTests.setUpcCrir;rjrr	r	r
r>OrkzSqliteOnConflictTests.tearDowncCs�d|j_|j��|_|j�d�|j�d�|j�d�|�tj��|j�d�Wd�n1sf0Y|j��|j�d�|�	|j�
�g�dS)N�BEGIN�,INSERT INTO test(name) VALUES ('abort_test')�8INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')z"SELECT name, unique_name from test�r4Zisolation_levelr5r8r6rKrr#rArr�rr	r	r
�.CheckOnConflictRollbackWithExplicitTransactionSs*
zDSqliteOnConflictTests.CheckOnConflictRollbackWithExplicitTransactioncCs�d|j_|j��|_|j�d�|j�d�|j�d�|�tj��|j�d�Wd�n1sf0Y|j��|j�d�|�	|j�
�ddg�dS)NrRrS�5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')�"SELECT name, unique_name FROM test�Z
abort_testNr�rUrr	r	r
�2CheckOnConflictAbortRaisesWithExplicitTransactionsbs*
zHSqliteOnConflictTests.CheckOnConflictAbortRaisesWithExplicitTransactionscCsr|j�d�|j�d�|�tj��|j�d�Wd�n1sF0Y|j�d�|�|j��g�dS)NrSrTrX�r8r6rKrr#rr�rr	r	r
�)CheckOnConflictRollbackWithoutTransactionrs*z?SqliteOnConflictTests.CheckOnConflictRollbackWithoutTransactioncCsv|j�d�|j�d�|�tj��|j�d�Wd�n1sF0Y|j�d�|�|j��ddg�dS)NrSrWrXrYr�r[rr	r	r
�-CheckOnConflictAbortRaisesWithoutTransactions|s*zCSqliteOnConflictTests.CheckOnConflictAbortRaisesWithoutTransactionscCsZ|j�d�|�tj��|j�d�Wd�n1s:0Y|�|j��g�dS)Nz4INSERT OR FAIL INTO test(unique_name) VALUES ('foo')r[rr	r	r
�CheckOnConflictFail�s*z)SqliteOnConflictTests.CheckOnConflictFailcCs<|j�d�|j�d�|j�d�|�|j��dg�dS)Nz6INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')zSELECT unique_name FROM testr1�r8r6rr�rr	r	r
�CheckOnConflictIgnore��z+SqliteOnConflictTests.CheckOnConflictIgnorecCs<|j�d�|j�d�|j�d�|�|j��dg�dS)NzFINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Data!', 'foo')zUINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Very different data!', 'foo')rX)zVery different data!r2r_rr	r	r
�CheckOnConflictReplace�raz,SqliteOnConflictTests.CheckOnConflictReplaceN)r+r,r-r9r>rVrZr\r]r^r`rbr	r	r	r
rQ?s	
rQc	Cs�t�td�}t�td�}t�td�}t�td�}t�td�}t�td�}t�td�}t�t	d�}t�t
d�}t�|||||||||f	�S)NZCheck)rfZ	makeSuiterr.rgr�rr+r;rOrQZ	TestSuite)	Zmodule_suiteZconnection_suiteZcursor_suiteZthread_suiteZconstructor_suiteZ	ext_suiteZclosed_con_suiteZclosed_cur_suiteZon_conflict_suiter	r	r
�suite�s�rccCst��}|�t��dSr;)rfZTextTestRunnerr�rc)Zrunnerr	r	r
r��sr�Z__main__)r�rfZsqlite3rZtest.supportrrZTestCaserr.rgr�rr+r;rOrQrcr�r+r	r	r	r
Z<module>s&7mA4C]