Added test cases for recent ODPI-C bug fixes.
This commit is contained in:
parent
58757cadb7
commit
54dcf8642b
|
@ -320,6 +320,15 @@ class TestNumberVar(BaseTestCase):
|
||||||
self.assertEqual(result, 148)
|
self.assertEqual(result, 148)
|
||||||
self.assertTrue(isinstance(result, int), "integer not returned")
|
self.assertTrue(isinstance(result, int), "integer not returned")
|
||||||
|
|
||||||
|
def testBoundaryNumbers(self):
|
||||||
|
"test that boundary numbers are handled properly"
|
||||||
|
inValues = [float('inf'), 0.0, float('-inf'), 1e126, -1e126]
|
||||||
|
outValues = [10**126, 0, -10**126, 10**126, -10**126]
|
||||||
|
for inValue, outValue in zip(inValues, outValues):
|
||||||
|
self.cursor.execute("select :1 from dual", (inValue,))
|
||||||
|
result, = self.cursor.fetchone()
|
||||||
|
self.assertEqual(result, outValue)
|
||||||
|
|
||||||
def testReturnFloatFromDivision(self):
|
def testReturnFloatFromDivision(self):
|
||||||
"test that fetching the result of division returns a float"
|
"test that fetching the result of division returns a float"
|
||||||
self.cursor.execute("""
|
self.cursor.execute("""
|
||||||
|
|
|
@ -16,19 +16,20 @@ import decimal
|
||||||
class TestObjectVar(BaseTestCase):
|
class TestObjectVar(BaseTestCase):
|
||||||
|
|
||||||
def __GetObjectAsTuple(self, obj):
|
def __GetObjectAsTuple(self, obj):
|
||||||
|
if obj.type.iscollection:
|
||||||
|
value = []
|
||||||
|
for v in obj.aslist():
|
||||||
|
if isinstance(v, cx_Oracle.Object):
|
||||||
|
v = self.__GetObjectAsTuple(v)
|
||||||
|
elif isinstance(value, cx_Oracle.LOB):
|
||||||
|
v = v.read()
|
||||||
|
value.append(v)
|
||||||
|
return value
|
||||||
attributeValues = []
|
attributeValues = []
|
||||||
for attribute in obj.type.attributes:
|
for attribute in obj.type.attributes:
|
||||||
value = getattr(obj, attribute.name)
|
value = getattr(obj, attribute.name)
|
||||||
if isinstance(value, cx_Oracle.Object):
|
if isinstance(value, cx_Oracle.Object):
|
||||||
if not value.type.iscollection:
|
value = self.__GetObjectAsTuple(value)
|
||||||
value = self.__GetObjectAsTuple(value)
|
|
||||||
else:
|
|
||||||
subValue = []
|
|
||||||
for v in value.aslist():
|
|
||||||
if isinstance(v, cx_Oracle.Object):
|
|
||||||
v = self.__GetObjectAsTuple(v)
|
|
||||||
subValue.append(v)
|
|
||||||
value = subValue
|
|
||||||
elif isinstance(value, cx_Oracle.LOB):
|
elif isinstance(value, cx_Oracle.LOB):
|
||||||
value = value.read()
|
value = value.read()
|
||||||
attributeValues.append(value)
|
attributeValues.append(value)
|
||||||
|
@ -247,6 +248,35 @@ class TestObjectVar(BaseTestCase):
|
||||||
self.assertRaises(cx_Oracle.DatabaseError, collectionObj.append,
|
self.assertRaises(cx_Oracle.DatabaseError, collectionObj.append,
|
||||||
arrayObj)
|
arrayObj)
|
||||||
|
|
||||||
|
def testReferencingSubObj(self):
|
||||||
|
"test that referencing a sub object affects the parent object"
|
||||||
|
objType = self.connection.gettype("UDT_OBJECT")
|
||||||
|
subObjType = self.connection.gettype("UDT_SUBOBJECT")
|
||||||
|
obj = objType.newobject()
|
||||||
|
obj.SUBOBJECTVALUE = subObjType.newobject()
|
||||||
|
obj.SUBOBJECTVALUE.SUBNUMBERVALUE = 5
|
||||||
|
obj.SUBOBJECTVALUE.SUBSTRINGVALUE = "Substring"
|
||||||
|
self.assertEqual(obj.SUBOBJECTVALUE.SUBNUMBERVALUE, 5)
|
||||||
|
self.assertEqual(obj.SUBOBJECTVALUE.SUBSTRINGVALUE, "Substring")
|
||||||
|
|
||||||
|
def testAccessSubObjectParentObjectDestroyed(self):
|
||||||
|
"test that accessing sub object after parent object destroyed works"
|
||||||
|
objType = self.connection.gettype("UDT_OBJECT")
|
||||||
|
subObjType = self.connection.gettype("UDT_SUBOBJECT")
|
||||||
|
arrayType = self.connection.gettype("UDT_OBJECTARRAY")
|
||||||
|
subObj1 = subObjType.newobject()
|
||||||
|
subObj1.SUBNUMBERVALUE = 2
|
||||||
|
subObj1.SUBSTRINGVALUE = "AB"
|
||||||
|
subObj2 = subObjType.newobject()
|
||||||
|
subObj2.SUBNUMBERVALUE = 3
|
||||||
|
subObj2.SUBSTRINGVALUE = "CDE"
|
||||||
|
obj = objType.newobject()
|
||||||
|
obj.SUBOBJECTARRAY = arrayType.newobject([subObj1, subObj2])
|
||||||
|
subObjArray = obj.SUBOBJECTARRAY
|
||||||
|
del obj
|
||||||
|
self.assertEqual(self.__GetObjectAsTuple(subObjArray),
|
||||||
|
[(2, "AB"), (3, "CDE")])
|
||||||
|
|
||||||
def testSettingAttrWrongObjectType(self):
|
def testSettingAttrWrongObjectType(self):
|
||||||
"test assigning an object of the wrong type to an object attribute"
|
"test assigning an object of the wrong type to an object attribute"
|
||||||
objType = self.connection.gettype("UDT_OBJECT")
|
objType = self.connection.gettype("UDT_OBJECT")
|
||||||
|
|
Loading…
Reference in New Issue