
5dV                 @   s   d  d l  Z  d  d l j Z d d l m Z m Z Gd d   d e  Z Gd d   d e  Z Gd d	   d	 e  Z	 d
 d   Z
 e d k r e j   n  d S)    N   )unittestConnectingTestCasec               @   s   e  Z d  Z d d   Z d S)WithTestCasec             C   s}   t  j |   |  j j   } y | j d  |  j j   Wn< t j k
 rx |  j j   | j d  |  j j   Yn Xd  S)Nzdelete from test_withz/create table test_with (id integer primary key))	r   setUpconncursorexecutecommitpsycopg2ZProgrammingErrorrollback)selfcurs r   </tmp/pip-build-0jahl3lb/psycopg2/psycopg2/tests/test_with.pyr   "   s    zWithTestCase.setUpN)__name__
__module____qualname__r   r   r   r   r   r   !   s   r   c               @   sd   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 S)WithConnectionTestCasec          
   C   s   |  j  b } |  j |  j  | k  |  j | j t j  | j   } | j d  |  j | j t j  Wd  QX|  j |  j  j t j  |  j |  j  j	  |  j  j   } | j d  |  j | j
   d g  d  S)Nz insert into test_with values (1)zselect * from test_withr   )r   )r   
assertTrueassertEqualstatusextSTATUS_READYr   r	   STATUS_BEGINclosedfetchall)r   r   r   r   r   r   test_with_ok0   s    z#WithConnectionTestCase.test_with_okc          
   C   s   |  j    L } |  j | j t j  | j   } | j d  |  j | j t j  Wd  QX|  j |  j j t j  |  j	 |  j j
  |  j j   } | j d  |  j | j   d g  d  S)Nz insert into test_with values (2)zselect * from test_with   )r   )connectr   r   r   r   r   r	   r   r   r   r   r   )r   r   r   r   r   r   test_with_connect_idiom?   s    z.WithConnectionTestCase.test_with_connect_idiomc                s     f d d   }   j  t j |    j   j j t j    j   j j	    j j
   } | j d    j | j   g   d  S)Nc           	      s/     j    }  |  j   } | j d  Wd  QXd  S)Nz"insert into test_with values ('a'))r   r   r	   )r   r   )r   r   r   fN   s    z4WithConnectionTestCase.test_with_error_db.<locals>.fzselect * from test_with)assertRaisesr   	DataErrorr   r   r   r   r   r   r   r   r	   r   )r   r!   r   r   )r   r   test_with_error_dbM   s    z)WithConnectionTestCase.test_with_error_dbc                s     f d d   }   j  t |    j   j j t j    j   j j    j j	   } | j
 d    j | j   g   d  S)Nc           	      s7     j  ( }  |  j   } | j d  d d Wd  QXd  S)Nz insert into test_with values (3)r   r   )r   r   r	   )r   r   )r   r   r   r!   \   s    z8WithConnectionTestCase.test_with_error_python.<locals>.fzselect * from test_with)r"   ZeroDivisionErrorr   r   r   r   r   r   r   r   r	   r   )r   r!   r   r   )r   r   test_with_error_python[   s    z-WithConnectionTestCase.test_with_error_pythonc                s6     f d d   }   j  j     j t j |  d  S)Nc                  s     j   Wd  QXd  S)N)r   r   )r   r   r   r!   k   s    
z2WithConnectionTestCase.test_with_closed.<locals>.f)r   closer"   r   ZInterfaceError)r   r!   r   )r   r   test_with_closedj   s    z'WithConnectionTestCase.test_with_closedc          	      s   g   G   f d d   d t  j    |  j d      } | j   } | j d  Wd  QX|  j | j t  j  |  j   |  j	 j   } | j d  |  j | j
   d g  d  S)Nc                   s(   e  Z d  Z     f d d   Z   S)z;WithConnectionTestCase.test_subclass_commit.<locals>.MyConnc                s$    j  d   t   |   j   d  S)N)appendsuperr
   )r   )MyConn	__class__commitsr   r   r
   u   s    zBWithConnectionTestCase.test_subclass_commit.<locals>.MyConn.commit)r   r   r   r
   r   )r+   r-   )r,   r   r+   t   s   r+   connection_factoryz!insert into test_with values (10)zselect * from test_with
   )r/   )r   
connectionr   r   r	   r   r   r   r   r   r   )r   r   r   r   )r+   r-   r   test_subclass_commitr   s    "z+WithConnectionTestCase.test_subclass_commitc                s   g   G   f d d   d t  j    y@ |  j d    ( } | j   } | j d  d d Wd  QXWn t k
 r| Yn X|  j d  |  j | j t  j	  |  j   | j   } | j d  |  j | j
   g   d  S)	Nc                   s(   e  Z d  Z     f d d   Z   S)z=WithConnectionTestCase.test_subclass_rollback.<locals>.MyConnc                s$    j  d   t   |   j   d  S)N)r)   r*   r   )r   )r+   r,   	rollbacksr   r   r      s    zFWithConnectionTestCase.test_subclass_rollback.<locals>.MyConn.rollback)r   r   r   r   r   )r+   r2   )r,   r   r+      s   r+   r.   z!insert into test_with values (11)r   r   zexception not raisedzselect * from test_with)r   r0   r   r   r	   r%   r   r   r   r   r   )r   r   r   r   )r+   r2   r   test_subclass_rollback   s    "z-WithConnectionTestCase.test_subclass_rollbackN)
r   r   r   r   r    r$   r&   r(   r1   r3   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)
WithCursorTestCasec             C   s   |  j  c } | j   % } | j d  |  j | j  Wd  QX|  j |  j  j t j  |  j | j  Wd  QX|  j |  j  j t j	  |  j |  j  j  |  j  j   } | j d  |  j | j
   d g  d  S)Nz insert into test_with values (4)zselect * from test_with   )r5   )r   r   r	   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r      s    zWithCursorTestCase.test_with_okc             C   s   y@ |  j  1 } | j    } | j d  d d Wd  QXWd  QXWn t k
 rT Yn X|  j |  j  j t j  |  j |  j  j	  |  j | j	  |  j  j   } | j d  |  j | j
   g   d  S)Nz insert into test_with values (5)r   r   zselect * from test_with)r   r   r	   r%   r   r   r   r   r   r   r   )r   r   r   r   r   r   test_with_error   s    z"WithCursorTestCase.test_with_errorc                s}   g   G   f d d   d t  j    |  j j d     } |  j t |     Wd  QX|  j | j  |  j   d  S)Nc                   s(   e  Z d  Z     f d d   Z   S)z0WithCursorTestCase.test_subclass.<locals>.MyCursc                s$    j  d   t   |   j   d  S)N)r)   r*   r'   )r   )MyCursr,   closesr   r   r'      s    z6WithCursorTestCase.test_subclass.<locals>.MyCurs.close)r   r   r   r'   r   )r7   r8   )r,   r   r7      s   r7   Zcursor_factory)r   r   r   r   
isinstancer   )r   r   r   )r7   r8   r   test_subclass   s    "z WithCursorTestCase.test_subclassc             C   s   yE |  j  6 } | j d   } | j d  | j   Wd  QXWd  QXWn; t j k
 r } z |  j | j d  WYd  d  } ~ Xn X|  j d  d  S)Nnamedz
select 1/0Z22012zwhere is my exception?)	r   r   r	   Zfetchoner   r#   r   ZpgcodeZfail)r   r   curer   r   r   test_exception_swallow   s    &z)WithCursorTestCase.test_exception_swallowN)r   r   r   r   r6   r:   r>   r   r   r   r   r4      s   r4   c               C   s   t  j   j t  S)N)r   Z
TestLoaderZloadTestsFromNamer   r   r   r   r   
test_suite   s    r?   __main__)r   Zpsycopg2.extensions
extensionsr   Z	testutilsr   r   r   r   r4   r?   r   mainr   r   r   r   <module>   s   n<