From: <lo...@us...> - 2003-07-31 06:03:34
|
Update of /cvsroot/fnorb/fnorb/tests/datatransfer In directory sc8-pr-cvs1:/tmp/cvs-serv3117/tests/datatransfer Modified Files: DataTransferServer.py alltests.py datatransfer.idl Added Files: valuetest.py Log Message: Initial implementation of valuetypes. --- NEW FILE: valuetest.py --- #!/usr/bin/env python import unittest import datatransfer, datatransfer_skel from orbrunner import ORBRunner # # The test case for valuetype transmission. # class ValueTest(unittest.TestCase): def __init__(self, func, orb_runner): unittest.TestCase.__init__(self, func) self.orb_runner = orb_runner; # # Create the implementation of the value type test interface and # register it with the ORB. # def setUp(self): orb = self.orb_runner.getORB() stringified_ior = open('value.ref', 'r').read() self.obj = orb.string_to_object(stringified_ior) def tearDown(self): # Do nothing for the time being pass def compare_value(self, v1, v2, seen1, seen2): # Both might be None if v1 is None and v2 is None: return # Otherwise, neither must be None self.failIf(v1 is None) self.failIf(v2 is None) # They must be different objects, recursively self.failIf(v1 is v2) # If one is cyclic, the other must be cyclic as well for i in range(len(seen1)): if v1 is seen1[i]: self.failUnless(v2 is seen2[i]) return seen1.append(v1) seen2.append(v2) # They must be instances of the same class self.assertEqual(v1.__class__, v2.__class__) # The substructures must be equal, recursively self.compare_value(v1.left, v2.left, seen1[:], seen2[:]) self.compare_value(v1.right, v2.right, seen1[:], seen2[:]) # The additional fields must be equal, if present if isinstance(v1, datatransfer.Leaf): self.assertEqual(v1.x, v2.x) self.assertEqual(v1.x, v2.x) # # Perform the valuetype interface tests. # def test_simple(self): v1 = datatransfer.Node() v1.left = v1.right = None self.compare_value(v1, self.obj.valuetype_in(v1), [], []) self.compare_value(v1, self.obj.valuetype_out(v1), [], []) v2_ret, v2_out = self.obj.valuetype_inout(v1, v1) self.failUnless(v2_ret is v2_out) self.compare_value(v1, v2_ret, [], []) def test_box_nonnull(self): v1 = "Hello" self.assertEqual(v1, self.obj.valuebox_in(v1)) self.assertEqual(v1, self.obj.valuebox_out(v1)) v2_ret, v2_out = self.obj.valuebox_inout(v1, v1) self.failUnless(v2_ret is v2_out) self.assertEqual(v1, v2_ret) def test_box_null(self): v1 = None self.assertEqual(v1, self.obj.valuebox_in(v1)) self.assertEqual(v1, self.obj.valuebox_out(v1)) v2_ret, v2_out = self.obj.valuebox_inout(v1, v1) self.failUnless(v2_ret is v2_out) self.assertEqual(v1, v2_ret) def test_inheritance(self): v1 = datatransfer.Leaf() v1.left = v1.right = None v1.x = 10 v1.y = 7 self.compare_value(v1, self.obj.valuetype_in(v1), [], []) self.compare_value(v1, self.obj.valuetype_out(v1), [], []) v2_ret, v2_out = self.obj.valuetype_inout(v1, v1) self.failUnless(v2_ret is v2_out) self.compare_value(v1, v2_ret, [], []) def test_nesting(self): a = datatransfer.Leaf() a.left = a.right = None a.x = 10 a.y = 7 b = datatransfer.Leaf() b.left = b.right = None b.x = 10 b.y = 7 v1 = datatransfer.Node() v1.left = a v1.right = b self.compare_value(v1, self.obj.valuetype_in(v1), [], []) self.compare_value(v1, self.obj.valuetype_out(v1), [], []) v2_ret, v2_out = self.obj.valuetype_inout(v1, v1) self.failUnless(v2_ret is v2_out) self.compare_value(v1, v2_ret, [], []) def test_recursion(self): a = datatransfer.Leaf() a.left = a.right = None a.x = 10 a.y = 7 b = datatransfer.Leaf() b.left = b.right = None b.x = 10 b.y = 7 v1 = datatransfer.Node() v1.left = a v1.right = b a.left = v1 self.compare_value(v1, self.obj.valuetype_in(v1), [], []) self.compare_value(v1, self.obj.valuetype_out(v1), [], []) v2_ret, v2_out = self.obj.valuetype_inout(v1, v1) self.failUnless(v2_ret is v2_out) self.compare_value(v1, v2_ret, [], []) # # Create a testsuite for testing valuetype type transmission. This is # meant to be used by other modules wanting to incorporate these # tests. # def build_test_suite(orb_runner): suite = unittest.TestSuite() for name in unittest.getTestCaseNames(ValueTest, 'test'): suite.addTest(ValueTest(name, orb_runner)) return suite # # Run the tests with an ORB. This is meant to be used when this module # is executed as a stand-alone program. # def run_tests(): orb_runner = ORBRunner() test_suite = build_test_suite(orb_runner) test_runner = unittest.TextTestRunner() test_runner.run(test_suite) # # If this module was loaded as a program, then run the tests. # if __name__ == "__main__": run_tests() Index: DataTransferServer.py =================================================================== RCS file: /cvsroot/fnorb/fnorb/tests/datatransfer/DataTransferServer.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** DataTransferServer.py 26 Feb 2003 11:00:04 -0000 1.3 --- DataTransferServer.py 31 Jul 2003 06:03:28 -0000 1.4 *************** *** 120,123 **** --- 120,148 ---- return (vinout, vin) + # + # A server object that implements the valuetype transfer testing + # interface + # + class ValueImpl(datatransfer_skel.ValueType_skel): + """ Implementation of the 'ValueType' interface. """ + + def valuetype_in(self, v): + return v + + def valuetype_out(self, vin): + return vin + + def valuetype_inout(self, vin, vinout): + return (vinout, vin) + + def valuebox_in(self, v): + return v + + def valuebox_out(self, vin): + return vin + + def valuebox_inout(self, vin, vinout): + return (vinout, vin) + def run(): # Initialise the ORB. *************** *** 209,212 **** --- 234,249 ---- ref_file = open('fixed.ref', 'w') ref_file.write(orb.object_to_string(fixed_obj)) + ref_file.close() + + # + # Create a valuetype test object + # + + value_obj = boa.create('value', ValueImpl._FNORB_ID) + impl = ValueImpl() + boa.obj_is_ready(value_obj, impl) + + ref_file = open('value.ref', 'w') + ref_file.write(orb.object_to_string(value_obj)) ref_file.close() Index: alltests.py =================================================================== RCS file: /cvsroot/fnorb/fnorb/tests/datatransfer/alltests.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** alltests.py 26 Feb 2003 11:00:04 -0000 1.3 --- alltests.py 31 Jul 2003 06:03:28 -0000 1.4 *************** *** 14,17 **** --- 14,18 ---- import seqtest import fixedtest + import valuetest from orbrunner import ORBRunner *************** *** 33,37 **** for module in (shorttest, longtest, chartest, wchartest, ! wstringtest, seqtest, fixedtest): new_test_suite = module.build_test_suite(self.orb_runner) test_suite.addTest(new_test_suite) --- 34,38 ---- for module in (shorttest, longtest, chartest, wchartest, ! wstringtest, seqtest, fixedtest, valuetest): new_test_suite = module.build_test_suite(self.orb_runner) test_suite.addTest(new_test_suite) Index: datatransfer.idl =================================================================== RCS file: /cvsroot/fnorb/fnorb/tests/datatransfer/datatransfer.idl,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** datatransfer.idl 26 Feb 2003 11:00:04 -0000 1.3 --- datatransfer.idl 31 Jul 2003 06:03:28 -0000 1.4 *************** *** 5,8 **** --- 5,10 ---- // + module datatransfer{ + // // Interface for testing the "short" type. *************** *** 61,62 **** --- 63,86 ---- FixedType fixedInOut(in FixedType vin, inout FixedType vinout); }; + + valuetype Node{ + public Node left, right; + }; + + valuetype StringValue string; + + valuetype Leaf:Node{ + public long x; + public long y; + }; + + interface ValueType{ + Node valuetype_in(in Node data); + StringValue valuebox_in(in StringValue x); + void valuetype_out(in Node vin, out Node vout); + void valuebox_out(in StringValue vin, out StringValue vout); + Node valuetype_inout(in Node vin, inout Node vout); + StringValue valuebox_inout(in StringValue vin, inout StringValue vout); + }; + + }; //module datatransfer |