
5dVD                 @   s   d  d l  Z  d  d l m Z d  d l Z d  d l Z d d l m Z m Z m Z d d l m	 Z	 Gd d   d e  Z
 Gd d	   d	 e  Z d
 d   Z e d k r e j   n  d S)    N)	timedelta   )unittestConnectingTestCaseskip_before_postgres)skip_if_no_namedtuplec               @   s,  e  Z d  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 e d d  d d    Z d d   Z d d   Z d d   Z d d   Z d d   Z d  d!   Z e d d  d" d#    Z d$ d%   Z d& d'   Z d( d)   Z d* d+   Z d, d-   Z d. d/   Z e d d0  d1 d2    Z e d d  d3 d4    Z d5 d6   Z d7 d8   Z d9 d:   Z d; d<   Z  d= d>   Z! d? d@   Z" e d d0  dA dB    Z# e d d  dC dD    Z$ dE dF   Z% dG dH   Z& dI dJ   Z' dK dL   Z( dM dN   Z) dO S)PExtrasDictCursorTestsz)Test if DictCursor extension class works.c             C   sG   t  j |   |  j j   } | j d  | j d  |  j j   d  S)Nz7CREATE TEMPORARY TABLE ExtrasDictCursorTests (foo text)z0INSERT INTO ExtrasDictCursorTests VALUES ('bar'))r   setUpconncursorexecutecommit)selfcurs r   I/tmp/pip-build-0jahl3lb/psycopg2/psycopg2/tests/test_extras_dictcursor.pyr	      s
    zExtrasDictCursorTests.setUpc             C   s   |  j  j   |  j d t j j  |  _  |  j  j   } |  j t | t j j	   |  j
 | j d   |  j  j d d t j j } |  j
 | j d  |  j t | t j j   d  S)Nconnection_factoryfoocursor_factory)r
   closeconnectpsycopg2extrasZDictConnectionr   
assertTrue
isinstance
DictCursorassertEqualnameNamedTupleCursor)r   curr   r   r   testDictConnCursorArgs#   s    z,ExtrasDictCursorTests.testDictConnCursorArgsc             C   s   |  j  d d    d  S)Nc             S   s
   |  j    S)N)fetchone)r   r   r   r   <lambda>/   s    zMExtrasDictCursorTests.testDictCursorWithPlainCursorFetchOne.<locals>.<lambda>)_testWithPlainCursor)r   r   r   r   %testDictCursorWithPlainCursorFetchOne.   s    z;ExtrasDictCursorTests.testDictCursorWithPlainCursorFetchOnec             C   s   |  j  d d    d  S)Nc             S   s   |  j  d  d S)Nd   r   )	fetchmany)r   r   r   r   r"   2   s    zNExtrasDictCursorTests.testDictCursorWithPlainCursorFetchMany.<locals>.<lambda>)r#   )r   r   r   r   &testDictCursorWithPlainCursorFetchMany1   s    z<ExtrasDictCursorTests.testDictCursorWithPlainCursorFetchManyc             C   s   |  j  d d    d  S)Nc             S   s   |  j    d S)Nr   )r&   )r   r   r   r   r"   5   s    zSExtrasDictCursorTests.testDictCursorWithPlainCursorFetchManyNoarg.<locals>.<lambda>)r#   )r   r   r   r   +testDictCursorWithPlainCursorFetchManyNoarg4   s    zAExtrasDictCursorTests.testDictCursorWithPlainCursorFetchManyNoargc             C   s   |  j  d d    d  S)Nc             S   s   |  j    d S)Nr   )fetchall)r   r   r   r   r"   8   s    zMExtrasDictCursorTests.testDictCursorWithPlainCursorFetchAll.<locals>.<lambda>)r#   )r   r   r   r   %testDictCursorWithPlainCursorFetchAll7   s    z;ExtrasDictCursorTests.testDictCursorWithPlainCursorFetchAllc             C   s   d d   } |  j  |  d  S)Nc             S   s   x |  D] } | SWd  S)Nr   )r   rowr   r   r   getter;   s    zGExtrasDictCursorTests.testDictCursorWithPlainCursorIter.<locals>.getter)r#   )r   r,   r   r   r   !testDictCursorWithPlainCursorIter:   s    z7ExtrasDictCursorTests.testDictCursorWithPlainCursorIterc             C   sQ   |  j  d d    } d | d <|  j | d d k  |  j | d d k  d  S)Nc             S   s
   |  j    S)N)r!   )r   r   r   r   r"   A   s    z5ExtrasDictCursorTests.testUpdateRow.<locals>.<lambda>Zquxr   r   )r#   r   )r   r+   r   r   r   testUpdateRow@   s    
z#ExtrasDictCursorTests.testUpdateRow   r   c             C   s,   |  j  j d t j j  } |  j |  d  S)Nr   )r
   r   r   r   r   _testIterRowNumber)r   r   r   r   r   *testDictCursorWithPlainCursorIterRowNumberF   s    z@ExtrasDictCursorTests.testDictCursorWithPlainCursorIterRowNumberc             C   sf   |  j  j d t j j  } | j d  | |  } |  j | d d k  |  j | d d k  | S)Nr   z#SELECT * FROM ExtrasDictCursorTestsr   barr   )r
   r   r   r   r   r   r   )r   r,   r   r+   r   r   r   r#   K   s    z*ExtrasDictCursorTests._testWithPlainCursorc             C   s   |  j  d d    d  S)Nc             S   s
   |  j    S)N)r!   )r   r   r   r   r"   U   s    zQExtrasDictCursorTests.testDictCursorWithPlainCursorRealFetchOne.<locals>.<lambda>)_testWithPlainCursorReal)r   r   r   r   )testDictCursorWithPlainCursorRealFetchOneT   s    z?ExtrasDictCursorTests.testDictCursorWithPlainCursorRealFetchOnec             C   s   |  j  d d    d  S)Nc             S   s   |  j  d  d S)Nr%   r   )r&   )r   r   r   r   r"   X   s    zRExtrasDictCursorTests.testDictCursorWithPlainCursorRealFetchMany.<locals>.<lambda>)r3   )r   r   r   r   *testDictCursorWithPlainCursorRealFetchManyW   s    z@ExtrasDictCursorTests.testDictCursorWithPlainCursorRealFetchManyc             C   s   |  j  d d    d  S)Nc             S   s   |  j    d S)Nr   )r&   )r   r   r   r   r"   [   s    zWExtrasDictCursorTests.testDictCursorWithPlainCursorRealFetchManyNoarg.<locals>.<lambda>)r3   )r   r   r   r   /testDictCursorWithPlainCursorRealFetchManyNoargZ   s    zEExtrasDictCursorTests.testDictCursorWithPlainCursorRealFetchManyNoargc             C   s   |  j  d d    d  S)Nc             S   s   |  j    d S)Nr   )r)   )r   r   r   r   r"   ^   s    zQExtrasDictCursorTests.testDictCursorWithPlainCursorRealFetchAll.<locals>.<lambda>)r3   )r   r   r   r   )testDictCursorWithPlainCursorRealFetchAll]   s    z?ExtrasDictCursorTests.testDictCursorWithPlainCursorRealFetchAllc             C   s   d d   } |  j  |  d  S)Nc             S   s   x |  D] } | SWd  S)Nr   )r   r+   r   r   r   r,   a   s    zKExtrasDictCursorTests.testDictCursorWithPlainCursorRealIter.<locals>.getter)r3   )r   r,   r   r   r   %testDictCursorWithPlainCursorRealIter`   s    z;ExtrasDictCursorTests.testDictCursorWithPlainCursorRealIterc             C   s,   |  j  j d t j j  } |  j |  d  S)Nr   )r
   r   r   r   RealDictCursorr0   )r   r   r   r   r   .testDictCursorWithPlainCursorRealIterRowNumberf   s    zDExtrasDictCursorTests.testDictCursorWithPlainCursorRealIterRowNumberc             C   sO   |  j  j d t j j  } | j d  | |  } |  j | d d k  d  S)Nr   z#SELECT * FROM ExtrasDictCursorTestsr   r2   )r
   r   r   r   r9   r   r   )r   r,   r   r+   r   r   r   r3   k   s    z.ExtrasDictCursorTests._testWithPlainCursorRealc             C   s   |  j  d d    d  S)Nc             S   s
   |  j    S)N)r!   )r   r   r   r   r"   s   s    zMExtrasDictCursorTests.testDictCursorWithNamedCursorFetchOne.<locals>.<lambda>)_testWithNamedCursor)r   r   r   r   %testDictCursorWithNamedCursorFetchOner   s    z;ExtrasDictCursorTests.testDictCursorWithNamedCursorFetchOnec             C   s   |  j  d d    d  S)Nc             S   s   |  j  d  d S)Nr%   r   )r&   )r   r   r   r   r"   v   s    zNExtrasDictCursorTests.testDictCursorWithNamedCursorFetchMany.<locals>.<lambda>)r;   )r   r   r   r   &testDictCursorWithNamedCursorFetchManyu   s    z<ExtrasDictCursorTests.testDictCursorWithNamedCursorFetchManyc             C   s   |  j  d d    d  S)Nc             S   s   |  j    d S)Nr   )r&   )r   r   r   r   r"   y   s    zSExtrasDictCursorTests.testDictCursorWithNamedCursorFetchManyNoarg.<locals>.<lambda>)r;   )r   r   r   r   +testDictCursorWithNamedCursorFetchManyNoargx   s    zAExtrasDictCursorTests.testDictCursorWithNamedCursorFetchManyNoargc             C   s   |  j  d d    d  S)Nc             S   s   |  j    d S)Nr   )r)   )r   r   r   r   r"   |   s    zMExtrasDictCursorTests.testDictCursorWithNamedCursorFetchAll.<locals>.<lambda>)r;   )r   r   r   r   %testDictCursorWithNamedCursorFetchAll{   s    z;ExtrasDictCursorTests.testDictCursorWithNamedCursorFetchAllc             C   s   d d   } |  j  |  d  S)Nc             S   s   x |  D] } | SWd  S)Nr   )r   r+   r   r   r   r,      s    zGExtrasDictCursorTests.testDictCursorWithNamedCursorIter.<locals>.getter)r;   )r   r,   r   r   r   !testDictCursorWithNamedCursorIter~   s    z7ExtrasDictCursorTests.testDictCursorWithNamedCursorIter   c             C   s/   |  j  j d d t j j } |  j |  d  S)Ntmpr   )r
   r   r   r   r   _testNamedCursorNotGreedy)r   r   r   r   r   &testDictCursorWithNamedCursorNotGreedy   s    z<ExtrasDictCursorTests.testDictCursorWithNamedCursorNotGreedyc             C   s/   |  j  j d d t j j } |  j |  d  S)NrB   r   )r
   r   r   r   r   r0   )r   r   r   r   r   *testDictCursorWithNamedCursorIterRowNumber   s    z@ExtrasDictCursorTests.testDictCursorWithNamedCursorIterRowNumberc             C   si   |  j  j d d t j j } | j d  | |  } |  j | d d k  |  j | d d k  d  S)Nanamer   z#SELECT * FROM ExtrasDictCursorTestsr   r2   r   )r
   r   r   r   r   r   r   )r   r,   r   r+   r   r   r   r;      s
    z*ExtrasDictCursorTests._testWithNamedCursorc             C   s   |  j  d d    d  S)Nc             S   s
   |  j    S)N)r!   )r   r   r   r   r"      s    zQExtrasDictCursorTests.testDictCursorRealWithNamedCursorFetchOne.<locals>.<lambda>)_testWithNamedCursorReal)r   r   r   r   )testDictCursorRealWithNamedCursorFetchOne   s    z?ExtrasDictCursorTests.testDictCursorRealWithNamedCursorFetchOnec             C   s   |  j  d d    d  S)Nc             S   s   |  j  d  d S)Nr%   r   )r&   )r   r   r   r   r"      s    zRExtrasDictCursorTests.testDictCursorRealWithNamedCursorFetchMany.<locals>.<lambda>)rG   )r   r   r   r   *testDictCursorRealWithNamedCursorFetchMany   s    z@ExtrasDictCursorTests.testDictCursorRealWithNamedCursorFetchManyc             C   s   |  j  d d    d  S)Nc             S   s   |  j    d S)Nr   )r&   )r   r   r   r   r"      s    zWExtrasDictCursorTests.testDictCursorRealWithNamedCursorFetchManyNoarg.<locals>.<lambda>)rG   )r   r   r   r   /testDictCursorRealWithNamedCursorFetchManyNoarg   s    zEExtrasDictCursorTests.testDictCursorRealWithNamedCursorFetchManyNoargc             C   s   |  j  d d    d  S)Nc             S   s   |  j    d S)Nr   )r)   )r   r   r   r   r"      s    zQExtrasDictCursorTests.testDictCursorRealWithNamedCursorFetchAll.<locals>.<lambda>)rG   )r   r   r   r   )testDictCursorRealWithNamedCursorFetchAll   s    z?ExtrasDictCursorTests.testDictCursorRealWithNamedCursorFetchAllc             C   s   d d   } |  j  |  d  S)Nc             S   s   x |  D] } | SWd  S)Nr   )r   r+   r   r   r   r,      s    zKExtrasDictCursorTests.testDictCursorRealWithNamedCursorIter.<locals>.getter)rG   )r   r,   r   r   r   %testDictCursorRealWithNamedCursorIter   s    z;ExtrasDictCursorTests.testDictCursorRealWithNamedCursorIterc             C   s/   |  j  j d d t j j } |  j |  d  S)NrB   r   )r
   r   r   r   r9   rC   )r   r   r   r   r   *testDictCursorRealWithNamedCursorNotGreedy   s    z@ExtrasDictCursorTests.testDictCursorRealWithNamedCursorNotGreedyc             C   s/   |  j  j d d t j j } |  j |  d  S)NrB   r   )r
   r   r   r   r9   r0   )r   r   r   r   r   .testDictCursorRealWithNamedCursorIterRowNumber   s    zDExtrasDictCursorTests.testDictCursorRealWithNamedCursorIterRowNumberc             C   sR   |  j  j d d t j j } | j d  | |  } |  j | d d k  d  S)NrF   r   z#SELECT * FROM ExtrasDictCursorTestsr   r2   )r
   r   r   r   r9   r   r   )r   r,   r   r+   r   r   r   rG      s    z.ExtrasDictCursorTests._testWithNamedCursorRealc             C   s   d | _  | j d  g  } x( | D]  } t j d  | j |  q# W|  j | d d | d d t d d  k   |  j | d d | d d t d d	  k  d  S)
NrA   z8select clock_timestamp() as ts from generate_series(1,3)g{Gz?r   tsr   secondsg{Gzt?gׁsF?)itersizer   timesleepappendr   r   )r   r   recstr   r   r   rC      s    	0z/ExtrasDictCursorTests._testNamedCursorNotGreedyc             C   sN   d | _  | j d  x1 t |  D]# \ } } |  j | d | j  q# Wd  S)N   z#select * from generate_series(1,10)r   )rQ   r   	enumerater   	rownumber)r   r   irr   r   r   r0      s    	z(ExtrasDictCursorTests._testIterRowNumberc             C   s   d d  l  } |  j j d t j j  } | j d  | j   } | j |  } | j	 |  } |  j
 | |  |  j
 | d | d  |  j
 | d | d  |  j
 | d | d  |  j
 | d | d  |  j
 | j | j  d  S)Nr   r   zselect 10 as a, 20 as br   ab)pickler
   r   r   r   r   r   r!   dumpsloadsr   _index)r   r^   r   r[   dr1r   r   r   testPickleDictRow   s    z'ExtrasDictCursorTests.testPickleDictRowc             C   s   d d  l  } |  j j d t j j  } | j d  | j   } | j |  } | j	 |  } |  j
 | |  |  j
 | d | d  |  j
 | d | d  |  j
 | j | j  d  S)Nr   r   zselect 10 as a, 20 as br\   r]   )r^   r
   r   r   r   r9   r   r!   r_   r`   r   Z_column_mapping)r   r^   r   r[   rb   rc   r   r   r   testPickleRealDictRow   s    z+ExtrasDictCursorTests.testPickleRealDictRowN)*__name__
__module____qualname____doc__r	   r    r$   r'   r(   r*   r-   r.   r   r1   r#   r4   r5   r6   r7   r8   r:   r3   r<   r=   r>   r?   r@   rD   rE   r;   rH   rI   rJ   rK   rL   rM   rN   rG   rC   r0   rd   re   r   r   r   r   r      sL   	r   c               @   su  e  Z d  Z d d   Z e d d    Z e d d    Z e d d    Z e d	 d
    Z e d d    Z	 e d d    Z
 e d d    Z d d   Z e d d    Z e d d    Z e d d    Z e e d d  d d     Z e d d    Z e d d     Z e d! d"    Z e e d d#  d$ d%     Z e e d d  d& d'     Z d( S))NamedTupleCursorTestc             C   s   t  j |   d d l m } y d d l m } Wn t k
 rI d  SYn X|  j d |  |  _ |  j j	   } | j
 d  | j
 d  | j
 d  | j
 d  |  j j   d  S)	Nr   )NamedTupleConnection)
namedtupler   z-CREATE TEMPORARY TABLE nttest (i int, s text)z$INSERT INTO nttest VALUES (1, 'foo')z$INSERT INTO nttest VALUES (2, 'bar')z$INSERT INTO nttest VALUES (3, 'baz'))r   r	   psycopg2.extrasrk   collectionsrl   ImportErrorr   r
   r   r   r   )r   rk   rl   r   r   r   r   r	      s    	zNamedTupleCursorTest.setUpc             C   sQ   |  j  j d d t j j } |  j | j d  |  j t | t j j   d  S)Nr   r   )	r
   r   r   r   r   r   r   r   r   )r   r   r   r   r   test_cursor_args   s    z%NamedTupleCursorTest.test_cursor_argsc             C   s   |  j  j   } | j d  | j   } |  j | d d  |  j | j d  |  j | d d  |  j | j d  |  j | j d  |  j | j d  d  S)Nzselect * from nttest order by 1r   r   r      )	r
   r   r   r!   r   rZ   srY   rowcount)r   r   rV   r   r   r   test_fetchone   s    z"NamedTupleCursorTest.test_fetchonec             C   s   |  j  j   } d | _ | j d  | j   } |  j d t |   |  j | d j d  |  j | d j d  |  j | d j d  |  j | d j d  |  j | j	 d  |  j | j
 d  d  S)NrA   zselect * from nttest order by 1r   r   r   r2   rq   )r
   r   Z	arraysizer   r&   r   lenrZ   rr   rY   rs   )r   r   resr   r   r   test_fetchmany_noarg  s    	z)NamedTupleCursorTest.test_fetchmany_noargc             C   s   |  j  j   } | j d  | j d  } |  j d t |   |  j | d j d  |  j | d j d  |  j | d j d  |  j | d j d  |  j | j d  |  j | j	 d  d  S)Nzselect * from nttest order by 1rA   r   r   r   r2   rq   )
r
   r   r   r&   r   ru   rZ   rr   rY   rs   )r   r   rv   r   r   r   test_fetchmany  s    z#NamedTupleCursorTest.test_fetchmanyc             C   s   |  j  j   } | j d  | j   } |  j d t |   |  j | d j d  |  j | d j d  |  j | d j d  |  j | d j d  |  j | d j d  |  j | d j d  |  j | j d  |  j | j	 d  d  S)	Nzselect * from nttest order by 1rq   r   r   r   rA   r2   baz)
r
   r   r   r)   r   ru   rZ   rr   rY   rs   )r   r   rv   r   r   r   test_fetchall'  s    z"NamedTupleCursorTest.test_fetchallc             C   s   |  j  j   } | j d d d	 g  | j d  | j   } |  j d t |   |  j | d j d  |  j | d j d  d  S)
Nzdelete from nttest where i = %sr   rA   zselect * from nttest order by 1r   rq   ry   )r   )rA   )	r
   r   Zexecutemanyr   r)   r   ru   rZ   rr   )r   r   rv   r   r   r   test_executemany6  s    	z%NamedTupleCursorTest.test_executemanyc             C   sZ  |  j  j   } | j d  t |  } |  j | j d  t |  } |  j | j d  |  j | j d  |  j | j d  |  j | j	 d  t |  } |  j | j d  |  j | j d  |  j | j d  |  j | j	 d  t |  } |  j | j d  |  j | j d  |  j
 t | j  |  j | j d  |  j | j	 d  d  S)	Nzselect * from nttest order by 1r   r   r   rq   rA   r2   ry   )r
   r   r   iterr   rY   nextrZ   rr   rs   assertRaisesStopIteration__next__)r   r   rZ   rV   r   r   r   	test_iterA  s(    zNamedTupleCursorTest.test_iterc             C   s   y d d l  m } Wn t k
 r d d l m } y? |  j d |  |  _ |  j j   } | j d  | j	   Wn t k
 r Yn X|  j
 d  Yn X|  j d  Sd  S)Nr   )rl   )rk   r   zselect 1zexpecting ImportErrorznamedtuple available)rn   rl   ro   rm   rk   r   r
   r   r   r!   ZfailZskipTest)r   rl   rk   r   r   r   r   test_error_message[  s    	z'NamedTupleCursorTest.test_error_messagec             C   s   |  j  j   } | j d  | j   } |  j | j d  | j d  | j   } |  j | j d  |  j t t	 | d  d  S)Nzselect 1 as foo;r   zselect 2 as bar;rA   r   )
r
   r   r   r!   r   r   r2   r~   AttributeErrorgetattr)r   r   r[   r   r   r   test_record_updatedn  s    z(NamedTupleCursorTest.test_record_updatedc             C   sY   |  j  j   } | j d  |  j t j | j  | j d  |  j t j | j  d  S)Nzupdate nttest set s = s)r
   r   r   r~   r   ZProgrammingErrorr!   r)   )r   r   r   r   r   test_no_result_no_surprisez  s
    z/NamedTupleCursorTest.test_no_result_no_surprisec                s  d d l  m } | j  d g      f d d   } | | _ z |  j j   } | j d  | j   | j   | j   |  j d   d  | j d  | j   | j   |  j d   d  | j d  | j   | j	 d  |  j d   d  Wd   | _ Xd  S)	Nr   )r   c                s     d d 7< |   S)Nr   r   r   )Zself_)callsf_origr   r   	f_patched  s    z?NamedTupleCursorTest.test_minimal_generation.<locals>.f_patchedzselect * from nttest order by 1r   rA   rq   )
rm   r   Z_make_ntr
   r   r   r!   r   r)   r&   )r   r   r   r   r   )r   r   r   test_minimal_generation  s*    			





z,NamedTupleCursorTest.test_minimal_generationr/   r   c             C   s   |  j  j d  } | j d  g  } | j | j d   | j | j    | j | j    |  j t	 t
 d   d d   | D  d  S)NrB   z$select i from generate_series(0,9) i   
   c             S   s   g  |  ] } | j   q Sr   )rZ   ).0rV   r   r   r   
<listcomp>  s   	 z3NamedTupleCursorTest.test_named.<locals>.<listcomp>)r
   r   r   extendr&   rT   r!   r)   r   listrange)r   r   rU   r   r   r   
test_named  s    zNamedTupleCursorTest.test_namedc             C   sB   |  j  j d  } | j d  | j   } |  j | j d  d  S)NrB   zselect 42 as i*   )r
   r   r   r!   r   rZ   )r   r   rV   r   r   r   test_named_fetchone  s    z(NamedTupleCursorTest.test_named_fetchonec             C   sI   |  j  j d  } | j d  | j d  } |  j | d j d  d  S)NrB   zselect 42 as ir   r   r   )r
   r   r   r&   r   rZ   )r   r   rU   r   r   r   test_named_fetchmany  s    z)NamedTupleCursorTest.test_named_fetchmanyc             C   sF   |  j  j d  } | j d  | j   } |  j | d j d  d  S)NrB   zselect 42 as ir   r   )r
   r   r   r)   r   rZ   )r   r   rU   r   r   r   test_named_fetchall  s    z(NamedTupleCursorTest.test_named_fetchallrA   c             C   s   |  j  j d  } d | _ | j d  g  } x( | D]  } t j d  | j |  q5 W|  j | d j | d j t	 d d  k   |  j | d j | d j t	 d d	  k  d  S)
NrB   rA   z8select clock_timestamp() as ts from generate_series(1,3)g{Gz?r   r   rP   g{Gzt?gׁsF?)
r
   r   rQ   r   rR   rS   rT   r   rO   r   )r   r   rU   rV   r   r   r   test_not_greedy  s    	.z$NamedTupleCursorTest.test_not_greedyc             C   s`   |  j  j d  } d | _ | j d  x1 t |  D]# \ } } |  j | d | j  q5 Wd  S)NrB      z"select * from generate_series(1,3)r   )r
   r   rQ   r   rX   r   rY   )r   r   rZ   rV   r   r   r   test_named_rownumber  s
    	z)NamedTupleCursorTest.test_named_rownumberN)rf   rg   rh   r	   r   rp   rt   rw   rx   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rj      s*   	!
rj   c               C   s   t  j   j t  S)N)r   Z
TestLoaderZloadTestsFromNamerf   r   r   r   r   
test_suite  s    r   __main__)rR   datetimer   r   rm   Z	testutilsr   r   r   r   r   rj   r   rf   mainr   r   r   r   <module>   s   