
5dV+                 @   s   d  d l  Z  d  d l Z d  d l m Z d d l m Z m Z m Z d d l m Z m	 Z	 m
 Z
 d  d l Z Gd d   d e j  Z Gd d	   d	 e  Z Gd
 d   d e j  Z d d   Z e d k r e j   n  d S)    N)Popen   )unittestskip_before_pythonskip_before_postgres)ConnectingTestCaseskip_copy_if_greenscript_to_py3c               @   s   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 d   Z d d   Z d d   Z d d   Z d S)ConnectTestCasec                s:   d    _  d  d   f d d  } t j   _ | t _ d  S)NFc                s   |  | | f   _  d  S)N)args)dsnconnection_factoryasync)self >/tmp/pip-build-0jahl3lb/psycopg2/psycopg2/tests/test_module.pyconect_stub%   s    z*ConnectTestCase.setUp.<locals>.conect_stub)r   psycopg2_connect_connect_orig)r   r   r   )r   r   setUp#   s    	zConnectTestCase.setUpc             C   s   |  j  t _ d  S)N)r   r   r   )r   r   r   r   tearDown+   s    zConnectTestCase.tearDownc             C   sR   |  j  t t j  |  j  t t j d d d d  |  j  t t j d d d  S)Nr   Fc             S   s   d  S)Nr   )r   r   r   r   r   <lambda>1   s    z@ConnectTestCase.test_there_has_to_be_something.<locals>.<lambda>r   T)assertRaises	TypeErrorr   connect)r   r   r   r   test_there_has_to_be_something.   s
    z.ConnectTestCase.test_there_has_to_be_somethingc             C   sV   t  j d  |  j |  j d d  |  j |  j d d   |  j |  j d d  d  S)N r   r      F)r   r   assertEqualr   )r   r   r   r   test_no_keywords5   s    z ConnectTestCase.test_no_keywordsc             C   sV   t  j d  |  j |  j d d  |  j |  j d d   |  j |  j d d  d  S)Nzdbname=blah x=yr   r   r   F)r   r   r   r   )r   r   r   r   test_dsn;   s    zConnectTestCase.test_dsnc          	   C   st  t  j d d  |  j |  j d d  t  j d d  |  j |  j d d  t  j d d	  |  j |  j d d
  t  j d d  |  j |  j d d  t  j d d  |  j |  j d d  t  j d d d d d d	 d d  |  j d |  j d k  |  j d |  j d k  |  j d
 |  j d k  |  j d |  j d k  |  j t |  j d j    d  d  S)Ndatabasefoor   z
dbname=foouserpostgreszuser=postgrespasswordZsecretzpassword=secretporti8  z	port=5432Zsslmoderequirezsslmode=require   )r   r   r   r   
assertTruelensplit)r   r   r   r   test_supported_keywordsA   s"    z'ConnectTestCase.test_supported_keywordsc             C   s+   t  j d d  |  j |  j d d  d  S)Nr#   barr   zfoo=bar)r   r   r   r   )r   r   r   r   test_generic_keywordsU   s    z%ConnectTestCase.test_generic_keywordsc             C   s   d d d  } t  j d d d d d |  |  j |  j d	 d
  |  j |  j d |  |  j |  j d d  t  j d
 d | |  j |  j d	 d
  |  j |  j d |  |  j |  j d d  d  S)NFc             S   s   d  S)Nr   )r   r   r   r   r   fZ   s    z'ConnectTestCase.test_factory.<locals>.fr"   r#   r.   bazr   r   zdbname=foo bar=bazr   r   )r   r   r   r   )r   r0   r   r   r   test_factoryY   s    zConnectTestCase.test_factoryc             C   s   t  j d d d d d d  |  j |  j d d  |  j |  j d d   |  j |  j d	  t  j d d d
 |  j |  j d d  |  j |  j d d   |  j |  j d	  d  S)Nr"   r#   r.   r1   r   r   r   zdbname=foo bar=bazr   T)r   r   r   r   r*   )r   r   r   r   
test_asyncg   s    zConnectTestCase.test_asyncc             C   s1   t  j d d d d  |  j |  j d d  d  S)Nr"   Zsonyr&   r   r   zdbname=sony password='')r   r   r   r   )r   r   r   r   test_empty_paramr   s    z ConnectTestCase.test_empty_paramc             C   s   t  j d d  |  j |  j d d  t  j d d  |  j |  j d d  t  j d d  |  j |  j d d  t  j d d	  |  j |  j d d
  t  j d d  |  j |  j d d  d  S)Nr"   zhello worldr   zdbname='hello world'z
back\slashzdbname=back\\slashzquo'tezdbname=quo\'tezwith	tabzdbname='with	tab'z\every thing'zdbname='\\every thing\'')r   r   r   r   )r   r   r   r   test_escapev   s    zConnectTestCase.test_escapec             C   sX   |  j  t t j d d d |  j  t t j d d d |  j  t t j d d d d  S)Nz
dbname=foor"   r#   r$   r%   Zno_such_paramZmeh)r   r   r   r   )r   r   r   r   test_no_kwargs_swallow   s    			z&ConnectTestCase.test_no_kwargs_swallowN)__name__
__module____qualname__r   r   r   r    r!   r-   r/   r2   r3   r4   r5   r6   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 e d	 d
    Z d d   Z	 d d   Z
 e d d  d d    Z e d d  d d    Z e d d  d d    Z d S)ExceptionsTestCasec             C   s   |  j  j   } y | j d  Wn. t j k
 rP } z | } WYd  d  } ~ Xn X|  j | j d  |  j | j  |  j | j | k  d  S)Nzselect * from nonexist42P01)	conncursorexecuter   Errorr   pgcoder*   pgerror)r   curexcer   r   r   test_attributes   s    z"ExceptionsTestCase.test_attributesc             C   s   |  j  j   } y | j d  Wn. t j k
 rP } z | } WYd  d  } ~ Xn X| j } |  j t | t j j	   xu d d d d d d d d	 d
 d d d d d d d d g D]: } t
 | |  } | d  k	 r |  j t | t   q q Wd  S)Nzselect * from nonexistcolumn_nameconstraint_namecontextdatatype_nameZinternal_positionZinternal_queryZmessage_detailZmessage_hintZmessage_primaryschema_nameseverityZsource_fileZsource_functionZsource_linesqlstateZstatement_position
table_name)r<   r=   r>   r   r?   diagr*   
isinstance
extensionsZDiagnosticsgetattrstr)r   rB   rC   rD   rN   attrvr   r   r   test_diagnostics_attributes   s     		z.ExceptionsTestCase.test_diagnostics_attributesc             C   s   |  j  j   } y | j d  Wn. t j k
 rP } z | } WYd  d  } ~ Xn X|  j | j j d  |  j | j j d  d  S)Nzselect * from nonexistr;   ERROR)	r<   r=   r>   r   r?   r   rN   rL   rK   )r   rB   rC   rD   r   r   r   test_diagnostics_values   s    z*ExceptionsTestCase.test_diagnostics_valuesc                s   d d  l  } d d l m }   f d d   } |   \ } } | j } | |  } ~ ~ | j   |   d  k	 sw t    j | j d  ~ | j   | j   |   d  k s t  d  S)Nr   )refc                 sY     j  j   }  y |  j d  Wn2 t j k
 rT } z |  | f SWYd  d  } ~ Xn Xd  S)Nzselect * from nonexist)r<   r=   r>   r   r?   )rB   rC   )r   r   r   tmp   s
    z5ExceptionsTestCase.test_diagnostics_life.<locals>.tmpr;   )gcweakrefrX   rN   ZcollectAssertionErrorr   rL   )r   rZ   rX   rY   rB   rD   rN   wr   )r   r   test_diagnostics_life   s    	

 
z(ExceptionsTestCase.test_diagnostics_lifec             C   s   d d l  m } |   } |  j j   } y | j | d  Wn1 t j k
 ro } z | j } WYd  d  } ~ Xn X|  j | j	 d  d  S)Nr   )StringIOZnonexistr;   )
ior_   r<   r=   Zcopy_tor   r?   rN   r   rL   )r   r_   r0   rB   rC   rN   r   r   r   test_diagnostics_copy   s    	z(ExceptionsTestCase.test_diagnostics_copyc             C   s   |  j  j   } y | j d  Wn. t k
 rP } z | j } WYd  d  } ~ Xn X|  j  j   y | j d  Wn1 t j k
 r } z | j } WYd  d  } ~ Xn X|  j | j	 d  |  j | j	 d  d  S)Nz)l'acqua e' poca e 'a papera nun galleggiaz'select level from water where ducks > 1Z42601r;   )
r<   r=   r>   	ExceptionrN   rollbackr   r?   r   rL   )r   rB   rC   Zdiag1Zdiag2r   r   r   test_diagnostics_independent   s    z/ExceptionsTestCase.test_diagnostics_independentc             C   s   |  j  j   } | j d  | j d  y |  j  j   Wn. t j k
 rj } z | } WYd  d  } ~ Xn X|  j | j j d  d  S)Nz
            create temp table test_deferred (
               data int primary key,
               ref int references test_deferred (data)
                   deferrable initially deferred)
        z&insert into test_deferred values (1,2)Z23503)	r<   r=   r>   commitr   r?   r   rN   rL   )r   rB   rC   rD   r   r   r   test_diagnostics_from_commit   s    z/ExceptionsTestCase.test_diagnostics_from_commit	      c             C   s   |  j  j   } | j d  y | j d  Wn. t j k
 r] } z | } WYd  d  } ~ Xn X|  j | j d  |  j | j j d  d  d  |  j | j j	 d  |  j | j j
 d   |  j | j j d  |  j | j j d   d  S)Nzt
            create temp table test_exc (
                data int constraint chk_eq1 check (data = 1)
            )zinsert into test_exc values(2)Z23514   Zpg_tempZtest_excZchk_eq1)r<   r=   r>   r   r?   r   r@   rN   rJ   rM   rF   rG   rI   )r   rB   rC   rD   r   r   r   test_9_3_diagnostics   s     z'ExceptionsTestCase.test_9_3_diagnosticsr      c             C   s   d d  l  } |  j j   } y | j d  Wn. t j k
 r\ } z | } WYd  d  } ~ Xn X| j | j |   } |  j | j	 | j	  |  j | j
 | j
  |  j | j d  k  d  S)Nr   zselect * from nonexist)pickler<   r=   r>   r   r?   loadsdumpsr   rA   r@   r*   )r   rl   rB   rC   rD   e1r   r   r   test_pickle  s    zExceptionsTestCase.test_picklec             C   s   d d  l  } y t j d  Wn. t j k
 rM } z | } WYd  d  } ~ Xn X| j | j |   } |  j | j | j  |  j | j | j  |  j	 | j
 d  k  d  S)Nr   zdbname=nosuchdatabasemate)rl   r   r   r?   rm   rn   r   rA   r@   r*   r=   )r   rl   rC   rD   ro   r   r   r   test_pickle_connection_error  s    z/ExceptionsTestCase.test_pickle_connection_errorN)r7   r8   r9   rE   rU   rW   r^   r   ra   rd   rf   r   rj   r   rp   rq   r   r   r   r   r:      s   
r:   c               @   s   e  Z d  Z d d   Z d S)TestExtensionModulec             C   s   t  j j t j  } t  j j |  } |  j | t j k  d | | f } t t j d t	 |  g  } | j
   |  j d | j  d  S)NzG
import sys
sys.path.remove(%r)
sys.path.insert(0, %r)
import _psycopg
z-cr   )ospathdirnamer   __file__r*   sysr   
executabler	   communicater   
returncode)r   Zpkgdirpardirscriptprocr   r   r   test_import_internal/  s    
z(TestExtensionModule.test_import_internalN)r7   r8   r9   r~   r   r   r   r   rr   .  s   rr   c               C   s   t  j   j t  S)N)r   Z
TestLoaderZloadTestsFromNamer7   r   r   r   r   
test_suiteC  s    r   __main__)rs   rw   
subprocessr   Z	testutilsr   r   r   r   r   r	   r   ZTestCaser
   r:   rr   r   r7   mainr   r   r   r   <module>   s   m