summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Anthony Giusti <kgiusti@apache.org>2010-04-27 15:19:14 +0000
committerKenneth Anthony Giusti <kgiusti@apache.org>2010-04-27 15:19:14 +0000
commit07c5b6e839e23e72d6d107cc7ed979db412aa53d (patch)
tree3a6d503833a1217487f6e0c6ef9f59c08ae48e32
parentf434d868a3a58f7fb469e6d2d4f69aa01b1130d7 (diff)
downloadqpid-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-xqpid/cpp/bindings/qmf/tests/agent_ruby.rb24
-rw-r--r--qpid/cpp/bindings/qmf/tests/python_agent.py26
-rwxr-xr-xqpid/cpp/bindings/qmf/tests/python_console.py17
-rwxr-xr-xqpid/cpp/bindings/qmf/tests/ruby_console_test.rb55
-rw-r--r--qpid/cpp/src/qmf/engine/ValueImpl.cpp18
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());