v01
This commit is contained in:
233
thirdparty/ros/ros_comm/utilities/xmlrpcpp/test/TestValues.cpp
vendored
Normal file
233
thirdparty/ros/ros_comm/utilities/xmlrpcpp/test/TestValues.cpp
vendored
Normal file
@@ -0,0 +1,233 @@
|
||||
// TestValues.cpp : Test XML encoding and decoding of XmlRpcValues.
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "xmlrpcpp/XmlRpcValue.h"
|
||||
|
||||
|
||||
#include <assert.h>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
using namespace XmlRpc;
|
||||
|
||||
|
||||
void testBoolean()
|
||||
{
|
||||
XmlRpcValue booleanFalse(false);
|
||||
XmlRpcValue booleanTrue(true);
|
||||
int offset = 0;
|
||||
XmlRpcValue booleanFalseXml("<value><boolean>0</boolean></value>", &offset);
|
||||
offset = 0;
|
||||
XmlRpcValue booleanTrueXml("<value><boolean>1</boolean></value>", &offset);
|
||||
assert(booleanFalse != booleanTrue);
|
||||
assert(booleanFalse == booleanFalseXml);
|
||||
assert(booleanFalse != booleanTrueXml);
|
||||
|
||||
if (bool(booleanFalse))
|
||||
assert(false);
|
||||
|
||||
if ( ! bool(booleanTrue))
|
||||
assert(false);
|
||||
}
|
||||
|
||||
// Int
|
||||
void testInt()
|
||||
{
|
||||
XmlRpcValue int0(0);
|
||||
XmlRpcValue int1(1);
|
||||
XmlRpcValue int10(10);
|
||||
XmlRpcValue int_1(-1);
|
||||
int offset = 0;
|
||||
XmlRpcValue int0Xml("<value><int>0</int></value>", &offset);
|
||||
offset = 0;
|
||||
XmlRpcValue int9Xml("<value><i4>9</i4></value>", &offset);
|
||||
assert(int0 == int0Xml);
|
||||
assert(int(int10) - int(int1) == int(int9Xml));
|
||||
assert(9 == int(int9Xml));
|
||||
assert(int(int10) + int(int_1) == int(int9Xml));
|
||||
}
|
||||
|
||||
void testDouble()
|
||||
{
|
||||
// Double
|
||||
XmlRpcValue d(43.7);
|
||||
int offset = 0;
|
||||
XmlRpcValue dXml("<value><double>56.3</double></value>", &offset);
|
||||
assert(double(d) + double(dXml) == 100.0); // questionable practice...
|
||||
}
|
||||
|
||||
void testString()
|
||||
{
|
||||
// String
|
||||
XmlRpcValue s("Now is the time <&");
|
||||
char csxml[] = "<value><string>Now is the time <&</string></value>";
|
||||
std::string ssxml = csxml;
|
||||
int offset = 0;
|
||||
XmlRpcValue vscXml(csxml, &offset);
|
||||
offset = 0;
|
||||
XmlRpcValue vssXml(ssxml, &offset);
|
||||
assert(s == vscXml);
|
||||
assert(s == vssXml);
|
||||
offset = 0;
|
||||
XmlRpcValue fromXml(vssXml.toXml(), &offset);
|
||||
assert(s == fromXml);
|
||||
|
||||
// Empty or blank strings with no <string> tags
|
||||
std::string emptyStringXml("<value></value>");
|
||||
offset = 0;
|
||||
XmlRpcValue emptyStringVal1(emptyStringXml, &offset);
|
||||
XmlRpcValue emptyStringVal2("");
|
||||
assert(emptyStringVal1 == emptyStringVal2);
|
||||
|
||||
emptyStringXml = "<value> </value>";
|
||||
offset = 0;
|
||||
XmlRpcValue blankStringVal(emptyStringXml, &offset);
|
||||
assert(std::string(blankStringVal) == " ");
|
||||
}
|
||||
|
||||
|
||||
void testDateTime()
|
||||
{
|
||||
// DateTime
|
||||
int offset = 0;
|
||||
XmlRpcValue dateTime("<value><dateTime.iso8601>19040101T03:12:35</dateTime.iso8601></value>", &offset);
|
||||
struct tm &t = dateTime;
|
||||
assert(t.tm_year == 1904 && t.tm_min == 12);
|
||||
}
|
||||
|
||||
|
||||
void testArray(XmlRpcValue const& d)
|
||||
{
|
||||
// Array
|
||||
XmlRpcValue a;
|
||||
a.setSize(4);
|
||||
a[0] = 1;
|
||||
a[1] = std::string("two");
|
||||
a[2] = 43.7;
|
||||
a[3] = "four";
|
||||
assert(int(a[0]) == 1);
|
||||
assert(a[2] == d);
|
||||
|
||||
char csaXml[] =
|
||||
"<value><array>\n"
|
||||
" <data>\n"
|
||||
" <value><i4>1</i4></value> \n"
|
||||
" <value> <string>two</string></value>\n"
|
||||
" <value><double>43.7</double></value>\n"
|
||||
" <value>four</value>\n"
|
||||
" </data>\n"
|
||||
"</array></value>";
|
||||
|
||||
int offset = 0;
|
||||
XmlRpcValue aXml(csaXml, &offset);
|
||||
assert(a == aXml);
|
||||
}
|
||||
|
||||
void testStruct()
|
||||
{
|
||||
// Struct
|
||||
XmlRpcValue struct1;
|
||||
struct1["i4"] = 1;
|
||||
struct1["str"] = "two";
|
||||
struct1["d"] = 43.7;
|
||||
|
||||
XmlRpcValue a;
|
||||
a.setSize(4);
|
||||
a[0] = 1;
|
||||
a[1] = std::string("two");
|
||||
a[2] = 43.7;
|
||||
a[3] = "four";
|
||||
|
||||
assert(struct1["d"] == a[2]);
|
||||
|
||||
char csStructXml[] =
|
||||
"<value><struct>\n"
|
||||
" <member>\n"
|
||||
" <name>i4</name> \n"
|
||||
" <value><i4>1</i4></value> \n"
|
||||
" </member>\n"
|
||||
" <member>\n"
|
||||
" <name>d</name> \n"
|
||||
" <value><double>43.7</double></value>\n"
|
||||
" </member>\n"
|
||||
" <member>\n"
|
||||
" <name>str</name> \n"
|
||||
" <value> <string>two</string></value>\n"
|
||||
" </member>\n"
|
||||
"</struct></value>";
|
||||
|
||||
int offset = 0;
|
||||
XmlRpcValue structXml(csStructXml, &offset);
|
||||
assert(struct1 == structXml);
|
||||
|
||||
XmlRpcValue astruct;
|
||||
astruct["array"] = a;
|
||||
assert(astruct["array"][2] == struct1["d"]);
|
||||
|
||||
for (int i=0; i<10; i++) {
|
||||
XmlRpcValue Event;
|
||||
Event["Name"] = "string";
|
||||
|
||||
Event.clear();
|
||||
|
||||
const int NELMTS = 100;
|
||||
int ii;
|
||||
|
||||
for (ii=0; ii< NELMTS; ++ii) {
|
||||
char buf[40];
|
||||
sprintf(buf,"%d", ii);
|
||||
Event[std::string(buf)] = buf;
|
||||
}
|
||||
|
||||
Event.clear();
|
||||
|
||||
for (ii=0; ii< NELMTS; ++ii) {
|
||||
char buf[40];
|
||||
sprintf(buf,"%d", ii);
|
||||
if (ii != NELMTS/2)
|
||||
Event[std::string(buf)] = ii;
|
||||
else
|
||||
for (int jj=0; jj< NELMTS; ++jj) {
|
||||
char bufj[40];
|
||||
sprintf(bufj,"%d", jj);
|
||||
Event[std::string(buf)][std::string(bufj)] = bufj;
|
||||
}
|
||||
}
|
||||
|
||||
for (ii=0; ii< NELMTS; ++ii) {
|
||||
char buf[40];
|
||||
sprintf(buf,"%d", ii);
|
||||
if (ii != NELMTS/2)
|
||||
assert(Event[std::string(buf)] == XmlRpcValue(ii));
|
||||
else
|
||||
assert(Event[std::string(buf)].size() == NELMTS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
testBoolean();
|
||||
|
||||
testInt();
|
||||
|
||||
|
||||
testDouble();
|
||||
|
||||
|
||||
testString();
|
||||
|
||||
|
||||
testDateTime();
|
||||
|
||||
|
||||
testArray(43.7);
|
||||
|
||||
|
||||
testStruct();
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user