TestValuesWin32.cpp
Go to the documentation of this file.
1 // TestValues.cpp : Test XML encoding and decoding of XmlRpcValues.
2 
3 #define _CRTDBG_MAP_ALLOC
4 #include <stdlib.h>
5 #include <crtdbg.h>
6 
7 #include "xmlrpcpp/XmlRpcValue.h"
8 
9 
10 #include <assert.h>
11 #include <iostream>
12 
13 
14 using namespace XmlRpc;
15 
16 
18 {
19  XmlRpcValue booleanFalse(false);
20  XmlRpcValue booleanTrue(true);
21  int offset = 0;
22  XmlRpcValue booleanFalseXml("<value><boolean>0</boolean></value>", &offset);
23  offset = 0;
24  XmlRpcValue booleanTrueXml("<value><boolean>1</boolean></value>", &offset);
25  assert(booleanFalse != booleanTrue);
26  assert(booleanFalse == booleanFalseXml);
27  assert(booleanFalse == booleanFalseXml);
28  if (booleanFalse)
29  assert(false);
30 
31  if (booleanTrue)
32  assert( ! false);
33  else
34  assert(false);
35 }
36 
37 // Int
38 void testInt()
39 {
40  XmlRpcValue int0(0);
41  XmlRpcValue int1(1);
42  XmlRpcValue int10(10);
43  XmlRpcValue int_1(-1);
44  int offset = 0;
45  XmlRpcValue int0Xml("<value><int>0</int></value>", &offset);
46  offset = 0;
47  XmlRpcValue int9Xml("<value><i4>9</i4></value>", &offset);
48  assert(int0 == int0Xml);
49  assert(int(int10) - int(int1) == int(int9Xml));
50  assert(9 == int(int9Xml));
51  assert(int(int10) + int(int_1) == int(int9Xml));
52 }
53 
54 void testDouble()
55 {
56  // Double
57  XmlRpcValue d(43.7);
58  int offset = 0;
59  XmlRpcValue dXml("<value><double>56.3</double></value>", &offset);
60  assert(double(d) + double(dXml) == 100.0); // questionable practice...
61 }
62 
63 void testString()
64 {
65  // String
66  XmlRpcValue s("Now is the time <&");
67  char csxml[] = "<value><string>Now is the time &lt;&amp;</string></value>";
68  std::string ssxml = csxml;
69  int offset = 0;
70  XmlRpcValue vscXml(csxml, &offset);
71  offset = 0;
72  XmlRpcValue vssXml(ssxml, &offset);
73  assert(s == vscXml);
74  assert(s == vssXml);
75  offset = 0;
76  XmlRpcValue fromXml(vssXml.toXml(), &offset);
77  assert(s == fromXml);
78 
79  // Empty or blank strings with no <string> tags
80  std::string emptyStringXml("<value></value>");
81  offset = 0;
82  XmlRpcValue emptyStringVal1(emptyStringXml, &offset);
83  XmlRpcValue emptyStringVal2("");
84  assert(emptyStringVal1 == emptyStringVal2);
85 
86  emptyStringXml = "<value> </value>";
87  offset = 0;
88  XmlRpcValue blankStringVal(emptyStringXml, &offset);
89  assert(std::string(blankStringVal) == " ");
90 }
91 
92 
94 {
95  // DateTime
96  int offset = 0;
97  XmlRpcValue dateTime("<value><dateTime.iso8601>19040101T03:12:35</dateTime.iso8601></value>", &offset);
98  struct tm &t = dateTime;
99  assert(t.tm_year == 1904 && t.tm_min == 12);
100 }
101 
102 
103 void testArray(XmlRpcValue const& d)
104 {
105  // Array
106  XmlRpcValue a;
107  a.setSize(4);
108  a[0] = 1;
109  a[1] = std::string("two");
110  a[2] = 43.7;
111  a[3] = "four";
112  assert(int(a[0]) == 1);
113  assert(a[2] == d);
114 
115  char csaXml[] =
116  "<value><array>\n"
117  " <data>\n"
118  " <value><i4>1</i4></value> \n"
119  " <value> <string>two</string></value>\n"
120  " <value><double>43.7</double></value>\n"
121  " <value>four</value>\n"
122  " </data>\n"
123  "</array></value>";
124 
125  int offset = 0;
126  XmlRpcValue aXml(csaXml, &offset);
127  assert(a == aXml);
128 }
129 
131 {
132  // Struct
133  XmlRpcValue struct1;
134  struct1["i4"] = 1;
135  struct1["str"] = "two";
136  struct1["d"] = 43.7;
137 
138  XmlRpcValue a;
139  a.setSize(4);
140  a[0] = 1;
141  a[1] = std::string("two");
142  a[2] = 43.7;
143  a[3] = "four";
144 
145  assert(struct1["d"] == a[2]);
146 
147  char csStructXml[] =
148  "<value><struct>\n"
149  " <member>\n"
150  " <name>i4</name> \n"
151  " <value><i4>1</i4></value> \n"
152  " </member>\n"
153  " <member>\n"
154  " <name>d</name> \n"
155  " <value><double>43.7</double></value>\n"
156  " </member>\n"
157  " <member>\n"
158  " <name>str</name> \n"
159  " <value> <string>two</string></value>\n"
160  " </member>\n"
161  "</struct></value>";
162 
163  int offset = 0;
164  XmlRpcValue structXml(csStructXml, &offset);
165  assert(struct1 == structXml);
166 
167  XmlRpcValue astruct;
168  astruct["array"] = a;
169  assert(astruct["array"][2] == struct1["d"]);
170 
171  for (int i=0; i<10; i++) {
172  XmlRpcValue Event;
173  Event["Name"] = "string";
174 
175  Event.clear();
176 
177  const int NELMTS = 100;
178  int ii;
179 
180  for (ii=0; ii< NELMTS; ++ii) {
181  char buf[40];
182  sprintf(buf,"%d", ii);
183  Event[buf] = buf;
184  }
185 
186  Event.clear();
187 
188  for (ii=0; ii< NELMTS; ++ii) {
189  char buf[40];
190  sprintf(buf,"%d", ii);
191  if (ii != NELMTS/2)
192  Event[buf] = ii;
193  else
194  for (int jj=0; jj< NELMTS; ++jj) {
195  char bufj[40];
196  sprintf(bufj,"%d", jj);
197  Event[buf][bufj] = bufj;
198  }
199  }
200 
201  for (ii=0; ii< NELMTS; ++ii) {
202  char buf[40];
203  sprintf(buf,"%d", ii);
204  if (ii != NELMTS/2)
205  assert(Event[buf] == XmlRpcValue(ii));
206  else
207  assert(Event[buf].size() == NELMTS);
208  }
209  }
210 }
211 
212 
213 
214 int main(int argc, char* argv[])
215 {
216  _CrtDumpMemoryLeaks();
217  _CrtCheckMemory( );
218 
219  testBoolean();
220  _CrtDumpMemoryLeaks();
221  _CrtCheckMemory( );
222 
223  testInt();
224  _CrtDumpMemoryLeaks();
225  _CrtCheckMemory( );
226 
227 
228  testDouble();
229  _CrtDumpMemoryLeaks();
230  _CrtCheckMemory( );
231 
232 
233  testString();
234  _CrtDumpMemoryLeaks();
235  _CrtCheckMemory( );
236 
237 
238  testDateTime();
239  _CrtDumpMemoryLeaks();
240  _CrtCheckMemory( );
241 
242 
243  testArray(43.7);
244  _CrtDumpMemoryLeaks();
245  _CrtCheckMemory( );
246 
247 
248  testStruct();
249  _CrtDumpMemoryLeaks();
250  _CrtCheckMemory( );
251 
252  return 0;
253 }
XmlRpc::XmlRpcValue::toXml
std::string toXml() const
Encode the Value in xml.
Definition: XmlRpcValue.cpp:277
testArray
void testArray(XmlRpcValue const &d)
Definition: TestValuesWin32.cpp:103
s
XmlRpcServer s
Definition: HelloServer.cpp:11
XmlRpcValue.h
testDouble
void testDouble()
Definition: TestValuesWin32.cpp:54
XmlRpc
Definition: XmlRpcClient.h:20
testInt
void testInt()
Definition: TestValuesWin32.cpp:38
XmlRpc::XmlRpcValue::clear
void clear()
Erase the current value.
Definition: XmlRpcValue.h:79
testDateTime
void testDateTime()
Definition: TestValuesWin32.cpp:93
testStruct
void testStruct()
Definition: TestValuesWin32.cpp:130
main
int main(int argc, char *argv[])
Definition: TestValuesWin32.cpp:214
XmlRpc::XmlRpcValue::setSize
void setSize(int size)
Specify the size for array values. Array values will grow beyond this size if needed.
Definition: XmlRpcValue.h:130
testBoolean
void testBoolean()
Definition: TestValuesWin32.cpp:17
XmlRpc::fromXml
XmlRpcValue fromXml(std::string const &data)
Definition: xmlrpcvalue_base64.cpp:22
XmlRpc::XmlRpcValue
RPC method arguments and results are represented by Values.
Definition: XmlRpcValue.h:24
testString
void testString()
Definition: TestValuesWin32.cpp:63


xmlrpcpp
Author(s): Chris Morley, Konstantin Pilipchuk, Morgan Quigley, Austin Hendrix, Dirk Thomas , Jacob Perron
autogenerated on Thu Nov 23 2023 04:01:41