Update of /cvsroot/pywin32/pywin32/adodbapi/tests
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv23004/tests
Modified Files:
RunTests.bat adodbapitest.py adodbapitestconfig.py
Log Message:
adodbapi v2.3 django compatible version
Index: adodbapitest.py
===================================================================
RCS file: /cvsroot/pywin32/pywin32/adodbapi/tests/adodbapitest.py,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** adodbapitest.py 14 Feb 2009 15:13:52 -0000 1.10
--- adodbapitest.py 3 May 2010 05:40:33 -0000 1.11
***************
*** 1,8 ****
! """ Unit tests for adodbapi version 2.2.6 (d)"""
"""
adodbapi - A python DB API 2.0 interface to Microsoft ADO
Copyright (C) 2002 Henrik Ekelund
- Email: <http://sourceforge.net/sendmessage.php?touser=618411>
This library is free software; you can redistribute it and/or
--- 1,7 ----
! """ Unit tests for adodbapi version 2.3.0"""
"""
adodbapi - A python DB API 2.0 interface to Microsoft ADO
Copyright (C) 2002 Henrik Ekelund
This library is free software; you can redistribute it and/or
***************
*** 20,25 ****
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! Updated for decimal data and version 2.1 by Vernon Cole
! AS400 tests removed v 2.1.1 - Vernon Cole
"""
--- 19,23 ----
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! Updates by Vernon Cole
"""
***************
*** 33,38 ****
win32 = False
! import adodbapitestconfig #will find (parent?) adodbpai
import adodbapi
#adodbapi.adodbapi.verbose = 3
--- 31,37 ----
win32 = False
! import adodbapitestconfig #will find (parent?) adodbapi
import adodbapi
+ import ado_consts
#adodbapi.adodbapi.verbose = 3
***************
*** 131,159 ****
def testUserDefinedConversions(self):
-
oldconverter=adodbapi.variantConversions[adodbapi.adoStringTypes]
! try:
! duplicatingConverter=lambda aStringField: aStringField*2
! assert duplicatingConverter(u'gabba') == u'gabbagabba'
! adodbapi.variantConversions[adodbapi.adoStringTypes]=duplicatingConverter
! self.helpForceDropOnTblTemp()
! conn=self.getConnection()
- crsr=conn.cursor()
- tabdef = "CREATE TABLE tblTemp (fldData VARCHAR(100) NOT NULL)"
- crsr.execute(tabdef)
- crsr.execute("INSERT INTO tblTemp(fldData) VALUES('gabba')")
- crsr.execute("INSERT INTO tblTemp(fldData) VALUES('hey')")
- crsr.execute("SELECT fldData FROM tblTemp ORDER BY fldData")
- row=crsr.fetchone()
- self.assertEquals(row[0],'gabbagabba')
- row=crsr.fetchone()
- self.assertEquals(row[0],'heyhey')
- finally:
- adodbapi.variantConversions[adodbapi.adoStringTypes]=oldconverter #Restore
- self.helpRollbackTblTemp()
-
def helpTestDataType(self,sqlDataTypeString,
DBAPIDataTypeString,
--- 130,157 ----
def testUserDefinedConversions(self):
oldconverter=adodbapi.variantConversions[adodbapi.adoStringTypes]
! #try:
! duplicatingConverter=lambda aStringField: aStringField*2
! assert duplicatingConverter(u'gabba') == u'gabbagabba'
! adodbapi.variantConversions[adodbapi.adoStringTypes]=duplicatingConverter
! self.helpForceDropOnTblTemp()
! conn=self.getConnection()
!
! crsr=conn.cursor()
! tabdef = "CREATE TABLE tblTemp (fldData VARCHAR(100) NOT NULL)"
! crsr.execute(tabdef)
! crsr.execute("INSERT INTO tblTemp(fldData) VALUES('gabba')")
! crsr.execute("INSERT INTO tblTemp(fldData) VALUES('hey')")
! crsr.execute("SELECT fldData FROM tblTemp ORDER BY fldData")
! row=crsr.fetchone()
! self.assertEquals(row[0],'gabbagabba')
! row=crsr.fetchone()
! self.assertEquals(row[0],'heyhey')
! #finally:
! adodbapi.variantConversions[adodbapi.adoStringTypes]=oldconverter #Restore
! self.helpRollbackTblTemp()
def helpTestDataType(self,sqlDataTypeString,
DBAPIDataTypeString,
***************
*** 226,230 ****
elif compareAlmostEqual:
assert abs(rs[0]-pyData)/pyData<0.00001, \
! "Values not almost equal rs[0]=%s, oyDta=%f" %(rs[0],pyData)
else:
if allowedReturnValues:
--- 224,228 ----
elif compareAlmostEqual:
assert abs(rs[0]-pyData)/pyData<0.00001, \
! "Values not almost equal rs[0]=%s, pyData=%f" %(rs[0],pyData)
else:
if allowedReturnValues:
***************
*** 235,244 ****
assert ok
else:
! self.assertEquals(rs[0] , pyData)
! self.helpRollbackTblTemp()
!
def testDataTypeFloat(self):
! self.helpTestDataType("real",'NUMBER',3.45,compareAlmostEqual=1)
! self.helpTestDataType("float",'NUMBER',1.79e37,compareAlmostEqual=1)
def testDataTypeMoney(self): #v2.1 Cole -- use decimal for money
--- 233,242 ----
assert ok
else:
! self.assertEquals(rs[0] , pyData, \
! 'Values are not equal rs[0]="%s", pyData="%s"' %(rs[0],pyData))
!
def testDataTypeFloat(self):
! self.helpTestDataType("real",'NUMBER',3.45,compareAlmostEqual=True)
! self.helpTestDataType("float",'NUMBER',1.79e37,compareAlmostEqual=True)
def testDataTypeMoney(self): #v2.1 Cole -- use decimal for money
***************
*** 277,284 ****
def testDataTypeBinary(self):
if self.getEngine() == 'MySQL':
! pass #self.helpTestDataType("BLOB",'BINARY',adodbapi.Binary('\x00\x01\xE2\x40'))
else:
- binfld = str2bytes('\x00\x01\xE2\x40')
self.helpTestDataType("binary(4)",'BINARY',adodbapi.Binary(binfld))
self.helpTestDataType("varbinary(100)",'BINARY',adodbapi.Binary(binfld))
--- 275,282 ----
def testDataTypeBinary(self):
+ binfld = str2bytes('\x00\x01\xE2\x40')
if self.getEngine() == 'MySQL':
! pass # self.helpTestDataType("BLOB(4)",'BINARY',adodbapi.Binary(binfld))
else:
self.helpTestDataType("binary(4)",'BINARY',adodbapi.Binary(binfld))
self.helpTestDataType("varbinary(100)",'BINARY',adodbapi.Binary(binfld))
***************
*** 294,298 ****
def helpForceDropOnTblTemp(self):
conn=self.getConnection()
! crsr=conn.cursor()
try:
crsr.execute("DELETE FROM tblTemp")
--- 292,296 ----
def helpForceDropOnTblTemp(self):
conn=self.getConnection()
! crsr=conn.cursor()
try:
crsr.execute("DELETE FROM tblTemp")
***************
*** 301,306 ****
--- 299,307 ----
except:
pass
+ #finally:
+ crsr.close()
def helpCreateAndPopulateTableTemp(self,crsr):
+ self.helpForceDropOnTblTemp()
tabdef= """
CREATE TABLE tblTemp (
***************
*** 309,314 ****
"""
crsr.execute(tabdef)
! for i in range(9):
crsr.execute("INSERT INTO tblTemp (fldData) VALUES (%i)" %(i,))
def testFetchAll(self):
--- 310,316 ----
"""
crsr.execute(tabdef)
! for i in range(9): # note: this poor SQL code, but a valid test
crsr.execute("INSERT INTO tblTemp (fldData) VALUES (%i)" %(i,))
+ # better to use ("INSERT INTO tblTemp (fldData) VALUES (?)",(i,))
def testFetchAll(self):
***************
*** 320,323 ****
--- 322,333 ----
self.helpRollbackTblTemp()
+ def testIterator(self):
+ crsr=self.getCursor()
+ self.helpCreateAndPopulateTableTemp(crsr)
+ crsr.execute("SELECT fldData FROM tblTemp")
+ for i,row in enumerate(crsr):
+ assert row[0]==i
+ self.helpRollbackTblTemp()
+
def testExecuteMany(self):
crsr=self.getCursor()
***************
*** 400,403 ****
--- 410,414 ----
conn=self.getConnection()
crsr=conn.cursor()
+ self.helpForceDropOnTblTemp()
crsr.execute(tabdef)
for multiplier in (1,decimal.Decimal('2.5'),78,9999,99999,7007):
***************
*** 414,419 ****
def testErrorConnect(self):
! self.assertRaises(adodbapi.DatabaseError,adodbapi.connect,'not a valid connect string')
class TestADOwithSQLServer(CommonDBTests):
def setUp(self):
--- 425,488 ----
def testErrorConnect(self):
! self.assertRaises(adodbapi.DatabaseError,adodbapi.connect,'not a valid connect string')
!
! def testFormatParamstyle(self):
! self.helpForceDropOnTblTemp()
! conn=self.getConnection()
! conn.paramstyle = 'format' #test nonstandard use of paramstyle
! crsr=conn.cursor()
! tabdef= """
! CREATE TABLE tblTemp (
! fldId integer NOT NULL,
! fldData varchar(10))
! """
! crsr.execute(tabdef)
!
! inputs = [u'one',u'two',u'three']
! fldId=2
! for inParam in inputs:
! fldId+=1
! try:
! crsr.execute("INSERT INTO tblTemp (fldId,fldData) VALUES (%s,%s)", (fldId,inParam))
! except:
! conn.printADOerrors()
! raise
! crsr.execute("SELECT fldData FROM tblTemp WHERE %s=fldID", [fldId])
! rec = crsr.fetchone()
! assert rec[0]==inParam, 'returned value:"%s" != test value:"%s"'%(rec[0],inParam)
! crsr.execute("insert into tblTemp (fldId,fldData) VALUES (%s,'four%sfive')",(20,))
! crsr.execute("SELECT fldData FROM tblTemp WHERE fldID=20")
! rec = crsr.fetchone()
! assert rec[0]=='four%sfive'
!
! def testNamedParamstyle(self):
! self.helpForceDropOnTblTemp()
! conn=self.getConnection()
! crsr=conn.cursor()
! crsr.paramstyle = 'named' #test nonstandard use of paramstyle
! tabdef= """
! CREATE TABLE tblTemp (
! fldId integer NOT NULL,
! fldData varchar(10))
! """
! crsr.execute(tabdef)
+ inputs = [u'four',u'five',u'six']
+ fldId=3
+ for inParam in inputs:
+ fldId+=1
+ try:
+ crsr.execute("INSERT INTO tblTemp (fldId,fldData) VALUES (:Id,:f_Val)", {"f_Val":inParam,'Id':fldId})
+ except:
+ conn.printADOerrors()
+ raise
+ crsr.execute("SELECT fldData FROM tblTemp WHERE :Id=fldID", {'Id':fldId})
+ rec = crsr.fetchone()
+ assert rec[0]==inParam, 'returned value:"%s" != test value:"%s"'%(rec[0],inParam)
+ crsr.execute("insert into tblTemp (fldId,fldData) VALUES (:xyz,'six:five')",{'xyz':30})
+ crsr.execute("SELECT fldData FROM tblTemp WHERE fldID=30")
+ rec = crsr.fetchone()
+ assert rec[0]=='six:five'
+
class TestADOwithSQLServer(CommonDBTests):
def setUp(self):
***************
*** 444,466 ****
# variantConversions is a dictionary of convertion functions
# held internally in adodbapi
-
- # By default decimal and numbers are returned as decimals.
- # Instead, make them return as floats
! oldconverter = adodbapi.variantConversions[adodbapi.adNumeric] #keep old function to restore later
! adodbapi.variantConversions[adodbapi.adNumeric] = adodbapi.cvtFloat
self.helpTestDataType("decimal(18,2)",'NUMBER',3.45,compareAlmostEqual=1)
self.helpTestDataType("numeric(18,2)",'NUMBER',3.45,compareAlmostEqual=1)
# now return strings
! adodbapi.variantConversions[adodbapi.adNumeric] = adodbapi.cvtString
self.helpTestDataType("numeric(18,2)",'NUMBER','3.45')
# now a completly weird user defined convertion
! adodbapi.variantConversions[adodbapi.adNumeric] = lambda x: u'!!This function returns a funny unicode string %s!!'%x
self.helpTestDataType("numeric(18,2)",'NUMBER','3.45',
allowedReturnValues=[u'!!This function returns a funny unicode string 3.45!!'])
# now reset the converter to its original function
! adodbapi.variantConversions[adodbapi.adNumeric]=oldconverter #Restore the original convertion function
self.helpTestDataType("numeric(18,2)",'NUMBER',decimal.Decimal('3.45'))
--- 513,535 ----
# variantConversions is a dictionary of convertion functions
# held internally in adodbapi
! oldconverter = adodbapi.variantConversions[ado_consts.adNumeric] #keep old function to restore later
!
! # By default decimal and "numbers" are returned as decimals.
! # Instead, make numbers return as floats
! adodbapi.variantConversions[ado_consts.adNumeric] = adodbapi.cvtFloat
self.helpTestDataType("decimal(18,2)",'NUMBER',3.45,compareAlmostEqual=1)
self.helpTestDataType("numeric(18,2)",'NUMBER',3.45,compareAlmostEqual=1)
# now return strings
! adodbapi.variantConversions[ado_consts.adNumeric] = adodbapi.cvtString
self.helpTestDataType("numeric(18,2)",'NUMBER','3.45')
# now a completly weird user defined convertion
! adodbapi.variantConversions[ado_consts.adNumeric] = lambda x: u'!!This function returns a funny unicode string %s!!'%x
self.helpTestDataType("numeric(18,2)",'NUMBER','3.45',
allowedReturnValues=[u'!!This function returns a funny unicode string 3.45!!'])
# now reset the converter to its original function
! adodbapi.variantConversions[ado_consts.adNumeric]=oldconverter #Restore the original convertion function
self.helpTestDataType("numeric(18,2)",'NUMBER',decimal.Decimal('3.45'))
***************
*** 484,493 ****
retvalues=crsr.callproc('sp_DeleteMeOnlyForTesting',('Dodsworth','Anne',' '))
! assert retvalues[0]=='Dodsworth'
! assert retvalues[1]=='Anne'
! assert retvalues[2]=='DodsworthAnne'
self.conn.rollback()
!
!
def testMultipleSetReturn(self):
crsr=self.getCursor()
--- 553,561 ----
retvalues=crsr.callproc('sp_DeleteMeOnlyForTesting',('Dodsworth','Anne',' '))
! assert retvalues[0]=='Dodsworth', '%s is not "Dodsworth"'%repr(retvalues[0])
! assert retvalues[1]=='Anne','%s is not "Anne"'%repr(retvalues[1])
! assert retvalues[2]=='DodsworthAnne','%s is not "DodsworthAnne"'%repr(retvalues[2])
self.conn.rollback()
!
def testMultipleSetReturn(self):
crsr=self.getCursor()
***************
*** 586,590 ****
c=adodbapi.connect(adodbapitestconfig.connStrMySql)
assert c != None
!
class TimeConverterInterfaceTest(unittest.TestCase):
def testIDate(self):
--- 654,681 ----
c=adodbapi.connect(adodbapitestconfig.connStrMySql)
assert c != None
!
! class TestADOwithPostgres(CommonDBTests):
! def setUp(self):
! self.conn = adodbapi.connect(adodbapitestconfig.connStrPostgres)
! self.engine = 'PostgreSQL'
!
! def tearDown(self):
! try:
! self.conn.rollback()
! except:
! pass
! try:
! self.conn.close()
! except:
! pass
! self.conn=None
!
! def getConnection(self):
! return self.conn
!
! def testOkConnect(self):
! c=adodbapi.connect(adodbapitestconfig.connStrPostgres)
! assert c != None
!
class TimeConverterInterfaceTest(unittest.TestCase):
def testIDate(self):
***************
*** 738,742 ****
if adodbapitestconfig.doMySqlTest:
suites.append( unittest.makeSuite(TestADOwithMySql,'test'))
!
suite=unittest.TestSuite(suites)
if __name__ == '__main__':
--- 829,835 ----
if adodbapitestconfig.doMySqlTest:
suites.append( unittest.makeSuite(TestADOwithMySql,'test'))
! if adodbapitestconfig.doPostgresTest:
! suites.append( unittest.makeSuite(TestADOwithPostgres,'test'))
!
suite=unittest.TestSuite(suites)
if __name__ == '__main__':
***************
*** 756,758 ****
print adodbapi.dateconverter
unittest.TextTestRunner().run(suite)
-
\ No newline at end of file
--- 849,850 ----
Index: RunTests.bat
===================================================================
RCS file: /cvsroot/pywin32/pywin32/adodbapi/tests/RunTests.bat,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** RunTests.bat 6 Feb 2009 03:35:11 -0000 1.3
--- RunTests.bat 3 May 2010 05:40:33 -0000 1.4
***************
*** 1,2 ****
--- 1,5 ----
+ if "%1"=="" goto skip_arg
+ set PYTHON=%1
+ :skip_arg
if not "%PYTHON%"=="" goto skip_python
set PYTHON=python
Index: adodbapitestconfig.py
===================================================================
RCS file: /cvsroot/pywin32/pywin32/adodbapi/tests/adodbapitestconfig.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** adodbapitestconfig.py 14 Feb 2009 15:13:52 -0000 1.8
--- adodbapitestconfig.py 3 May 2010 05:40:34 -0000 1.9
***************
*** 1,4 ****
# Configure this in order to run the testcases.
! "adodbapitestconfig.py v 2.2.6"
import os
--- 1,4 ----
# Configure this in order to run the testcases.
! "adodbapitestconfig.py v 2.3.0"
import os
***************
*** 20,26 ****
print __doc__
! doAccessTest = True
! doSqlServerTest = True
! doMySqlTest = True
try: #If mx extensions are installed, use mxDateTime
--- 20,28 ----
print __doc__
! doAllTests = True
! doAccessTest = True or doAllTests
! doSqlServerTest = False or doAllTests
! doMySqlTest = False or doAllTests
! doPostgresTest = False # or doAllTests
try: #If mx extensions are installed, use mxDateTime
***************
*** 31,39 ****
doDateTimeTest=True #Requires Python 2.3 Alpha2
! iterateOverTimeTests=True
if doAccessTest:
! _accessdatasource = None #set to None for automatic creation
! #r"C:\Program Files\Microsoft Office\Office\Samples\northwind.mdb;"
if _accessdatasource == None:
# following setup code borrowed from pywin32 odbc test suite
--- 33,42 ----
doDateTimeTest=True #Requires Python 2.3 Alpha2
! iterateOverTimeTests = False or doAllTests
if doAccessTest:
! _accessdatasource = "test.mdb" #set to None for automatic creation
! if not os.access(_accessdatasource,os.F_OK):
! _accessdatasource = None
if _accessdatasource == None:
# following setup code borrowed from pywin32 odbc test suite
***************
*** 47,51 ****
except ImportError: #perhaps we are running IronPython
win32 = False
! if not win32:
from System import Activator, Type
_accessdatasource = os.path.join(tempfile.gettempdir(), "test_odbc.mdb")
--- 50,54 ----
except ImportError: #perhaps we are running IronPython
win32 = False
! if not win32: #iron Python
from System import Activator, Type
_accessdatasource = os.path.join(tempfile.gettempdir(), "test_odbc.mdb")
***************
*** 94,98 ****
if doMySqlTest:
! _computername='192.168.1.1'
_databasename='test'
_username = 'Test'
--- 97,105 ----
if doMySqlTest:
! import socket
! try:
! _computername = socket.gethostbyname('kf7xm.ham-radio-op.net')
! except:
! _computername = '127.0.0.1'
_databasename='test'
_username = 'Test'
***************
*** 108,109 ****
--- 115,136 ----
print inst.args[0] # should be the error message
doMySqlTest = False
+
+ if doPostgresTest:
+ import socket
+ try:
+ _computername = socket.gethostbyname('kf7xm.ham-radio-op.net')
+ except:
+ _computername = '127.0.0.1'
+ _databasename='test'
+ _username = 'Test'
+ _password = '12345678'
+ _driver="PostgreSQL Unicode"
+ connStrPostgres = 'Driver={%s};Server=%s;Database=%s;user=%s;password=%s;' % \
+ (_driver,_computername,_databasename,_username,_password)
+ print ' ...Testing PostgreSQL login...'
+ try:
+ s = adodbapi.connect(connStrPostgres) #connect to server
+ s.close()
+ except adodbapi.DatabaseError, inst:
+ print inst.args[0] # should be the error message
+ doPostgresTest = False
|