diff options
author | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-04-27 15:19:14 +0000 |
---|---|---|
committer | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-04-27 15:19:14 +0000 |
commit | 07c5b6e839e23e72d6d107cc7ed979db412aa53d (patch) | |
tree | 3a6d503833a1217487f6e0c6ef9f59c08ae48e32 | |
parent | f434d868a3a58f7fb469e6d2d4f69aa01b1130d7 (diff) | |
download | qpid-python-07c5b6e839e23e72d6d107cc7ed979db412aa53d.tar.gz |
QPID-2556: fix conversion of signed integers in maps and lists.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@938506 13f79535-47bb-0310-9956-ffa450edef68
-rwxr-xr-x | qpid/cpp/bindings/qmf/tests/agent_ruby.rb | 24 | ||||
-rw-r--r-- | qpid/cpp/bindings/qmf/tests/python_agent.py | 26 | ||||
-rwxr-xr-x | qpid/cpp/bindings/qmf/tests/python_console.py | 17 | ||||
-rwxr-xr-x | qpid/cpp/bindings/qmf/tests/ruby_console_test.rb | 55 | ||||
-rw-r--r-- | qpid/cpp/src/qmf/engine/ValueImpl.cpp | 18 |
5 files changed, 71 insertions, 69 deletions
diff --git a/qpid/cpp/bindings/qmf/tests/agent_ruby.rb b/qpid/cpp/bindings/qmf/tests/agent_ruby.rb index 92065031a2..bdc81f5c41 100755 --- a/qpid/cpp/bindings/qmf/tests/agent_ruby.rb +++ b/qpid/cpp/bindings/qmf/tests/agent_ruby.rb @@ -134,17 +134,6 @@ class App < Qmf::AgentHandler @parent.int16val = 10000 @parent.int8val = 100 - @parent.mapval = {'u64' => @parent.uint64val, - 'u32' => @parent.uint32val, - 'u16' => @parent.uint16val, - 'u8' => @parent.uint8val, - 'i64' => @parent.int64val, - 'i32' => @parent.int32val, - 'i16' => @parent.int16val, - 'i8' => @parent.int8val, - 'sstr' => "Short String", - 'map' => {'first' => 'FIRST', 'second' => 'SECOND'}} - event = Qmf::QmfEvent.new(@model.event_class) event.uint32val = @parent.uint32val event.strval = "Unused" @@ -248,9 +237,18 @@ class App < Qmf::AgentHandler @parent.int8val = 0 # a list containing a list that contains a map (so there!) - @parent.listval = ['a', 1, 'b', 2, + @parent.listval = ['a', 1, 'b', -2, ['c', true, 3.1415, - {"hi" => 10, "lo" => 5}]] + {"hi" => 10, "lo" => 5, "neg" => -3}]] + + # a default map + @parent.mapval = {'aLong' => 9999999999, + 'aInt' => 54321, + 'aSigned' => -666, + 'aString' => "A String", + 'aFloat'=> 3.1415, + 'aMap' => {"first" => 1, "second" => 2}, + 'aList' => ['x', -1, 'y', 2]} @parent_oid = @agent.alloc_object_id(1) @parent.set_object_id(@parent_oid) diff --git a/qpid/cpp/bindings/qmf/tests/python_agent.py b/qpid/cpp/bindings/qmf/tests/python_agent.py index 4974e0ec90..1003ce875a 100644 --- a/qpid/cpp/bindings/qmf/tests/python_agent.py +++ b/qpid/cpp/bindings/qmf/tests/python_agent.py @@ -146,17 +146,6 @@ class App(qmf.AgentHandler): self._parent["int16val"] = 10000 self._parent.set_attr("int8val", 100) - self._parent.set_attr("mapval", {'u64' : self._parent['uint64val'], - 'u32' : self._parent['uint32val'], - 'u16' : self._parent['uint16val'], - 'u8' : self._parent['uint8val'], - 'i64' : self._parent['int64val'], - 'i32' : self._parent['int32val'], - 'i16' : self._parent['int16val'], - 'i8' : self._parent['int8val'], - 'sstr' : "Short String", - 'map' : {'first' : 'FIRST', 'second' : 'SECOND'}}) - event = qmf.QmfEvent(self._model.event_class) event.uint32val = self._parent.get_attr("uint32val") event.strval = "Unused" @@ -292,9 +281,20 @@ class App(qmf.AgentHandler): self._parent.set_attr("int8val", 0) # a list containing a list that contains a map (so there!) - self._parent.set_attr("listval", ['a', 1, 'b', 2, + self._parent.set_attr("listval", ['a', 1, 'b', -2, ['c', True, 3.1415, - {"hi": 10, "lo": 5}]]) + {"hi": 10, "lo": 5, "neg": -3}]]) + # a default map + self._parent.set_attr("mapval", {'aLong' : long(9999999999), + 'aInt' : int(54321), + 'aSigned' : -666, + 'aString' : "A String", + 'aFloat' : 3.1415, + 'aMap' : {'first' : 1, + 'second': 2}, + 'aList' : ['x', -1, 'y', 2]}) + + self._parent_oid = self._agent.alloc_object_id(1) self._parent.set_object_id(self._parent_oid) diff --git a/qpid/cpp/bindings/qmf/tests/python_console.py b/qpid/cpp/bindings/qmf/tests/python_console.py index 883aa8da1a..d8e75cc294 100755 --- a/qpid/cpp/bindings/qmf/tests/python_console.py +++ b/qpid/cpp/bindings/qmf/tests/python_console.py @@ -221,6 +221,23 @@ class QmfInteropTests(TestBase010): self.assertTrue(isinstance(parent.listval[4][3], dict)) self.assertEqual(parent.listval[4][3]["hi"], 10) self.assertEqual(parent.listval[4][3]["lo"], 5) + self.assertEqual(parent.listval[4][3]["neg"], -3) + + # see agent for structure of mapval + + self.assertTrue(isinstance(parent.mapval, dict)) + self.assertEqual(len(parent.mapval), 7) + self.assertEqual(parent.mapval['aLong'], 9999999999) + self.assertEqual(parent.mapval['aInt'], 54321) + self.assertEqual(parent.mapval['aSigned'], -666) + self.assertEqual(parent.mapval['aString'], "A String"), + self.assertEqual(parent.mapval['aFloat'], 3.1415), + self.assertTrue(isinstance(parent.mapval['aMap'], dict)) + self.assertEqual(len(parent.mapval['aMap']), 2) + self.assertEqual(parent.mapval['aMap']['second'], 2) + self.assertTrue(isinstance(parent.mapval['aList'], list)) + self.assertEqual(len(parent.mapval['aList']), 4) + self.assertEqual(parent.mapval['aList'][1], -1) def getProperty(self, msg, name): diff --git a/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb b/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb index 11be03fc34..0782ae795a 100755 --- a/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb +++ b/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb @@ -177,44 +177,6 @@ class ConsoleTest < ConsoleTestBase end end - def test_C_basic_types_map - parent = @qmfc.object(:class =>"parent") - assert(parent, "Number of parent objects") - - result = parent.set_numerics("big") - assert_equal(result.status, 0, "Method Response Status") - assert_equal(result.text, "OK", "Method Response Text") - - parent.update - - map = parent.mapval - - assert_equal(map['u64'], 0x9494949449494949) - assert_equal(map['u32'], 0xA5A55A5A) - assert_equal(map['u16'], 0xB66B) - assert_equal(map['u8'], 0xC7) - - assert_equal(map['i64'], 1000000000000000000) - assert_equal(map['i32'], 1000000000) - assert_equal(map['i16'], 10000) - assert_equal(map['i8'], 100) - - assert_equal(map['sstr'], "Short String") - - submap = map['map'] - assert_equal(submap['first'], "FIRST") - assert_equal(submap['second'], "SECOND") - - result = parent.set_map({'first' => 'FIRST', 'sub' => {'subfirst' => 25}}) - assert_equal(result.status, 0, "Method Response Status") - assert_equal(result.text, "OK", "Method Response Text") - - rmap = result.args.output - assert_equal(rmap['first'], "FIRST") - assert_equal(rmap['sub']['subfirst'], 25) - assert_equal(rmap['added'], 'Added Text') - end - def test_D_userid_for_method parent = @qmfc.object(:class => "parent") assert(parent, "Number of parent objects") @@ -314,6 +276,23 @@ class ConsoleTest < ConsoleTestBase assert(parent.listval[4][3].class == Hash) assert_equal(parent.listval[4][3]["hi"], 10) assert_equal(parent.listval[4][3]["lo"], 5) + assert_equal(parent.listval[4][3]["neg"], -3) + + # see agent for structure of mapval + + assert(parent.mapval.class == Hash) + assert_equal(parent.mapval.length, 7) + assert_equal(parent.mapval['aLong'], 9999999999) + assert_equal(parent.mapval['aInt'], 54321) + assert_equal(parent.mapval['aSigned'], -666) + assert_equal(parent.mapval['aString'], "A String") + assert_equal(parent.mapval['aFloat'], 3.1415) + assert(parent.mapval['aMap'].class == Hash) + assert_equal(parent.mapval['aMap'].length, 2) + assert_equal(parent.mapval['aMap']['second'], 2) + assert(parent.mapval['aList'].class == Array) + assert_equal(parent.mapval['aList'].length, 4) + assert_equal(parent.mapval['aList'][1], -1) end end diff --git a/qpid/cpp/src/qmf/engine/ValueImpl.cpp b/qpid/cpp/src/qmf/engine/ValueImpl.cpp index 72c68c420b..c58c28e166 100644 --- a/qpid/cpp/src/qmf/engine/ValueImpl.cpp +++ b/qpid/cpp/src/qmf/engine/ValueImpl.cpp @@ -121,10 +121,14 @@ void ValueImpl::initMap(const FieldTable& ft) case 0x22 : subval->setUint(fvalue.get<int>()); break; } insert(name.c_str(), subval); - } else if ((amqType & 0xCF) == 0x01) { + } else if (amqType == 0x31) { // int64 Value* subval(new Value(TYPE_INT64)); subval->setInt64(fvalue.get<int64_t>()); insert(name.c_str(), subval); + } else if ((amqType & 0xCF) == 0x01) { // 0x01:int8, 0x11:int16, 0x21:int21 + Value* subval(new Value(TYPE_INT32)); + subval->setInt((int32_t)fvalue.get<int>()); + insert(name.c_str(), subval); } else if (amqType == 0x85 || amqType == 0x95) { Value* subval(new Value(TYPE_LSTR)); subval->setString(fvalue.get<string>().c_str()); @@ -233,15 +237,19 @@ void ValueImpl::initList(const List& fl) } else if ((amqType & 0xCF) == 0x02) { Value* subval(new Value(TYPE_UINT32)); switch (amqType) { - case 0x02 : subval->setUint(fvalue.get<int>()); break; - case 0x12 : subval->setUint(fvalue.get<int>()); break; - case 0x22 : subval->setUint(fvalue.get<int>()); break; + case 0x02 : subval->setUint(fvalue.get<int>()); break; // uint8 + case 0x12 : subval->setUint(fvalue.get<int>()); break; // uint16 + case 0x22 : subval->setUint(fvalue.get<int>()); break; // uint32 } appendToList(subval); - } else if ((amqType & 0xCF) == 0x01) { + } else if (amqType == 0x31) { // int64 Value* subval(new Value(TYPE_INT64)); subval->setInt64(fvalue.get<int64_t>()); appendToList(subval); + } else if ((amqType & 0xCF) == 0x01) { // 0x01:int8, 0x11:int16, 0x21:int32 + Value* subval(new Value(TYPE_INT32)); + subval->setInt((int32_t)fvalue.get<int>()); + appendToList(subval); } else if (amqType == 0x85 || amqType == 0x95) { Value* subval(new Value(TYPE_LSTR)); subval->setString(fvalue.get<string>().c_str()); |