a
    åzez*  ć                   @   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   sH   t  d”}|  t”  | d dd ” W d    n1 s:0    Y  d S )Nś:memory:c                 S   s   | |k| |k  S ©N© ©ŚxŚyr   r   ś(/usr/lib/python3.9/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   sV   t  d”}|  t”}| dd” W d    n1 s60    Y  |  t|jd” d S )Nr   Ś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   sJ   t  d”}|  t j”  | ddd ” W d    n1 s<0    Y  d S )Nr   u   collĆ¤c                 S   s   | |k| |k  S r   r   r   r   r   r   r   ,   r   z=CollationTests.CheckCreateCollationNotAscii.<locals>.<lambda>)r   r   r   ZProgrammingErrorr   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 r   r   )r   r   r   r   Śupper0   s    zFCollationTests.CheckCreateCollationBadUpper.<locals>.BadUpperStr.upperN)Ś__name__Ś
__module__Ś__qualname__r    r   r   r   r   ŚBadUpperStr/   s   r$   r   c                 S   s   | |k| |k   S r   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|g d¢dd | dd ” |  t j”}| |” ” }W d    n1 s0    Y  |  t|j	d	” d S )
Nc                 S   s   | |k| |k   S r   r   r   r   r   r   r%   B   s    z3CollationTests.CheckCollationIsUsed.<locals>.mycollr   r%   śÉ
            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(   ś#the expected order was not returned©Śmsgś"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   sH   dd }t  d”}| d|” d}| |” ” }| j|g d¢dd d S )	Nc                 S   s   | |k| |k   d S )Nl        r   r   r   r   r   r%   [   s    z@CollationTests.CheckCollationReturnsLargeInteger.<locals>.mycollr   r%   r/   r0   r2   r3   ©r   r   r   r)   r*   r   )r   r%   r   r7   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 )Nr   r%   c                 S   s   | |k| |k  S r   r   r   r   r   r   r   s   r   z<CollationTests.CheckCollationRegisterTwice.<locals>.<lambda>c                 S   s   | |k| |k   S r   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(   r9   )r   r   r+   r   r   r   ŚCheckCollationRegisterTwicem   s    
z*CollationTests.CheckCollationRegisterTwicec                 C   sr   t  d”}| ddd ” | dd ” |  t j”}| d” W d    n1 sR0    Y  |  t|jd” d S )Nr   r%   c                 S   s   | |k| |k  S r   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 mycollr5   )	r   r   r   r   r6   r)   r   r   r   r   r   r   r   ŚCheckDeregisterCollation{   s    
(z'CollationTests.CheckDeregisterCollationN)r!   r"   r#   r   r   r   r,   ŚunittestŚskipIfr   Śsqlite_version_infor8   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 )
ŚProgressTestsc                    s>   t  d”}g   fdd}| |d” | d” |   ” d S )Nr   c                      s      d ” dS ©Nr   ©Śappendr   ©Zprogress_callsr   r   Śprogress   s    
z8ProgressTests.CheckProgressHandlerUsed.<locals>.progressr'   z0
            create table foo(a, b)
            )r   r   Śset_progress_handlerr)   Ś
assertTrue©r   r   rE   r   rD   r   ŚCheckProgressHandlerUsed   s    

z&ProgressTests.CheckProgressHandlerUsedc                    sr   t  d”}g   fdd}| |d” | ” }| d” t }g  | |d” | d” t }|  ||” d S )Nr   c                      s      d ” dS rA   rB   r   rD   r   r   rE      s    
z0ProgressTests.CheckOpcodeCount.<locals>.progressr'   z1
            create table foo (a, b)
            r.   z1
            create table bar (a, b)
            )r   r   rF   Ścursorr)   ŚlenZassertGreaterEqual)r   r   rE   ŚcursZfirst_countZsecond_countr   rD   r   ŚCheckOpcodeCount   s    


zProgressTests.CheckOpcodeCountc                 C   s<   t  d”}dd }| |d” | ” }|  t j|jd” d S )Nr   c                   S   s   dS )Nr'   r   r   r   r   r   rE   “   s    z4ProgressTests.CheckCancelOperation.<locals>.progressr'   zcreate table bar (a, b))r   r   rF   rJ   r   r6   r)   )r   r   rE   rL   r   r   r   ŚCheckCancelOperationÆ   s    
żz"ProgressTests.CheckCancelOperationc                    sR   t  d”}d  fdd}| |d” | d d” | d” ”  |   dd” d S )Nr   r   c                      s   d dS )Nr'   r   r   r   ©Śactionr   r   rE   Ć   s    z1ProgressTests.CheckClearHandler.<locals>.progressr'   z&select 1 union select 2 union select 3z progress handler was not cleared)r   r   rF   r)   r*   r   rH   r   rO   r   ŚCheckClearHandler½   s    
zProgressTests.CheckClearHandlerN)r!   r"   r#   rI   rM   rN   rQ   r   r   r   r   r@      s   r@   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 )Nr   c                    s      | ” d S r   rB   ©Z	statement©Śtraced_statementsr   r   ŚtraceÓ   s    z8TraceCallbackTests.CheckTraceCallbackUsed.<locals>.traceścreate table foo(a, b)c                 s   s   | ]}d |v V  qdS )zcreate table fooNr   ©Ś.0Zstmtr   r   r   Ś	<genexpr>Ų   r   z<TraceCallbackTests.CheckTraceCallbackUsed.<locals>.<genexpr>)r   r   Śset_trace_callbackr)   rG   Śany©r   r   rV   r   rT   r   ŚCheckTraceCallbackUsedĶ   s    



z)TraceCallbackTests.CheckTraceCallbackUsedc                    sH   t  d”}g   fdd}| |” | d ” | d” |   d” d S )Nr   c                    s      | ” d S r   rB   rS   rT   r   r   rV   ą   s    z9TraceCallbackTests.CheckClearTraceCallback.<locals>.tracerW   ztrace callback was not cleared)r   r   r[   r)   ZassertFalser]   r   rT   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   Ć¶Ć¤Ć¼ĆĆĆĆā¬r   c                    s      | ” d S r   rB   rS   rT   r   r   rV   ī   s    z5TraceCallbackTests.CheckUnicodeContent.<locals>.traceścreate table foo(x)z insert into foo(x) values ('%s')c                 3   s   | ]} |v V  qd S r   r   rX   )Śunicode_valuer   r   rZ   ÷   r   z9TraceCallbackTests.CheckUnicodeContent.<locals>.<genexpr>z-Unicode data %s garbled in trace callback: %sz, )
r   r   r[   r)   ZcommitrG   r\   ŚasciiŚjoinŚmapr]   r   )rU   ra   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 ” tjd	k r| 	|d
 ” |  
 |” d S )Nc                    s      | ” d S r   rB   rS   rT   r   r   rV   ’   s    z;TraceCallbackTests.CheckTraceCallbackContent.<locals>.tracer`   zinsert into foo(x) values(1))Zisolation_levelr   zcreate table bar(x)r'   )r-   é   é   é’’’’)Z
addCleanupr   r   r   r   r[   rJ   r)   r?   rC   r   )r   rV   ZqueriesZcon1Zcon2Zcurr   rT   r   ŚCheckTraceCallbackContentū   s     ’



z,TraceCallbackTests.CheckTraceCallbackContentN)r!   r"   r#   r^   r_   re   r=   r>   r   r?   rj   r   r   r   r   rR   Ģ   s
   rR   c                  C   s4   t  td”} t  td”}t  td”}t  | ||f”S )NZCheck)r=   Z	makeSuiter   r@   rR   Z	TestSuite)Zcollation_suiteZprogress_suiteZtrace_suiter   r   r   Śsuite  s    rk   c                  C   s   t  ” } |  t ” d S r   )r=   ZTextTestRunnerŚrunrk   )Zrunnerr   r   r   Śtest  s    rm   Ś__main__)r=   Zsqlite3r   Ztest.supportr   r   ZTestCaser   r@   rR   rk   rm   r!   r   r   r   r   Ś<module>   s   jEK