
W$                 @   s   d  d l  Z  d  d l Z Gd d   d e  j  Z Gd d   d e  j  Z Gd d   d e  j  Z d d	   Z d
 d   Z e	 d k r e   d S)    Nc               @   s   e  Z d  Z d d   Z d d   Z d d   Z d d   Z e j e	 j
 d k  d  d d    Z d d   Z d d   Z d d   Z d S)CollationTestsc             C   s   d  S)N )selfr   r   :/afs/.cs/s/python-3.5.2/amd64_rhel6/lib/python3.5/hooks.pysetUp   s    zCollationTests.setUpc             C   s   d  S)Nr   )r   r   r   r   tearDown   s    zCollationTests.tearDownc             C   ss   t  j d  } y! | j d d  |  j d  Wn< t k
 rn } z |  j | j d d  WYd  d  } ~ Xn Xd  S)Nz:memory:X*   zshould have raised a TypeErrorr   zparameter must be callable)sqliteconnectcreate_collationfail	TypeErrorassertEqualargs)r   coner   r   r   CheckCreateCollationNotCallable"   s    z.CollationTests.CheckCreateCollationNotCallablec             C   se   t  j d  } y' | j d d d    |  j d  Wn( t  j k
 r` } z WYd  d  } ~ Xn Xd  S)Nz:memory:u   colläc             S   s   |  | k |  | k  S)Nr   )xyr   r   r   <lambda>-   s    z=CollationTests.CheckCreateCollationNotAscii.<locals>.<lambda>z%should have raised a ProgrammingError)r
   r   r   r   ZProgrammingError)r   r   r   r   r   r   CheckCreateCollationNotAscii*   s    z+CollationTests.CheckCreateCollationNotAscii         z&old SQLite versions crash on this testc             C   s  d d   } t  j d  } | j d |  d } | j |  j   } | d d d k s | d d d	 k s | d
 d d k r |  j d  | j d d   y& | j |  j   } |  j d  WnE t  j k
 r} z" |  j | j d j	   d  WYd  d  } ~ Xn Xd  S)Nc             S   s   |  | k |  | k  S)Nr   )r   r   r   r   r   mycoll5   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
            r   cr   br   az#the expected order was not returnedz&should have raised an OperationalErrorz"no such collation sequence: mycoll)
r
   r   r   executefetchallr   OperationalErrorr   r   lower)r   r   r   sqlresultr   r   r   r   CheckCollationIsUsed2   s    	<z#CollationTests.CheckCollationIsUsedc             C   si   d d   } t  j d  } | j d |  d } | j |  j   } |  j | d d d g d	 d
 d  S)Nc             S   s   |  | k |  | k  d S)Nr       l        r   )r   r   r   r   r   r   P   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   msgz#the expected order was not returned)r   )r   )r   )r
   r   r   r   r    r   )r   r   r   r#   r$   r   r   r   !CheckCollationReturnsLargeIntegerO   s    	z0CollationTests.CheckCollationReturnsLargeIntegerc             C   s   t  j d  } | j d d d    | j d d d    | j d  j   } | d d d k sx | d	 d d
 k r |  j d  d  S)Nz:memory:r   c             S   s   |  | k |  | k  S)Nr   )r   r   r   r   r   r   h   s    z<CollationTests.CheckCollationRegisterTwice.<locals>.<lambda>c             S   s   |  | k |  | k  S)Nr   )r   r   r   r   r   r   i   s    zi
            select x from (select 'a' as x union select 'b' as x) order by x collate mycoll
            r   r   r   r   z wrong collation function is used)r
   r   r   r   r    r   )r   r   r$   r   r   r   CheckCollationRegisterTwiceb   s    (z*CollationTests.CheckCollationRegisterTwicec             C   s   t  j d  } | j d d d    | j d d   y | j d  |  j d  WnK t  j k
 r } z( | j d j d  s |  j d	  WYd  d  } ~ Xn Xd  S)
Nz:memory:r   c             S   s   |  | k |  | k  S)Nr   )r   r   r   r   r   r   v   s    z9CollationTests.CheckDeregisterCollation.<locals>.<lambda>z?select 'a' as x union select 'b' as x order by x collate mycollz&should have raised an OperationalErrorr   zno such collation sequencezwrong OperationalError raised)r
   r   r   r   r   r!   r   
startswith)r   r   r   r   r   r   CheckDeregisterCollationp   s    z'CollationTests.CheckDeregisterCollationN)r   r   r   )__name__
__module____qualname__r   r   r   r   unittestZskipIfr
   Zsqlite_version_infor%   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                sU   t  j d  } g      f d d   } | j | d  | j d  |  j    d  S)Nz:memory:c                  s     j  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   r3   r   )r2   r   CheckProgressHandlerUsed   s    z&ProgressTests.CheckProgressHandlerUsedc                s   t  j d  } g      f d d   } | j | d  | j   } | j d  t    } g    | j | d  | j d  t    } |  j | |  d  S)Nz:memory:c                  s     j  d   d S)Nr   )r1   r   )r2   r   r   r3      s    z0ProgressTests.CheckOpcodeCount.<locals>.progressr   z1
            create table foo (a, b)
            r   z1
            create table bar (a, b)
            )r
   r   r4   cursorr   lenZassertGreaterEqual)r   r   r3   cursZfirst_countZsecond_countr   )r2   r   CheckOpcodeCount   s    zProgressTests.CheckOpcodeCountc                s`   t  j d  } g      f d d   } | j | d  | j   } |  j t  j | j d  d  S)Nz:memory:c                  s     j  d   d S)Nr   )r1   r   )r2   r   r   r3      s    z4ProgressTests.CheckCancelOperation.<locals>.progressr   zcreate table bar (a, b))r
   r   r4   r7   ZassertRaisesr!   r   )r   r   r3   r9   r   )r2   r   CheckCancelOperation   s    z"ProgressTests.CheckCancelOperationc                sq   t  j d  } d     f d d   } | j | d  | j d  d  | j d  j   |  j   d d  d  S)Nz:memory:r   c                  s
   d   d S)Nr   r   r   r   )actionr   r   r3      s    z1ProgressTests.CheckClearHandler.<locals>.progressr   z&select 1 union select 2 union select 3z progress handler was not cleared)r
   r   r4   r   r    r   )r   r   r3   r   )r<   r   CheckClearHandler   s    zProgressTests.CheckClearHandlerN)r,   r-   r.   r6   r:   r;   r=   r   r   r   r   r0      s   r0   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)TraceCallbackTestsc                sr   t  j d  } g      f d d   } | j |  | j d  |  j    |  j t d d     D   d  S)Nz:memory:c                s     j  |   d  S)N)r1   )	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   r5   any)r   r   rA   r   )r@   r   CheckTraceCallbackUsed   s    z)TraceCallbackTests.CheckTraceCallbackUsedc                sb   t  j d  } g      f d d   } | j |  | j d   | j d  |  j   d  d  S)Nz:memory:c                s     j  |   d  S)N)r1   )r?   )r@   r   r   rA      s    z9TraceCallbackTests.CheckClearTraceCallback.<locals>.tracezcreate table foo(a, b)ztrace callback was not cleared)r
   r   rE   r   ZassertFalse)r   r   rA   r   )r@   r   CheckClearTraceCallback   s    z*TraceCallbackTests.CheckClearTraceCallbackc                s   d  t  j d  } g      f d d   } | j |  | j d  | j d   | j   |  j t  f d d     D  d	 t   d
 j t	 t     f  d  S)Nu   öäüÖÄÜß€z:memory:c                s     j  |   d  S)N)r1   )r?   )r@   r   r   rA      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   )rB   rC   )unicode_valuer   r   rD      s    z9TraceCallbackTests.CheckUnicodeContent.<locals>.<genexpr>z-Unicode data %s garbled in trace callback: %sz, )
r
   r   rE   r   Zcommitr5   rF   asciijoinmap)r   r   rA   r   )r@   rI   r   CheckUnicodeContent   s    
"z&TraceCallbackTests.CheckUnicodeContentN)r,   r-   r.   rG   rH   rM   r   r   r   r   r>      s   r>   c              C   sL   t  j t d  }  t  j t d  } t  j t d  } t  j |  | | f  S)NZCheck)r/   Z	makeSuiter   r0   r>   Z	TestSuite)Zcollation_suiteZprogress_suiteZtrace_suiter   r   r   suite   s    rN   c              C   s    t  j   }  |  j t    d  S)N)r/   ZTextTestRunnerrunrN   )Zrunnerr   r   r   test   s    rP   __main__)
r/   Zsqlite3r
   ZTestCaser   r0   r>   rN   rP   r,   r   r   r   r   <module>   s   dG1