B
    2*\L*  ć               @   sx   d dl Z d dlZd dlmZm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rte  dS )é    N)ŚTESTFNŚunlinkc               @   s^   e Zd Zdd Zdd Zdd Zdd Ze e	j
d	k d
”dd Zdd Zdd Zdd ZdS )ŚCollationTestsc          	   C   s4   t  d”}|  t” | d dd ” W d Q R X d S )Nz:memory:c             S   s   | |k| |k  S )N© )ŚxŚyr   r   ś=C:\ALexclude\prg\programme\Python37\Lib\sqlite3\test\hooks.pyŚ<lambda>!   ó    z>CollationTests.CheckCreateCollationNotString.<locals>.<lambda>)ŚsqliteŚconnectŚassertRaisesŚ	TypeErrorŚcreate_collation)ŚselfŚconr   r   r   ŚCheckCreateCollationNotString   s    
z,CollationTests.CheckCreateCollationNotStringc          	   C   sB   t  d”}|  t”}| dd” W d Q R X |  t|jd” d S )Nz:memory:ŚXé*   zparameter must be callable)r   r   r   r   r   ŚassertEqualŚstrŚ	exception)r   r   Ścmr   r   r   ŚCheckCreateCollationNotCallable#   s    
z.CollationTests.CheckCreateCollationNotCallablec          	   C   s6   t  d”}|  t j” | ddd ” W d Q R X d S )Nz:memory:u   collĆ¤c             S   s   | |k| |k  S )Nr   )r   r   r   r   r   r	   ,   r
   z=CollationTests.CheckCreateCollationNotAscii.<locals>.<lambda>)r   r   r   ZProgrammingErrorr   )r   r   r   r   r   ŚCheckCreateCollationNotAscii)   s    
z+CollationTests.CheckCreateCollationNotAsciic             C   sl   G dd dt }t d”}dd }| |d|” | d” ” }|  |d d d	” |  |d
 d d” d S )Nc               @   s   e Zd Zdd ZdS )z@CollationTests.CheckCreateCollationBadUpper.<locals>.BadUpperStrc             S   s   d S )Nr   )r   r   r   r   Śupper0   s    zFCollationTests.CheckCreateCollationBadUpper.<locals>.BadUpperStr.upperN)Ś__name__Ś
__module__Ś__qualname__r   r   r   r   r   ŚBadUpperStr/   s   r   z:memory:c             S   s   | |k| |k   S )Nr   )r   r   r   r   r   r	   3   r
   z=CollationTests.CheckCreateCollationBadUpper.<locals>.<lambda>Śmycollz
            select x from (
            select 'a' as x
            union
            select 'b' as x
            ) order by x collate mycoll
            r   Śbé   Śa)r   r   r   r   ŚexecuteŚfetchallr   )r   r   r   r    Śresultr   r   r   ŚCheckCreateCollationBadUpper.   s    

z+CollationTests.CheckCreateCollationBadUpper)é   é   r"   z&old SQLite versions crash on this testc          	   C   s   dd }t  d”}| d|” d}| |” ” }| j|dddgd	d
 | dd ” |  t j”}| |” ” }W d Q R X |  t|j	d” d S )Nc             S   s   | |k| |k   S )Nr   )r   r   r   r   r   r    B   s    z3CollationTests.CheckCollationIsUsed.<locals>.mycollz:memory:r    zÉ
            select x from (
            select 'a' as x
            union
            select 'b' as x
            union
            select 'c' as x
            ) order by x collate mycoll
            )Śc)r!   )r#   z#the expected order was not returned)Śmsgz"no such collation sequence: mycoll)
r   r   r   r$   r%   r   r   ŚOperationalErrorr   r   )r   r    r   Śsqlr&   r   r   r   r   ŚCheckCollationIsUsed?   s    
	z#CollationTests.CheckCollationIsUsedc             C   sJ   dd }t  d”}| d|” d}| |” ” }| j|dddgd	d
 d S )Nc             S   s   | |k| |k   d S )Nl        r   )r   r   r   r   r   r    [   s    z@CollationTests.CheckCollationReturnsLargeInteger.<locals>.mycollz:memory:r    zÉ
            select x from (
            select 'a' as x
            union
            select 'b' as x
            union
            select 'c' as x
            ) order by x collate mycoll
            )r*   )r!   )r#   z#the expected order was not returned)r+   )r   r   r   r$   r%   r   )r   r    r   r-   r&   r   r   r   Ś!CheckCollationReturnsLargeIntegerZ   s    
	z0CollationTests.CheckCollationReturnsLargeIntegerc             C   sd   t  d”}| ddd ” | ddd ” | d” ” }|  |d d d” |  |d	 d d
” d S )Nz:memory:r    c             S   s   | |k| |k  S )Nr   )r   r   r   r   r   r	   s   r
   z<CollationTests.CheckCollationRegisterTwice.<locals>.<lambda>c             S   s   | |k| |k   S )Nr   )r   r   r   r   r   r	   t   r
   zi
            select x from (select 'a' as x union select 'b' as x) order by x collate mycoll
            r   r!   r"   r#   )r   r   r   r$   r%   r   )r   r   r&   r   r   r   ŚCheckCollationRegisterTwicem   s    

z*CollationTests.CheckCollationRegisterTwicec          	   C   s^   t  d”}| ddd ” | dd ” |  t j”}| d” W d Q R X |  t|jd” d S )Nz:memory:r    c             S   s   | |k| |k  S )Nr   )r   r   r   r   r   r	      r
   z9CollationTests.CheckDeregisterCollation.<locals>.<lambda>z?select 'a' as x union select 'b' as x order by x collate mycollz"no such collation sequence: mycoll)	r   r   r   r   r,   r$   r   r   r   )r   r   r   r   r   r   ŚCheckDeregisterCollation{   s    
z'CollationTests.CheckDeregisterCollationN)r   r   r   r   r   r   r'   ŚunittestŚskipIfr   Śsqlite_version_infor.   r/   r0   r1   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 )
ŚProgressTestsc                s>   t  d”}g   fdd}| |d” | d” |   ” d S )Nz:memory:c                  s      d ” dS )Nr   )Śappendr   )Śprogress_callsr   r   Śprogress   s    
z8ProgressTests.CheckProgressHandlerUsed.<locals>.progressr"   z0
            create table foo(a, b)
            )r   r   Śset_progress_handlerr$   Ś
assertTrue)r   r   r8   r   )r7   r   ŚCheckProgressHandlerUsed   s    
z&ProgressTests.CheckProgressHandlerUsedc                sr   t  d”}g   fdd}| |d” | ” }| d” t }g  | |d” | d” t }|  ||” d S )Nz:memory:c                  s      d ” dS )Nr   )r6   r   )r7   r   r   r8      s    
z0ProgressTests.CheckOpcodeCount.<locals>.progressr"   z1
            create table foo (a, b)
            r)   z1
            create table bar (a, b)
            )r   r   r9   Ścursorr$   ŚlenZassertGreaterEqual)r   r   r8   ŚcursZfirst_countZsecond_countr   )r7   r   ŚCheckOpcodeCount   s    
zProgressTests.CheckOpcodeCountc             C   s<   t  d”}dd }| |d” | ” }|  t j|jd” d S )Nz:memory:c               S   s   dS )Nr"   r   r   r   r   r   r8   “   s    z4ProgressTests.CheckCancelOperation.<locals>.progressr"   zcreate table bar (a, b))r   r   r9   r<   r   r,   r$   )r   r   r8   r>   r   r   r   ŚCheckCancelOperationÆ   s    
z"ProgressTests.CheckCancelOperationc                sR   t  d”}d  fdd}| |d” | d d” | d” ”  |   dd” d S )Nz:memory:r   c                  s   d dS )Nr"   r   r   r   )Śactionr   r   r8   Ć   s    z1ProgressTests.CheckClearHandler.<locals>.progressr"   z&select 1 union select 2 union select 3z progress handler was not cleared)r   r   r9   r$   r%   r   )r   r   r8   r   )rA   r   ŚCheckClearHandler½   s    
zProgressTests.CheckClearHandlerN)r   r   r   r;   r?   r@   rB   r   r   r   r   r5      s   r5   c               @   s>   e Zd Zdd Zdd Zdd Ze ej	dk d”d	d
 Z
dS )ŚTraceCallbackTestsc                sT   t  d”}g   fdd}| |” | d” |   ” |  tdd  D ” d S )Nz:memory:c                s      | ” d S )N)r6   )Ś	statement)Śtraced_statementsr   r   ŚtraceÓ   s    z8TraceCallbackTests.CheckTraceCallbackUsed.<locals>.tracezcreate table foo(a, b)c             s   s   | ]}d |kV  qdS )zcreate table fooNr   )Ś.0Śstmtr   r   r   ś	<genexpr>Ų   s    z<TraceCallbackTests.CheckTraceCallbackUsed.<locals>.<genexpr>)r   r   Śset_trace_callbackr$   r:   Śany)r   r   rF   r   )rE   r   ŚCheckTraceCallbackUsedĶ   s    



z)TraceCallbackTests.CheckTraceCallbackUsedc                sH   t  d”}g   fdd}| |” | d ” | d” |   d” d S )Nz:memory:c                s      | ” d S )N)r6   )rD   )rE   r   r   rF   ą   s    z9TraceCallbackTests.CheckClearTraceCallback.<locals>.tracezcreate table foo(a, b)ztrace callback was not cleared)r   r   rJ   r$   ZassertFalse)r   r   rF   r   )rE   r   ŚCheckClearTraceCallbackŚ   s    



z*TraceCallbackTests.CheckClearTraceCallbackc          
      s   dt  d”}g   fdd}| |” | d” | d ” | ”  |  tfdd D d	td
 t	t ”f ” d S )Nu   Ć¶Ć¤Ć¼ĆĆĆĆā¬z:memory:c                s      | ” d S )N)r6   )rD   )rE   r   r   rF   ī   s    z5TraceCallbackTests.CheckUnicodeContent.<locals>.tracezcreate table foo(x)z insert into foo(x) values ("%s")c             3   s   | ]} |kV  qd S )Nr   )rG   rH   )Śunicode_valuer   r   rI   ÷   s    z9TraceCallbackTests.CheckUnicodeContent.<locals>.<genexpr>z-Unicode data %s garbled in trace callback: %sz, )
r   r   rJ   r$   Zcommitr:   rK   ŚasciiŚjoinŚmap)r   r   rF   r   )rE   rN   r   ŚCheckUnicodeContentē   s    


z&TraceCallbackTests.CheckUnicodeContent)r(   r(   é	   z#sqlite3_prepare_v2 is not availablec                s   g   fdd}ddg}|   tt” tjtd d}t t”}| |” | ” }| |d ” | d” | |d ” |   |” d S )	Nc                s      | ” d S )N)r6   )rD   )rE   r   r   rF   ’   s    z;TraceCallbackTests.CheckTraceCallbackContent.<locals>.tracezcreate table foo(x)zinsert into foo(x) values(1))Zisolation_levelr   zcreate table bar(x)r"   )	Z
addCleanupr   r   r   r   rJ   r<   r$   r   )r   rF   ZqueriesZcon1Zcon2Zcurr   )rE   r   ŚCheckTraceCallbackContentū   s    


z,TraceCallbackTests.CheckTraceCallbackContentN)r   r   r   rL   rM   rR   r2   r3   r   r4   rT   r   r   r   r   rC   Ģ   s   rC   c              C   s4   t  td”} t  td”}t  td”}t  | ||f”S )NZCheck)r2   Z	makeSuiter   r5   rC   Z	TestSuite)Zcollation_suiteZprogress_suiteZtrace_suiter   r   r   Śsuite  s    rU   c              C   s   t  ” } |  t ” d S )N)r2   ZTextTestRunnerŚrunrU   )Zrunnerr   r   r   Śtest  s    rW   Ś__main__)r2   Zsqlite3r   Ztest.supportr   r   ZTestCaser   r5   rC   rU   rW   r   r   r   r   r   Ś<module>   s   jEC