summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2009-08-24 22:47:04 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-08-24 22:47:04 -0300
commitc2fdf775230ea9b0d9a6b1af209cd0a99e2a848e (patch)
tree882e264cf942c2c9512d482d076ab530a36815b9
parent7d069eda6d0df0ca6976612af2077a85b3ab3fea (diff)
added unit tests for stl::pair and stl::list conversions on libsample
-rw-r--r--tests/libsample/listuser.h6
-rw-r--r--tests/libsample/pairuser.h6
-rwxr-xr-xtests/samplebinding/list_test.py74
-rwxr-xr-xtests/samplebinding/pair_test.py76
-rwxr-xr-xtests/samplebinding/sample_test.py13
5 files changed, 169 insertions, 6 deletions
diff --git a/tests/libsample/listuser.h b/tests/libsample/listuser.h
index c1ea7091..f2bfe13b 100644
--- a/tests/libsample/listuser.h
+++ b/tests/libsample/listuser.h
@@ -17,6 +17,12 @@ public:
double sumList(std::list<int> vallist);
double sumList(std::list<double> vallist);
+
+ void setList(std::list<int> lst) { m_lst = lst; }
+ std::list<int> getList() { return m_lst; }
+
+private:
+ std::list<int> m_lst;
};
#endif // LISTUSER_H
diff --git a/tests/libsample/pairuser.h b/tests/libsample/pairuser.h
index 27cf7668..109d7218 100644
--- a/tests/libsample/pairuser.h
+++ b/tests/libsample/pairuser.h
@@ -14,6 +14,12 @@ public:
std::pair<int, int> callCreatePair();
static std::pair<Complex, Complex> createComplexPair(Complex cpx0, Complex cpx1);
double sumPair(std::pair<int, double> pair);
+
+ void setPair(std::pair<int, int> pair) { m_pair = pair; }
+ std::pair<int, int> getPair() { return m_pair; }
+
+private:
+ std::pair<int, int> m_pair;
};
#endif // PAIRUSER_H
diff --git a/tests/samplebinding/list_test.py b/tests/samplebinding/list_test.py
new file mode 100755
index 00000000..e3d5edad
--- /dev/null
+++ b/tests/samplebinding/list_test.py
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+
+'''Test cases for std::list container conversions'''
+
+import sys
+import unittest
+
+from sample import ListUser
+
+class ExtendedListUser(ListUser):
+ def __init__(self):
+ ListUser.__init__(self)
+ self.create_list_called = False
+
+ def createList(self):
+ self.create_list_called = True
+ return [2, 3, 5, 7, 13]
+
+class ListConversionTest(unittest.TestCase):
+ '''Test case for std::list container conversions'''
+
+ def testReimplementedVirtualMethodCall(self):
+ '''Test if a Python override of a virtual method is correctly called from C++.'''
+ lu = ExtendedListUser()
+ lst = lu.callCreateList()
+ self.assert_(lu.create_list_called)
+ self.assertEqual(type(lst), list)
+ for item in lst:
+ self.assertEqual(type(item), int)
+
+ def testPrimitiveConversionInsideContainer(self):
+ '''Test primitive type conversion inside conversible std::list container.'''
+ cpx0 = complex(1.2, 3.4)
+ cpx1 = complex(5.6, 7.8)
+ lst = ListUser.createComplexList(cpx0, cpx1)
+ self.assertEqual(type(lst), list)
+ for item in lst:
+ self.assertEqual(type(item), complex)
+ self.assertEqual(lst, [cpx0, cpx1])
+
+ def testSumListIntegers(self):
+ '''Test method that sums a list of integer values.'''
+ lu = ListUser()
+ lst = [3, 5, 7]
+ result = lu.sumList(lst)
+ self.assertEqual(result, sum(lst))
+
+ def testSumListFloats(self):
+ '''Test method that sums a list of float values.'''
+ lu = ListUser()
+ lst = [3.3, 4.4, 5.5]
+ result = lu.sumList(lst)
+ self.assertEqual(result, sum(lst))
+
+ def testConversionInBothDirections(self):
+ '''Test converting a list from Python to C++ and back again.'''
+ lu = ListUser()
+ lst = [3, 5, 7]
+ lu.setList(lst)
+ result = lu.getList()
+ self.assertEqual(result, lst)
+
+ def testConversionInBothDirectionsWithSimilarContainer(self):
+ '''Test converting a tuple, instead of the expected list, from Python to C++ and back again.'''
+ lu = ListUser()
+ lst = (3, 5, 7)
+ lu.setList(lst)
+ result = lu.getList()
+ self.assertNotEqual(result, lst)
+ self.assertEqual(result, list(lst))
+
+if __name__ == '__main__':
+ unittest.main()
+
diff --git a/tests/samplebinding/pair_test.py b/tests/samplebinding/pair_test.py
new file mode 100755
index 00000000..212fabfc
--- /dev/null
+++ b/tests/samplebinding/pair_test.py
@@ -0,0 +1,76 @@
+#!/usr/bin/python
+
+'''Test cases for std::pair container conversions'''
+
+import sys
+import unittest
+
+from sample import PairUser
+
+class ExtendedPairUser(PairUser):
+ def __init__(self):
+ PairUser.__init__(self)
+ self.create_pair_called = False
+
+ def createPair(self):
+ self.create_pair_called = True
+ return (7, 13)
+
+class PairConversionTest(unittest.TestCase):
+ '''Test case for std::pair container conversions'''
+
+ def testReimplementedVirtualMethodCall(self):
+ '''Test if a Python override of a virtual method is correctly called from C++.'''
+ pu = ExtendedPairUser()
+ pair = pu.callCreatePair()
+ self.assert_(pu.create_pair_called)
+ self.assertEqual(type(pair), tuple)
+ self.assertEqual(type(pair[0]), int)
+ self.assertEqual(type(pair[1]), int)
+ self.assertEqual(pair, (7, 13))
+
+ def testPrimitiveConversionInsideContainer(self):
+ '''Test primitive type conversion inside conversible std::pair container.'''
+ cpx0 = complex(1.2, 3.4)
+ cpx1 = complex(5.6, 7.8)
+ cp = PairUser.createComplexPair(cpx0, cpx1)
+ self.assertEqual(type(cp), tuple)
+ self.assertEqual(type(cp[0]), complex)
+ self.assertEqual(type(cp[1]), complex)
+ self.assertEqual(cp, (cpx0, cpx1))
+
+ def testSumPair(self):
+ '''Test method that sums the items of a pair using values of the types expected by C++ (int and double)'''
+ pu = PairUser()
+ pair = (3, 7.13)
+ result = pu.sumPair(pair)
+ self.assertEqual(result, sum(pair))
+
+ def testSumPairDifferentTypes(self):
+ '''Test method that sums the items of a pair using values of types different from the ones expected by C++ (int and double)'''
+ pu = PairUser()
+ pair = (3.3, 7)
+ result = pu.sumPair(pair)
+ self.assertNotEqual(result, sum(pair))
+ self.assertEqual(result, int(pair[0]) + pair[1])
+
+ def testConversionInBothDirections(self):
+ '''Test converting a pair from Python to C++ and the other way around.'''
+ pu = PairUser()
+ pair = (3, 5)
+ pu.setPair(pair)
+ result = pu.getPair()
+ self.assertEqual(result, pair)
+
+ def testConversionInBothDirectionsWithSimilarContainer(self):
+ '''Test converting a list, instead of the expected tuple, from Python to C++ and the other way around.'''
+ pu = PairUser()
+ pair = [3, 5]
+ pu.setPair(pair)
+ result = pu.getPair()
+ self.assertNotEqual(result, pair)
+ self.assertEqual(result, list(pair))
+
+if __name__ == '__main__':
+ unittest.main()
+
diff --git a/tests/samplebinding/sample_test.py b/tests/samplebinding/sample_test.py
index 9de201a2..1f7571a1 100755
--- a/tests/samplebinding/sample_test.py
+++ b/tests/samplebinding/sample_test.py
@@ -12,13 +12,14 @@ class ModuleTest(unittest.TestCase):
def testModuleMembers(self):
'''Test availability of classes, global functions and other members on binding'''
- expected_members = set(['Abstract', 'Derived', 'ListUser', 'PairUser',
- 'Point', 'gimmeComplexList', 'gimmeDouble',
- 'gimmeInt', 'makeCString', 'multiplyPair',
- 'returnCString', 'transmuteComplexIntoPoint',
+ expected_members = set(['Abstract', 'Derived', 'Point',
+ 'ListUser', 'PairUser', 'MapUser',
+ 'gimmeComplexList', 'gimmeDouble', 'gimmeInt',
+ 'makeCString', 'multiplyPair', 'returnCString',
+ 'SampleNamespace', 'transmuteComplexIntoPoint',
'transmutePointIntoComplex', 'sumComplexPair',
- 'SampleNamespace', 'GlobalEnum', 'NoThing',
- 'FirstThing', 'SecondThing', 'ThirdThing'])
+ 'FirstThing', 'SecondThing', 'ThirdThing',
+ 'GlobalEnum', 'NoThing'])
self.assert_(expected_members.issubset(dir(sample)))
def testAbstractPrintFormatEnum(self):