diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2011-05-28 12:24:40 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:15:25 -0300 |
commit | 3112b255beedf6cd4ac56ad08e9a90d011620d04 (patch) | |
tree | 4fe5f98617be71a34829e629d384c7cf21a72c34 | |
parent | 6dd350021b30739dec375ec90e040d6e2ec63c11 (diff) |
Expanded the minimal example and tests to better deal with virtual methods.
-rw-r--r-- | tests/libminimal/obj.h | 7 | ||||
-rw-r--r-- | tests/libminimal/val.h | 12 | ||||
-rw-r--r-- | tests/minimalbinding/obj_test.py | 49 | ||||
-rw-r--r-- | tests/minimalbinding/val_test.py | 66 |
4 files changed, 129 insertions, 5 deletions
diff --git a/tests/libminimal/obj.h b/tests/libminimal/obj.h index 384d8e74b..ce3c02064 100644 --- a/tests/libminimal/obj.h +++ b/tests/libminimal/obj.h @@ -36,6 +36,13 @@ public: virtual bool virtualMethod(int val); bool callVirtualMethod(int val) { return virtualMethod(val); } + + virtual Obj* passObjectType(Obj* obj) { return obj; } + Obj* callPassObjectType(Obj* obj) { return passObjectType(obj); } + + virtual Obj* passObjectTypeReference(Obj& obj) { return &obj; } + Obj* callPassObjectTypeReference(Obj& obj) { return passObjectTypeReference(obj); } + private: Obj(const Obj&); Obj& operator=(const Obj&); diff --git a/tests/libminimal/val.h b/tests/libminimal/val.h index 3cdf64c4b..35dc69670 100644 --- a/tests/libminimal/val.h +++ b/tests/libminimal/val.h @@ -29,8 +29,20 @@ class LIBMINIMAL_API Val { public: explicit Val(int valId) : m_valId(valId) {} + virtual ~Val() {} + int valId() { return m_valId; } void setValId(int valId) { m_valId = valId; } + + virtual Val passValueType(Val val) { return val; } + Val callPassValueType(Val val) { return passValueType(val); } + + virtual Val* passValueTypePointer(Val* val) { return val; } + Val* callPassValueTypePointer(Val* val) { return passValueTypePointer(val); } + + virtual Val* passValueTypeReference(Val& val) { return &val; } + Val* callPassValueTypeReference(Val& val) { return passValueTypeReference(val); } + private: int m_valId; }; diff --git a/tests/minimalbinding/obj_test.py b/tests/minimalbinding/obj_test.py index 20b12aa03..a788c9833 100644 --- a/tests/minimalbinding/obj_test.py +++ b/tests/minimalbinding/obj_test.py @@ -36,6 +36,14 @@ class ExtObj(Obj): self.virtual_method_called = True return not Obj.virtualMethod(self, val) + def passObjectType(self, obj): + obj.setObjId(obj.objId() + 1) + return obj + + def passObjectTypeReference(self, obj): + obj.setObjId(obj.objId() + 1) + return obj + class ObjTest(unittest.TestCase): @@ -44,22 +52,53 @@ class ObjTest(unittest.TestCase): obj = Obj(objId) self.assertEqual(obj.objId(), objId) - def testVirtualMethod(self): - obj = Obj(0) - even_number = 8 - self.assertEqual(obj.virtualMethod(even_number), obj.callVirtualMethod(even_number)) - def testNormalMethodFromExtendedClass(self): objId = 123 obj = ExtObj(objId) self.assertEqual(obj.objId(), objId) + def testVirtualMethod(self): + obj = Obj(0) + even_number = 8 + self.assertEqual(obj.virtualMethod(even_number), obj.callVirtualMethod(even_number)) + def testVirtualMethodFromExtendedClass(self): obj = ExtObj(0) even_number = 8 self.assertEqual(obj.virtualMethod(even_number), obj.callVirtualMethod(even_number)) self.assert_(obj.virtual_method_called) + def testPassObjectType(self): + obj = Obj(0) + self.assertEqual(obj, obj.passObjectType(obj)) + self.assertEqual(obj, obj.callPassObjectType(obj)) + + def testPassObjectTypeReference(self): + obj = Obj(0) + self.assertEqual(obj, obj.passObjectTypeReference(obj)) + self.assertEqual(obj, obj.callPassObjectTypeReference(obj)) + + def testPassObjectTypeFromExtendedClass(self): + obj = ExtObj(0) + self.assertEqual(obj.objId(), 0) + sameObj = obj.passObjectType(obj) + self.assertEqual(obj, sameObj) + self.assertEqual(sameObj.objId(), 1) + sameObj = obj.callPassObjectType(obj) + self.assertEqual(obj, sameObj) + self.assertEqual(sameObj.objId(), 2) + + def testPassObjectTypeReferenceFromExtendedClass(self): + obj = ExtObj(0) + self.assertEqual(obj.objId(), 0) + sameObj = obj.passObjectTypeReference(obj) + self.assertEqual(obj, sameObj) + self.assertEqual(sameObj.objId(), 1) + sameObj = obj.callPassObjectTypeReference(obj) + self.assertEqual(obj, sameObj) + self.assertEqual(sameObj.objId(), 2) + + if __name__ == '__main__': unittest.main() diff --git a/tests/minimalbinding/val_test.py b/tests/minimalbinding/val_test.py index 71d658f8f..f39f42309 100644 --- a/tests/minimalbinding/val_test.py +++ b/tests/minimalbinding/val_test.py @@ -27,6 +27,23 @@ import unittest from minimal import Val + +class ExtVal(Val): + def __init__(self, valId): + Val.__init__(self, valId) + + def passValueType(self, val): + return ExtVal(val.valId() + 1) + + def passValueTypePointer(self, val): + val.setValId(val.valId() + 1) + return val + + def passValueTypeReference(self, val): + val.setValId(val.valId() + 1) + return val + + class ValTest(unittest.TestCase): def testNormalMethod(self): @@ -34,6 +51,55 @@ class ValTest(unittest.TestCase): val = Val(valId) self.assertEqual(val.valId(), valId) + def testPassValueType(self): + val = Val(123) + val1 = val.passValueType(val) + self.assertNotEqual(val, val1) + self.assertEqual(val1.valId(), 123) + val2 = val.callPassValueType(val) + self.assertNotEqual(val, val2) + self.assertEqual(val2.valId(), 123) + + def testPassValueTypePointer(self): + val = Val(0) + self.assertEqual(val, val.passValueTypePointer(val)) + self.assertEqual(val, val.callPassValueTypePointer(val)) + + def testPassValueTypeReference(self): + val = Val(0) + self.assertEqual(val, val.passValueTypeReference(val)) + self.assertEqual(val, val.callPassValueTypeReference(val)) + + def testPassValueTypeFromExtendedClass(self): + val = ExtVal(0) + val1 = val.passValueType(val) + self.assertNotEqual(val, val1) + self.assertEqual(val1.valId(), val.valId() + 1) + val2 = val.callPassValueType(val) + self.assertNotEqual(val, val2) + self.assertEqual(val2.valId(), val.valId() + 1) + + def testPassValueTypePointerFromExtendedClass(self): + val = ExtVal(0) + self.assertEqual(val.valId(), 0) + sameVal = val.passValueTypePointer(val) + self.assertEqual(val, sameVal) + self.assertEqual(sameVal.valId(), 1) + sameVal = val.callPassValueTypePointer(val) + self.assertEqual(val, sameVal) + self.assertEqual(sameVal.valId(), 2) + + def testPassValueTypeReferenceFromExtendedClass(self): + val = ExtVal(0) + self.assertEqual(val.valId(), 0) + sameVal = val.passValueTypeReference(val) + self.assertEqual(val, sameVal) + self.assertEqual(sameVal.valId(), 1) + sameVal = val.callPassValueTypeReference(val) + self.assertEqual(val, sameVal) + self.assertEqual(sameVal.valId(), 2) + + if __name__ == '__main__': unittest.main() |