o
    g`'                     @   s|   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r<e  dS dS )    N)TESTFNunlinkc                   @   sL   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S )CollationTestsc                 C   sJ   t d}| t |d dd  W d    d S 1 sw   Y  d S )N:memory:c                 S      | |k| |k  S N xyr   r   H/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/sqlite3/test/hooks.py<lambda>!       zACollationTests.test_create_collation_not_string.<locals>.<lambda>)sqliteconnectassertRaises	TypeErrorcreate_collationselfconr   r   r    test_create_collation_not_string   s   
"z/CollationTests.test_create_collation_not_stringc                 C   sV   t d}| t}|dd W d    n1 sw   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   "test_create_collation_not_callable#   s
   
z1CollationTests.test_create_collation_not_callablec                 C   sL   t d}| t j |ddd  W d    d S 1 sw   Y  d S )Nr   u   colläc                 S   r   r   r   r	   r   r   r   r   ,   r   z@CollationTests.test_create_collation_not_ascii.<locals>.<lambda>)r   r   r   ZProgrammingErrorr   r   r   r   r   test_create_collation_not_ascii)   s   
"z.CollationTests.test_create_collation_not_asciic                 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 )zCCollationTests.test_create_collation_bad_upper.<locals>.BadUpperStrc                 S   s   d S r   r   )r   r   r   r   upper0      zICollationTests.test_create_collation_bad_upper.<locals>.BadUpperStr.upperN)__name__
__module____qualname__r!   r   r   r   r   BadUpperStr/   s    r&   r   c                 S      | |k| |k   S r   r   r	   r   r   r   r   3       z@CollationTests.test_create_collation_bad_upper.<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   test_create_collation_bad_upper.   s   
z.CollationTests.test_create_collation_bad_upperc                 C   s   dd }t d}|d| d}|| }| j|g ddd |dd  | t j}|| }W d    n1 s@w   Y  | t|j	d	 d S )
Nc                 S   r'   r   r   r	   r   r   r   r)   @   s   z5CollationTests.test_collation_is_used.<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   test_collation_is_used?   s   
	z%CollationTests.test_collation_is_usedc                 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)   Y   s   zCCollationTests.test_collation_returns_large_integer.<locals>.mycollr   r)   r1   r2   r4   r5   r   r   r   r-   r.   r   )r   r)   r   r9   r/   r   r   r   $test_collation_returns_large_integerX   s   
	
z3CollationTests.test_collation_returns_large_integerc                 C   sd   t d}|ddd  |ddd  |d }| |d d d | |d	 d d
 dS )z
        Register two different collation functions under the same name.
        Verify that the last one is actually used.
        r   r)   c                 S   r   r   r   r	   r   r   r   r   q   r   z>CollationTests.test_collation_register_twice.<locals>.<lambda>c                 S   r'   r   r   r	   r   r   r   r   r   r(   zi
            select x from (select 'a' as x union select 'b' as x) order by x collate mycoll
            r   r*   r+   r,   Nr;   )r   r   r/   r   r   r   test_collation_register_twicek   s   
z,CollationTests.test_collation_register_twicec                 C   sr   t d}|ddd  |dd | t j}|d W d   n1 s)w   Y  | t|jd dS )zu
        Register a collation, then deregister it. Make sure an error is raised if we try
        to use it.
        r   r)   c                 S   r   r   r   r	   r   r   r   r      r   z:CollationTests.test_deregister_collation.<locals>.<lambda>Nz?select 'a' as x union select 'b' as x order by x collate mycollr7   )	r   r   r   r   r8   r-   r   r   r   r   r   r   r   test_deregister_collationy   s   
z(CollationTests.test_deregister_collationN)r#   r$   r%   r   r   r    r0   r:   r<   r=   r>   r   r   r   r   r      s    r   c                   @   ,   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 )zK
        Test that the progress handler is invoked once it is set.
        r   c                           d  dS Nr   appendr   Zprogress_callsr   r   progress      
z:ProgressTests.test_progress_handler_used.<locals>.progressr+   z0
            create table foo(a, b)
            N)r   r   set_progress_handlerr-   
assertTruer   r   rF   r   rE   r   test_progress_handler_used   s   

z(ProgressTests.test_progress_handler_usedc                    sr   t d}g   fdd}||d | }|d t }g  ||d |d t }| || dS )	z=
        Test that the opcode argument is respected.
        r   c                      rA   rB   rC   r   rE   r   r   rF      rG   z1ProgressTests.test_opcode_count.<locals>.progressr+   z1
            create table foo (a, b)
               z1
            create table bar (a, b)
            N)r   r   rH   cursorr-   lenZassertGreaterEqual)r   r   rF   cursZfirst_countZsecond_countr   rE   r   test_opcode_count   s   


zProgressTests.test_opcode_countc                 C   s<   t d}dd }||d | }| t j|jd dS )zW
        Test that returning a non-zero value stops the operation in progress.
        r   c                   S   s   dS )Nr+   r   r   r   r   r   rF      r"   z5ProgressTests.test_cancel_operation.<locals>.progressr+   zcreate table bar (a, b)N)r   r   rH   rM   r   r8   r-   )r   r   rF   rO   r   r   r   test_cancel_operation   s   
z#ProgressTests.test_cancel_operationc                    sR   t d}d  fdd}||d |dd |d  |  dd dS )	zc
        Test that setting the progress handler to None clears the previously set handler.
        r   r   c                      s   d dS )Nr+   r   r   r   actionr   r   rF      s   z2ProgressTests.test_clear_handler.<locals>.progressr+   Nz&select 1 union select 2 union select 3z progress handler was not cleared)r   r   rH   r-   r.   r   rJ   r   rR   r   test_clear_handler   s   
z ProgressTests.test_clear_handlerN)r#   r$   r%   rK   rP   rQ   rT   r   r   r   r   r@      s
    r@   c                   @   r?   )
TraceCallbackTestsc                    sT   t d}g   fdd}|| |d |   | tdd  D  dS )zI
        Test that the trace callback is invoked once it is set.
        r   c                         |  d S r   rC   Z	statementtraced_statementsr   r   trace      z:TraceCallbackTests.test_trace_callback_used.<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>       z>TraceCallbackTests.test_trace_callback_used.<locals>.<genexpr>N)r   r   set_trace_callbackr-   rI   anyr   r   rZ   r   rX   r   test_trace_callback_used   s   



z+TraceCallbackTests.test_trace_callback_usedc                    sH   t d}g   fdd}|| |d |d |  d dS )zb
        Test that setting the trace callback to None clears the previously set callback.
        r   c                    rV   r   rC   rW   rX   r   r   rZ      r[   z;TraceCallbackTests.test_clear_trace_callback.<locals>.traceNr\   ztrace callback was not cleared)r   r   ra   r-   ZassertFalserc   r   rX   r   test_clear_trace_callback   s   



z,TraceCallbackTests.test_clear_trace_callbackc              
      s   dt d}g   fdd}|| |d |d  |  | tfdd D d	td
t	t f  dS )zG
        Test that the statement can contain unicode literals.
        u   öäüÖÄÜß€r   c                    rV   r   rC   rW   rX   r   r   rZ      r[   z6TraceCallbackTests.test_unicode_content.<locals>.tracecreate table foo(x)z insert into foo(x) values ('%s')c                 3   s    | ]} |v V  qd S r   r   r]   )unicode_valuer   r   r_      r`   z:TraceCallbackTests.test_unicode_content.<locals>.<genexpr>z-Unicode data %s garbled in trace callback: %sz, N)
r   r   ra   r-   ZcommitrI   rb   asciijoinmaprc   r   )rY   rg   r   test_unicode_content   s   


z'TraceCallbackTests.test_unicode_contentc                    s   g   fdd}ddg}|  tt tjtd d}tt}|| | }||d  |d ||d  |  | d S )	Nc                    rV   r   rC   rW   rX   r   r   rZ      r[   z=TraceCallbackTests.test_trace_callback_content.<locals>.tracerf   zinsert into foo(x) values(1))Zisolation_levelr   zcreate table bar(x)r+   )	Z
addCleanupr   r   r   r   ra   rM   r-   r   )r   rZ   ZqueriesZcon1Zcon2Zcurr   rX   r   test_trace_callback_content   s   


z.TraceCallbackTests.test_trace_callback_contentN)r#   r$   r%   rd   re   rk   rl   r   r   r   r   rU      s
    rU   c                  C   s   t ttg} tdd | D S )Nc                 S   s   g | ]	}t  |qS r   )unittestZ
TestLoaderZloadTestsFromTestCase)r^   tr   r   r   
<listcomp>  s    zsuite.<locals>.<listcomp>)r   r@   rU   rm   Z	TestSuite)Ztestsr   r   r   suite	  s   rp   c                  C   s   t  } | t  d S r   )rm   ZTextTestRunnerrunrp   )Zrunnerr   r   r   test  s   rr   __main__)rm   Zsqlite3r   Ztest.support.os_helperr   r   ZTestCaser   r@   rU   rp   rr   r#   r   r   r   r   <module>   s   hE?

