idZ ddlZddlZddlZddlZddlZddlZddlZddlZ ddl Z ddl Z ddl m ZdZGddejZGddeZGdd eZGd d eZGd d eZGddejZGddeZGddeZejedgZe jr.eejede jr.eejede jr.eejede j r.eejede j!r.eejedGddZ"ej#eZ$e%dkrej&e$Z'e"5e j(Z)e*ee*de)e)Z(ej+,e'e jrkej&e$Z'ej-e j _(e*de*e j j(ej+,e'ddddS#1swxYwYdSdS)z'Unit tests version 2.6.1.0 for adodbapiNcZddtdDS)NcJg|] }tjtj!S)randomchoicestring ascii_letters).0ns HC:\PYTHON\_runtimes\venv\Lib\site-packages\adodbapi/test/adodbapitest.py z randomstring..)s%KKKAFM&"677KKK )joinrange)lengths r randomstringr(s) 77KKrKKK L LLrc"eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Z d/dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"d"Z#d#Z$d$Z%d%Z&d&Z'd'Z(d(Z)d)Z*d*Z+d+Z,d,Z-d-Z.d.Z/d S)0 CommonDBTestszdSelf contained super-simple tests in easy syntax, should work on everything between mySQL and Oraclecd|_dS)Nunknownengineselfs r setUpzCommonDBTests.setUp/s  rc|jSNrrs r getEnginezCommonDBTests.getEngine2s {rctrNotImplementedErrorrs r getConnectionzCommonDBTests.getConnection5s!!rcN|Sr)r$cursorrs r getCursorzCommonDBTests.getCursor8s !!##**,,,rcR|}|jjdksJdS)NCursor)r' __class____name__rcrsrs r testConnectionzCommonDBTests.testConnection;s-~~~&(222222rc|}d}||_|}|j|ks JddS)NcdSNr connectionr& errorclass errorvalues r z8CommonDBTests.testErrorHandlerInherits..Asrz5Error handler on crsr should be same as on connection)r$ errorhandlerr&)rconn mycallabler-s r testErrorHandlerInheritsz&CommonDBTests.testErrorHandlerInherits?sU!!##II &{{}} J... C/....rc^|}|jdd= ||dS#t |jdksJt |jddksJ|jddt jksJYdSxYw)Nr2r)r$messagesclosecommitlenapiProgrammingErrorrr9s r !testDefaultErrorHandlerConnectionz/CommonDBTests.testDefaultErrorHandlerConnectionHs!!## M!!!  ? JJLLL KKMMMMM ?t}%%****t}Q'((A----=#A&#*>>>>>>>>s (A AB,czd}|}||_||t |jdksJd|_ ||n#YnxYwt |jdks JddS)NcdSr1rr3s r r7z=CommonDBTests.testOwnErrorHandlerConnection..UqrrJSetting errorhandler to none should bring back the standard error handler)r$r8r?r@rAr>)rr:r9s r testOwnErrorHandlerConnectionz+CommonDBTests.testOwnErrorHandlerConnectionSs @ @ !!##&  4=!!Q&&&&   JJLLL KKMMMM  D4=!!A%%% X&%%%%s )(BBc\|}|jdd= |ddS#t |jdksJt |jddksJ|jddt jksJYdSxYw)NSELECT abbtytddrf FROM dasdasdr2rr=)r$r&r>executerArB DatabaseErrorr,s r testDefaultErrorHandlerCursorz+CommonDBTests.testDefaultErrorHandlerCursorhs!!##**,, M!!!  < LL9 : : : : : <t}%%****t}Q'((A----=#A&#*;;;;;;;;s A AB+cRd}|}||_|dt |jdksJd|_ |dn#YnxYwt |jdks JddS)NcdSr1rr3s r r7z9CommonDBTests.testOwnErrorHandlerCursor..trHrrLrrI)r$r&r8rMrAr>)rr:r-s r testOwnErrorHandlerCursorz'CommonDBTests.testOwnErrorHandlerCursorrs @ @ !!##**,,& 56664=!!Q&&&&   LL9 : : : :  D4=!!A%%% X&%%%%s (A>>Bc d}|ddksJ|||tfddgt jt j_}dtj z}| || dtj z| dtj z|jt j <| d tj z| }|d }| |d d|d }| |d d | |d d d}|ddksJ||jd <| |d d | |d d `n#YnxYw|dS# `n#YnxYw|wxYw)Nc |dzS)Nr=r aStringFields r r7z:CommonDBTests.testUserDefinedConversions..s q8Hrgabba gabbagabbacj|Sr)variantConversions)xr9s r r7z:CommonDBTests.testUserDefinedConversions..s8OPQ8Rrr=zDCREATE TABLE xx_%s (fldData VARCHAR(100) NOT NULL, fld2 VARCHAR(20))z7INSERT INTO xx_%s(fldData,fld2) VALUES('gabba','booga')z2INSERT INTO xx_%s(fldData,fld2) VALUES('hey','yo')z/SELECT fldData,fld2 FROM xx_%s ORDER BY fldDatarr2heyheyyoyoc*|Sr)upperrUs r r7z:CommonDBTests.testUserDefinedConversions..s<3E3E3G3GrupThisUPTHISYO)helpForceDropOnTblTempr$ assertRaisesAttributeErrorcopyrBrZr&configtmprMadoStringTypesfetchall assertEqual convertershelpRollbackTblTemp)rduplicatingConverterr-tabdefrowsrowupcaseConverterr9s @r testUserDefinedConversionsz(CommonDBTests.testUserDefinedConversionssh. '#H#H ''00L@@@@  ' ' ) ) )%%''D   n.R.R.R.RUVTW X X X&*i0F&G&GD #;;==DV*  LL LLIFJV    LLDvzQ   ;OD #C$6 7 LLJVZW X X X==??Dq'C   SV\ 2 2 2q'C   SVX . . .   SVV , , ,GGO"?8,,8888"1DOA    SVX . . .   SVT * * * ++   $ $ & & & & &  ++   $ $ & & & &s0G?H#HH #I%H('I(H,*INc @ ||}|}dtjz|zdz} || |dtjz|dtjz|} || dd| ddksJ|jd} | ddvsJd| dd d d |d kr>| dtj ks&Jd| dd tj j d nW|d kr>| dtj ks&Jd| dd tj j d n|dkr=| dtj ks&Jd| dd tj j d n|dkr=| dtjks&Jd| dd tjj d n|dkr=| dtjks&Jd| dd tjj d nJ|dkr=| dtjks&Jd| dd tjj d nt"|g} |r| |t'| } d} | D]=}| dz } |dtjz| |fn#|xYw|dtjz| g|} |rSt+d|D}t-| d|s#Jdt/| dd|nSt-| dt/|s0Jdt/| ddt/||rb|dkr\t0j| d}t0j|}||||rTt7|}t7| d}t9||z |z dksJd| d|fz|r.d}|| d|vd| dd||| d|d| dd|d ?dS)Nzb CREATE TABLE xx_%s ( fldId integer NOT NULL, fldData z) z$INSERT INTO xx_%s (fldId) VALUES (1)zSELECT fldId,fldData FROM xx_%sr2r)fldDataflddatazwas "z " expected "ru"STRINGNUMBERBINARYDATETIMEROWIDUUIDz.INSERT INTO xx_%s (fldId,fldData) VALUES (?,?)z'SELECT fldData FROM xx_%s WHERE ?=fldIDc,g|]}t|Sr)type)r aRVs r rz2CommonDBTests.helpTestDataType..s%O%O%OCd3ii%O%O%Orz result type "z" must be one of z" must be instance of gh㈵>z-Values not almost equal recvd=%s, expected=%fFzValue "z " not in zValues are not equal recvd="z ", expected=")rcr$r&rgrhrMfetchonerk descriptionrBrxvaluesryrzr{r|OTHERr#extendsetprintADOerrorstuple isinstanceradodbapi dateconverterDateObjectToIsoFormatStringfloatabs assertTrue)rsqlDataTypeStringDBAPIDataTypeStringpyDatapyDataInputAlternativescompareAlmostEqualallowedReturnValuesr9r-rors descTupleinputsfldIdinParam allowedTypesiso1iso2svoks r helpTestDataTypezCommonDBTests.helpTestDataTypes ##%%%!!##{{}} j         V ;fjHIII 6CDDD ]]__ A%%%!uzzzz$Q' |55555 aLLL II8 555 ( * *Q<3:----!  !!!0----!H , ,Q<3:----!  !!!0----!H , ,Q<3:----!  !!!0----!J . .Q<3<////!  ###2////!G + +Q<39,,,,!     /,,,,!F * *Q<39,,,,!     /,,,, & % " 3 MM1 2 2 2V3 3 G QJE  DvzQG$ ##%%% LL9FJF   B" $%O%O;N%O%O%OPP !"Q%66<@AKKKKV6""Q%f66RU V 6" &9Z&G&G-II"Q%PP-II&QQ  t,,,,# &MM"Q%LL1q5zzA~///Cr!uajP0///' BOO1!44I"Q%II4GII $$1a555&&&*]3 3 s (%LL%cj|dddd|dddddS)Nrealry皙 @TrrgdFGrrs r testDataTypeFloatzCommonDBTests.testDataTypeFloat9sB fhNNN gxTRRRRRrc |dddddtjdg|dddddtjdg|ddd d d tjd g|d kr|ddddgdSdS)Nz decimal(18,2)ryrz3.45z3,45rz numeric(18,2)z decimal(20,2)lG#xoW1z444444444444444444.00z444444444444444444,00444444444444444444MSSQLuniqueidentifierr}z&{71A4F49E-39F3-42B1-A41E-48FF154996E6})rdecimalDecimalr rs r testDataTypeDecmalz CommonDBTests.testDataTypeDecmal=s    !'1H1H I       !'1H1H I       '' 455!   >>  w & &  ! !"8%M$N "      ' &rc |dkr+|ddtjddS|dkrB|ddtjdddtjdg dS|d dtjd |ddtjddS) NMySQLz DECIMAL(20,4)ryz-922337203685477.5808 PostgreSQLmoneyTg-C6 )rr smallmoneyz 214748.02)r rrrrs r testDataTypeMoneyzCommonDBTests.testDataTypeMoney\s >>  w & &  ! !7?;R+S+S     ^^   - -  ! ! 788#')O$;<<% "       ! !,'/+:V:V W W W  ! !7?3J#K#K     rc||dkr|ddd|ddd|dvr|ddd |d vr|d dd d d g |ddddS)Nrtinyintryssmallinti)ACCESSrbitr2)rrbigintl^erintir rrs r testDataTypeIntzCommonDBTests.testDataTypeIntrs >>  | + +  ! !)Xs ; ; ; j(F;;; >>  #; ; ;  ! !x    >>  6 6 6  ! !%/$< "    eXz:::::rcFdD]}||ddgddS)N)zchar(6)znchar(6)rxspam )spamrrrrr)r sqlDataTypes r testDataTypeCharzCommonDBTests.testDataTypeCharsO2  K  ! !$H$H$H "      rc|dkrddg}n!|dkrgd}ngd}|D]}||dddgdS) Nr varchar(10)textr)rrzcharacter varying)rz nvarchar(10)rntextrxrr)r stringKindsrs r testDataTypeVarCharz!CommonDBTests.testDataTypeVarChars >>  w & &(&1KK ^^   - -FFFKKK' K KK  ! !+x& J J J J K Krc |dkrd}nd}||dtjdddd |d vr-|d dtjdddd td krH|d vr4||dtjdddd ddd dSdSdS)Nr timestampdatetimer{ Tr)rr smalldatetime pythontime r2)r rrDatetag Timestamp)rdts r testDataTypeDatezCommonDBTests.testDataTypeDates* >>  | + +BBB   HM$B77D     >>  #: : :  ! ! dB++#' "    ,  4>>#3#3< $ $   ! !"4RR;;#' "       $ $ rcd}|tj|t|g}|dkr-|ddtj||dS|ddtj|||ddtj|||dkr-|d dtj||dSdS) Ns@*rbytearzrz binary(5)zvarbinary(100)rimage)rBinarybytesr r)rbinfldarvs r testDataTypeBinaryz CommonDBTests.testDataTypeBinarys5%xv..f > >>  | + +  ! !8?6#:#:PS "       ! !Xxv'>'>TW "     ! ! ''$' "    ~~7**%%Xxv'>'>TW&+*rc.|dSr)rcrs r rmz!CommonDBTests.helpRollbackTblTemps ##%%%%%rc|}|5} |dtjz|js|n#YnxYwddddS#1swxYwYdS)NzDROP TABLE xx_%s)r$r&rMrgrh autocommitr@)rr9r-s r rcz$CommonDBTests.helpForceDropOnTblTemps!!## [[]] d  /&*<==="KKMMM                    s(A==A)(A=)A-+A==BBc:dtjz} ||n>#tj$r,|||YnwxYwt dD]&}|dtj|fz'dS)Nz\ CREATE TABLE xx_%s ( fldData INTEGER ) z'INSERT INTO xx_%s (fldData) VALUES (%i))rgrhrMrBrNrcr)rr-rois r helpCreateAndPopulateTableTempz,CommonDBTests.helpCreateAndPopulateTableTemps  j    ! LL   ! ! !  ' ' ) ) ) LL  !q V VA LLBfjRS_T U U U U V Vs'8A"!A"cZ|}|||dtjz|}t |dksJd}|ddD]}|d|ksJ|dz }|dS)NSELECT fldData FROM xx_%srrr2)r'rrMrgrhrjrArm)rr-rrrqs r testFetchAllzCommonDBTests.testFetchAlls~~ ++D111 06:=>>> ]]__2ww!|||| ad8  Cq6Q;;;; FAA   """""rcr|}|||dtjz||j|}t|dksJ|dddksJ| dS)Nrrr=r) r'rpreparergrhrMcommandrjrArmrr-rs r testPreparedStatementz#CommonDBTests.testPreparedStatements~~ ++D111 06:=>>> T\""" ]]__2ww!||||!uQx1}}}}   """""rch|}|||d|dtjz|}t|dksJ|dddksJ|dS)NzSELECT * FROM nowhererrr=r) r'rrrMrgrhrjrArmrs r testWrongPreparedStatementz(CommonDBTests.testWrongPreparedStatements~~ ++D111 ,--- '&* 4   ]]__2ww!||||!uQx1}}}}   """""rc |}|||dtjzt |D]\}}|d|ksJ|dS)Nrr)r'rrMrgrh enumeraterm)rr-rrqs r testIteratorzCommonDBTests.testIterators~~ ++D111 06:=>>>     FAsq6Q;;;;;   """""rc|}||ddg}|dtjz||jdkr%t |dzn||jd| dtjz| }t|dksJ| dS) N)o)z&INSERT INTO xx_%s (fldData) VALUES (?)z7 Provider does not support rowcount (on .executemany())r=r ) r'r executemanyrgrhrowcountprintr rkrMrjrArm)rr- seq_of_valuesrs r testExecuteManyzCommonDBTests.testExecuteManys~~ ++D111(   4vz A=    =B     KL       T]A . . . 06:=>>> ]]__2ww"}}}}   """""rc|}|||dtjz|jdkrn||jd|dS)Nrrr)r'rrMrgrhrrkrmr,s r testRowCountzCommonDBTests.testRowCount+s~~ ++D111 06:=>>> =B      T]A . . .   """""rcZ|}|||dtjz|jdkr%t |dzn||jd| dS)Nz$DELETE FROM xx_%s WHERE fldData >= 5rz/ Provider does not support rowcount (on DELETE)) r'rrMrgrhrrr rkrmr,s r testRowCountNoRecordsetz%CommonDBTests.testRowCountNoRecordset6s~~ ++D111 ;fjHIII =B   $..""%VV W W W W   T]A . . .   """""rc|}|||dtjz|d}t |dksJ|d}t |dksJ|d}t |dksJ|dS)Nrrr2)r'rrMrgrh fetchmanyrArmrs r testFetchManyzCommonDBTests.testFetchMany@s~~ ++D111 06:=>>> ^^A  2ww!|||| ^^A  2ww!|||| ^^A  2ww!||||   """""rc|}|||dtjz|}t |dksJd|_|}t |dksJ|}t |dksJ|}t |dksJ|dS)Nrr2rr) r'rrMrgrhr rA arraysizermrs r testFetchManyWithArraySizez(CommonDBTests.testFetchManyWithArraySizeLs~~ ++D111 06:=>>> ^^  2ww!|||| ^^  2ww!|||| ^^  2ww!|||| ^^  2ww!||||   """""rc|}||tj|jdidS)Nznot a valid connect string)r$r?rdrBrNdbrDs r testErrorConnectzCommonDBTests.testErrorConnect[sG!!##  #+TW6RTVWWWWWrc ||}|}dtjz}||ddg}d}|D]}|dz } |dtjz||d|d|dfn#|xYw|dtjz|g|}tt|D]1}||||ksJd ||d ||d 2t||ksJd |d |d t|dd } t|dd} | | ksJd | d | d |d |dksJ|j |dksJ|j |dksJ|dtjz| } | dddksJ| dddksJ| dddksJ| ddksJ| ddksJ| ddksJtdD]0} tdD]}| | || | |fksJ1dS)Nz CREATE TABLE xx_%s ( fldId integer NOT NULL, fldTwo integer, fldThree integer, fldFour integer) )r=rr)fghr2zBINSERT INTO xx_%s (fldId,fldTwo,fldThree,fldFour) VALUES (?,?,?,?)rr=z7SELECT fldTwo,fldThree,fldFour FROM xx_%s WHERE ?=fldIDreturned value:"" != test value:"rwrfldTwoz)select fldThree,fldFour,fldTwo from xx_%srrfldFourr)rrr)rr)r2r=r)rcr$r&rgrhrMrrrrArfldThreerrj) rr9r-rorrrrecjslice1slice2recsrs r testRowIteratorzCommonDBTests.testRowIterator`s] ##%%%!!##{{}} j   V_-" -" -G QJE  Xj!GAJ GAJ?  ##%%% LLIFJV   --//C3w<<((  1v++++@CAPQ S,+++::(((G3GG7GGG)((3ss8__F71Q3<((FV###I6IIfIII$##x=GAJ....<71:----;'!*,,,,, @6:MNNN}}AwqzS    AwqzQAwy!S((((DzQK A%%%%DzS    q 0 0A1XX 0 0AwqzT!Q$Z///// 0 0 0s 29B,,Cc 0||}d|_|}dtjz}||gd}d}|D]}|dz }dtjzdz} ||||fn#|xYw|dtjzd z|g|}| |d |d |d d |d | |dddtjzdz} d} || | d|j vsJddd|j d |j | ksJd| d|j d | |j | |dtjz|}| |d ddS)Nformat CREATE TABLE xx_%s ( fldId integer NOT NULL, fldData varchar(10), fldConst varchar(30)) onetwothreer=r2INSERT INTO xx_zE (fldId,fldConst,fldData) VALUES (%s,'thi%s :may cause? trouble', %s)!SELECT fldData, fldConst FROM xx_z WHERE %s=fldIDrrrrwzthi%s :may cause? troublezinsert into xx_z) (fldId,fldData) VALUES (%s,'four%sfive'))z(?,z expected:"z" in "z " but found "z(SELECT fldData FROM xx_%s WHERE fldID=20z four%sfive) rcr$ paramstyler&rgrhrMrrrkqueryr parameters) rr9r-rorrrsqlrselparamss r testFormatParamstylez"CommonDBTests.testFormatParamstylesh ##%%%!!##"{{}}  j    V((( B BG QJE!*YZ    S5'"23333 ##%%% LL3fj@CTT   --//C   Ar?zsix%fiverArBs r testPyformatParamstylez$CommonDBTests.testPyformatParamstyles ##%%%!!##{{}}$  j    V(((  G QJE  Sj!%U33  ##%%% LL?&*Lu    --//C   Ar?r@) rcr$r*r&rgrhrMrrrkr) rr9r-rorrrtroublerppdcmds r testAutomaticParamstylez%CommonDBTests.testAutomaticParamstyle>s ##%%%!!###{{}}  j    V((( . .G QJE  %j!\]G$   ##%%%2G LL3fj@CSS   --//C   AKLLLAFJN  Y ]]__2ww!||||  Y}}&& M'&& 06:=>>> ]]__2ww!|||K|||   """""rc |}n#t$rYdSwxYw|jr Jd|}|||dt jz|dt jz}||| }t|dksJ| | | }| }|5}||| }t|dksJ|dddksJ dddn #1swxYwY|dS)Nzdefault should be manual commitrNrOr2rd)getAnotherConnectionr#rr&rrMrgrhr@rjrAr?r$r'rm)rcon2r-rRrr9s r testCommitzCommonDBTests.testCommits ,,..DD"    FF ?EE$EEE"{{}} ++D111 >KLLL AFJN  Y ]]__2ww!||||  !!##~~ [[]] #d LL # # #Br77a<<<<a58s?????  # # # # # # # # # # # # # # #   """""s %% AF))F-0F-c |}n#t$rYdSwxYw|jr Jd|}|||dt jzdt jz}|||}t|dksJ| | | } ||| }n#tj$rd}YnwxYw| Jd||dS)Nzunexpected beginning conditionrNrOr2zEcursor.fetchone should return None if a query retrieves no rows. Got )rVr#rr&rrMrgrhrjrAr?r'rrBrNrm)rrWr-rRrrqs r testAutoRollbackzCommonDBTests.testAutoRollbacks ,,..DD"    FF ?DD$DDD"{{}} ++D111 >KLLLAFJN  Y ]]__2ww!||||  ~~  LL   --//CC    CCC {{ [TW [ [{{   """""s %%)D88E  E cl |ddi}n#t$rYdSwxYw|}|||dt jz||5}dt jz}||| }t|dks Jd dddn #1swxYwY|| dS)NrTrNrPr#all records should still be present) rVr#r&rrMrgrhr?r'rjrArm)rac_connr-rRrs r testAutoCommitzCommonDBTests.testAutoCommitsv //t0DEEGG"    FF ~~ ++D111 >KLLL ^^   H3fj@I LL   Br77b==="G====  H H H H H H H H H H H H H H H     """""s ((ADDDc |}n#t$rYdSwxYwd|_|}|||dt jz|| }|| 5}dt jz}||| }t|dks Jd dddn #1swxYwY| dS)NTrNrPrr\)rVr#rr&rrMrgrhr?r$r'rjrArm)rr]r-r9rRrs r testSwitchedAutoCommitz$CommonDBTests.testSwitchedAutoCommits //11GG"    FF !~~ ++D111 >KLLL !!##  ^^   H3fj@I LL   Br77b==="G====  H H H H H H H H H H H H H H H   """""s %% AD--D14D1c Gddt}Gddt}Gddt}|td}|t jdd }|t j}||}|}d tj z} | | | d tj z|||f| |}| 5}d tj z} | | |} || j||| j||| j|dddn #1swxYwY|dS) NceZdZdS);CommonDBTests.testExtendedTypeHandling..XtendStringNr+ __module__ __qualname__rrr XtendStringrc DrrgceZdZdS)8CommonDBTests.testExtendedTypeHandling..XtendIntNrdrrr XtendIntrjrhrrkceZdZdS):CommonDBTests.testExtendedTypeHandling..XtendFloatNrdrrr XtendFloatrmrhrrnr>iiz CREATE TABLE xx_%s ( s VARCHAR(40) NOT NULL, i INTEGER NOT NULL, f REAL NOT NULL)z,INSERT INTO xx_%s (s, i, f) VALUES (?, ?, ?)zSELECT s, i, f from xx_%s)strrrrrrandintrcr$r&rgrhrMr?r'rrkrrassertAlmostEqualfrm) rrgrkrnxsxixfr9r-rorRrqs r testExtendedTypeHandlingz&CommonDBTests.testExtendedTypeHandlingsd     #        s           [b)) * * XfnT3// 0 0 Z  ( ( ##%%%!!##{{}} $ j    V :VZ G"bRT    !!## ^^   .3fj@I LL   --//C   SUB ' ' '   SUB ' ' '  " "35" - - - . . . . . . . . . . . . . . .   """""sB G$$G(+G()NNN)0r+rerf__doc__rr r$r'r.r;rErJrOrRrsrrrrrrrrrrmrcrrrrrrrrr r rrr0rCrGrLrSrXrZr^r`rvrrr rr,sjj   """---333    ? ? ?   *<<<   &/'/'/'l!% AAAAFSSS>,;;;"KKK 4,&&&VVV$ # # #### # # #######& # # #### # # # # # #XXX A0A0A0F;/;/;/z,-,-,-\.-.-.-`G-G-G-R###.###6###8###&###*'#'#'#'#'#rrc@eZdZdZdZdZd dZdZdZdZ d Z dS) TestADOwithSQLServerctjtjditjd|_d|j_d|_tj|_dS)Nrr2r>r)rgdbSqlServerconnectconnStrSQLServerr9timeoutrrrs r rzTestADOwithSQLServer.setUp(sR-  $Q ' +1+B1+E     +rc |jn#YnxYw |jn#YnxYwd|_dSrr9rQr?rs r tearDownzTestADOwithSQLServer.tearDown0_  I     D  IOO      D  >Ac|jSrr9rs r r$z"TestADOwithSQLServer.getConnection; yrNctjd}|r||tjtjdi|SNr2r)rgr|rfupdater{raddkeyskeyss r rVz)TestADOwithSQLServer.getAnotherConnection>sS&q)..00  ! KK (&*A!*DMMMMrc|j}d} |d|jn#YnxYw|||dd}|ddksJ|dd|dd ksJ|dd |d d ksJ|d d |jdS)Na CREATE PROCEDURE sp_DeleteMeOnlyForTesting @theInput varchar(50), @theOtherInput varchar(50), @theOutput varchar(100) OUTPUT AS SET @theOutput=@theInput+@theOtherInput (DROP PROCEDURE sp_DeleteMeOnlyForTestingsp_DeleteMeOnlyForTesting) DodsworthAnnez rrz is not "Dodsworth"r2rz is not "Anne"r= DodsworthAnnez is not "DodsworthAnne")r9r&rMr@callprocrQ)rr-spdef retvaluess r $testVariableReturningStoredProcedurez9TestADOwithSQLServer.testVariableReturningStoredProcedureDs#y!!  LLC D D D I        D UMM ')P  |{***y|,R,R,R***|v%%%)A,'H'H'H%%%|...| 6 6 6/..  .A Acb|}||dtjdtjdtjd} |d|jn#YnxYw|||d}|}| |dd| dks Jd | r Jd | dks Jd | }| |ddd | Jd | dS)Nzo CREATE PROCEDURE sp_DeleteMe_OnlyForTesting AS SELECT fldData FROM xx_z= ORDER BY fldData ASC SELECT fldData From xx_z> where fldData = -9999 SELECT fldData FROM xx_z+ ORDER BY fldData DESC z)DROP PROCEDURE sp_DeleteMe_OnlyForTestingsp_DeleteMe_OnlyForTestingrTzOperation should succeedzShould be an empty second setzthird set should be presentz'No more return sets, should return None) r'rrgrhrMr9r@rrrknextsetrjrm)rr-rrrqrowdescs r testMultipleSetReturnz*TestADOwithSQLServer.testMultipleSetReturn_s~~ ++D1111 JJJ JJJ JJJ    LLD E E E I        D UMM">?? mmoo Q###||~~%%%'A%%%==??CC$CCC"||~~%%%'D%%%--// A***||~~%%'P%%%   """""s .BBc |j}d} |d|jn#YnxYw|||dt jddddddd d g}|d d ksJd |d z|jdS)Na1 CREATE PROCEDURE sp_DeleteMeOnlyForTesting @theInput DATETIME, @theOtherInput varchar(50), @theOutput varchar(100) OUTPUT AS SET @theOutput = CONVERT(CHARACTER(20), @theInput, 0) + @theOtherInput rrirrr2Beepz r=zDec 25 2014 12:01AM Beepzvalue was="%s")r9r&rMr@rrrrQrr-rresults r testDatetimeProcedureParameterz3TestADOwithSQLServer.testDatetimeProcedureParametersy!!  LLC D D D I        D U '  b"aA 6 6 I   ay66668H6RS98T666 rc|j}d} |d|jn#YnxYw||t jt jt jf|j dgdgdi}|dr3dt|dvsd t|vs Jd n|dsJ|d|j dS) Na. CREATE PROCEDURE sp_DeleteMeOnlyForTesting @theInput DATETIME, @theOtherInput varchar(50), @theOutput varchar(100) OUTPUT AS SET @theOutput = CONVERT(CHARACTER(20), @theInput) + @theOtherInput rrr,)z this is wrongrz not Alicerz @theInputr2rNz(Identifies the wrong erroneous parameter) r9r&rMr@ tryconnection%try_operation_with_expected_exceptionrB DataErrorrNrrorQrs r %testIncorrectStoredProcedureParameterz:TestADOwithSQLServer.testIncorrectStoredProcedureParameters#y!!  LLC D D D I        D UD ]C- . M ( ) AAA B    !9 (#fQi..00Os6{{4R4R4R:5S4RR!9 ' 'fQi ' '9 rr) r+rerfrrr$rVrrrrrrr ryry's,,,   NNNN 6 # # #D2rryc.eZdZdZdZdZddZdZdS)TestADOwithAccessDBctjtjditjd|_d|j_d|_tj|_dS)Nrr2r>r)rgdbAccessconnect connStrAccessr9r}rrrs r rzTestADOwithAccessDB.setUpsR*  !! $ (.(r)rgdbMySqlconnect connStrMySqlr9r}rrrs r rzTestADOwithMySql.setUpsR)   # '-':1'=     'rc |jn#YnxYw |jn#YnxYwd|_dSrrrs r rzTestADOwithMySql.tearDownrrc|jSrrrs r r$zTestADOwithMySql.getConnectionrrNctjd}|r||tjtjdi|Sr)rgrrfrrrs r rVz%TestADOwithMySql.getAnotherConnectionsS"1%**,,  ! KK $f&9!&<EEEErch|jtjditjd}|JdSr)rrgrrs r rzTestADOwithMySql.testOkConnects5 DGV(+ Fv/B1/E F F}}}}}rrrrrr rrsh(((   FFFF rrc.eZdZdZdZdZddZdZdS)TestADOwithPostgresctjtjditjd|_d|j_d|_tj|_dS)Nrr2r>r)rgdbPostgresConnectconnStrPostgresr9r}rrrs r rzTestADOwithPostgres.setUpsR,  #A & *0*@*C    " *rc |jn#YnxYw |jn#YnxYwd|_dSrrrs r rzTestADOwithPostgres.tearDown&rrc|jSrrrs r r$z!TestADOwithPostgres.getConnection1rrNctjd}|r||tjtjdi|Sr)rgrrfrrrs r rVz(TestADOwithPostgres.getAnotherConnection4sS%a(--//  ! KK ')?)BKdKKKrch|jtjditjd}|JdSr)rrgrrs r rz!TestADOwithPostgres.testOkConnect:s5 DGV+A. L&2H2K L L}}}}}rrrrrr rrsh+++   LLLL rrc>eZdZdZdZdZdZdZdZdZ dZ d S) TimeConverterInterfaceTestcB|jdddsJdS)Nr=)tcrrs r testIDatez$TimeConverterInterfaceTest.testIDate]s&w||D!Q'''''''rcB|jdddsJdS)N r=)rTimers r testITimez$TimeConverterInterfaceTest.testITime`s&w||B1%%%%%%%rcH|jddddddsJdS)Nrr=rr2)rrrs r testITimestampz)TimeConverterInterfaceTest.testITimestampcs.w  q!RA6666666rc>|jdsJdS)N?mUxG@)rDateObjectFromCOMDaters r testIDateObjectFromCOMDatez5TimeConverterInterfaceTest.testIDateObjectFromCOMDatefs$w,,];;;;;;;rc4t|jdsJdS)NCOMDate)hasattrrrs r testICOMDatez'TimeConverterInterfaceTest.testICOMDateis tw *******rc|jddd}|j|}d}||ks J|dS)Nrrg@)rrrrdcomDatecorrects r testExactDatez(TimeConverterInterfaceTest.testExactDatelsP GLLr2 & &'//!$$'!!!7!!!!!rcJ|jdddddd}|j|}d}||||jddd d dd }|j|}d }|||dS) Nrrrrrg@rgSsn@)rrrrkrs r testExactTimestampz-TimeConverterInterfaceTest.testExactTimestamprs G  dBB1 5 5'//!$$ '*** G  dAq"b" 5 5'//!$$$ '*****rc|jdddddd}|j|}|t |ddd|jd d d }|j|}|t |ddd dS) Nrrrrrrz1994-11-15 12:03:10rrr=z 2003-05-02)rrrrkror)rrisors r testIsoFormatz(TimeConverterInterfaceTest.testIsoFormat}s G  dBB2 6 6g11!44 S"X(=>>> W\\$1 % %g11"55 S"X 55555rN) r+rerfrrrrrrrrrrr rr\s(((&&&777<<<++++++ + + +66666rrc2eZdZdZdZdZdZdZdZdS)TestPythonTimeConverterc6tj|_dSr)rBpythonTimeConverterrrs r rzTestPythonTimeConverter.setUps)++rctjd}tj|}|j|}t |dz dks Jd|zdS)N) rrrrr2rrrUUUUUU?z%f more than an hour wrong)timemktime localtimerrr)rmktcmds r testCOMDatez#TestPythonTimeConverter.testCOMDatesg [U V V N2  gooa  3&''(2224PSV4V22222rc |jd}tjtjd}tjtjd}||cxkr|ksnJd|ddS)Nr) rrrrrr2rrr) rrrrr=rrrrwz$" should be about 2002-6-28 12:15:01)rrrgmtimer)rrt1t2s r testDateObjectFromCOMDatez1TestPythonTimeConverter.testDateObjectFromCOMDatesg++M:: [ KS T T  [ KT U U  C}}}}"}}}}}K#KKK}}}}}rctjd}tjd}|jddd}|tj|cxkr|ks nJ|dS)N) rrrrrr2rr) rrr>rrr2rrrrrr)rrrrrrrobjs r testDatez TestPythonTimeConverter.testDatesv [T U U [T U Ugll4B''DK$$))))r)))))3)))))rc||jdddtjddS)Nrrr=i)rkrrrrrs r testTimez TestPythonTimeConverter.testTimesF  GLLR # #T[1K%L%L     rctjtjd}tjtjd}|jdddddd}||cxkr|ks nJ|dS) N) rrrrrr2rrr) rrrrr2rrrrrrrrr=)rrrrrrs r testTimestampz%TestPythonTimeConverter.testTimestamps ^ KT U U  ^ KT U U  gaRQ77C}}}}"}}}}}c}}}}}rN r+rerfrrrrrr rrr rrst,,,WWW L L L///    """""rrc2eZdZdZdZdZdZdZdZdS)TestPythonDateTimeConverterc6tj|_dSr)rBpythonDateTimeConverterrrs r rz!TestPythonDateTimeConverter.setUps-//rctjdddddd}|j|}t|dz dks Jd dS) Nrrrrrr2rrzmore than an hour wrong)rrrr)rrrs r rz'TestPythonDateTimeConverter.testCOMDates\  dAr2r1 5 5gooa  3&''(2224M22222rc |jd}tjdddddd}tjdddddd}||cxkr|ks nJ|tjddddddd }|j|j|}||cxkr|ks nJ|dS) Nrrrrrrr2r i )rrrr)rrrrtxc1s r rz5TestPythonDateTimeConverter.testDateObjectFromCOMDatesg++M::  tQBA 6 6  tQBA 6 6C}}}}"}}}}}c}}}   !RRF  W * *47??2+>+> ? ?B|||||||||R|||||rctjddd}tjddd}|jddd}||cxkr|ks nJ|dS)Nrrrr>r)rdaterrrs r rz$TestPythonDateTimeConverter.testDatesd ]4B ' ' ]4B ' 'gll4B''C}}}}"}}}}}c}}}}}rc||jdddddddS)Nrrr=rz18:15:02)rkrr isoformatrs r rz$TestPythonDateTimeConverter.testTimesE b"a00::<r=s--,  ####MMMx#x#x#x#x#H%x#x#x#vQQQQQ=QQQh-@}D-~(6(6(6(6(6!2(6(6(6V)")")")")"8)")")"X#"#"#"#"#""<#"#"#"N 223NPVWW   MM"667NPVWW  MM"667JFSS  MM"667KVTT  MM"667GPP  MM"667JFSS ;;;;;;;; 6"" zdmE""G   33'5 g 0D0DFGGG, !!%%g...   3#dmG/Fc.E.G.GH  + E- . . . E(#1 2 2 2 #H # % % ) )' 2 2 2333333333333333333sB7KKK