1 /*************************************************************************** 2 wbxmlfunc.cpp - test suite for wbxml-rpc 3 ------------------- 4 begin : Fri Jan 09 2004 5 copyright : (C) 2002-2007 by Ewald Arnold 6 email : ulxmlrpcpp@ewald-arnold.de 7 8 $Id: wbxmlfunc.cpp 990 2007-07-14 15:00:39Z ewald-arnold $ 9 10 ***************************************************************************/ 11 12 /************************************************************************** 13 * 14 * This program is free software; you can redistribute it and/or modify 15 * it under the terms of the GNU Lesser General Public License as 16 * published by the Free Software Foundation; either version 2 of the License, 17 * or (at your option) any later version. 18 * 19 * This program is distributed in the hope that it will be useful, 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 * GNU General Public License for more details. 23 * 24 * You should have received a copy of the GNU Lesser General Public License 25 * along with this program; if not, write to the Free Software 26 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 27 * 28 ***************************************************************************/ 29 30 //#define ULXR_DEBUG_OUTPUT 31 32 #include <ulxmlrpcpp/ulxmlrpcpp.h> // always first header 33 34 #include <iostream> 35 #include <map> 36 #include <cstdlib> 37 #include <string.h> 38 #include <cstdio> 39 40 #include <ulxmlrpcpp/ulxr_except.h> 41 42 #include <ulxmlrpcpp/ulxr_htmlform_handler.h> 43 #include <ulxmlrpcpp/ulxr_value.h> 44 #include <ulxmlrpcpp/ulxr_call.h> 45 #include <ulxmlrpcpp/ulxr_response.h> 46 47 #include <ulxmlrpcpp/ulxr_valueparse_wb.h> 48 #include <ulxmlrpcpp/ulxr_callparse_wb.h> 49 #include <ulxmlrpcpp/ulxr_responseparse_wb.h> 50 51 #define MIB_Enum_UTF8 (char) 106 52 #define MIB_Enum_LATIN1 (char) 4 53 54 #ifdef ULXR_UNICODE 55 #define WB_PROLOG 0x01, \ 56 0x01, \ 57 MIB_Enum_UTF8, \ 58 0x00 59 #else 60 #define WB_PROLOG 0x01, \ 61 0x01, \ 62 MIB_Enum_LATIN1, \ 63 0x00 64 #endif 65 66 const char emptyRespPattern[] = { WB_PROLOG, 67 ulxr::MethodResponseParserWb::wbToken_MethodResponse, 68 ulxr::MethodResponseParserWb::wbToken_Params, 69 ulxr::WbXmlParser::wbxml_END, 70 ulxr::WbXmlParser::wbxml_END 71 }; 72 73 const char emptyArrayPattern[] = { WB_PROLOG, 74 ulxr::MethodResponseParserWb::wbToken_MethodResponse, 75 ulxr::MethodResponseParserWb::wbToken_Params, 76 ulxr::MethodResponseParserWb::wbToken_Param, 77 ulxr::MethodResponseParserWb::wbToken_Value, 78 ulxr::MethodResponseParserWb::wbToken_Array, 79 ulxr::MethodResponseParserWb::wbToken_Data, 80 ulxr::WbXmlParser::wbxml_END, 81 ulxr::WbXmlParser::wbxml_END, 82 ulxr::WbXmlParser::wbxml_END, 83 ulxr::WbXmlParser::wbxml_END, 84 ulxr::WbXmlParser::wbxml_END, 85 ulxr::WbXmlParser::wbxml_END 86 }; 87 88 const char emptyStructPattern[] = { WB_PROLOG, 89 ulxr::MethodResponseParserWb::wbToken_MethodResponse, 90 ulxr::MethodResponseParserWb::wbToken_Params, 91 ulxr::MethodResponseParserWb::wbToken_Param, 92 ulxr::MethodResponseParserWb::wbToken_Value, 93 ulxr::MethodResponseParserWb::wbToken_Struct, 94 ulxr::WbXmlParser::wbxml_END, 95 ulxr::WbXmlParser::wbxml_END, 96 ulxr::WbXmlParser::wbxml_END, 97 ulxr::WbXmlParser::wbxml_END, 98 ulxr::WbXmlParser::wbxml_END 99 }; 100 101 const char int1Pattern[] = { WB_PROLOG, 102 ulxr::ValueParserWb::wbToken_Value, 103 ulxr::ValueParserWb::wbToken_Int, 104 ulxr::WbXmlParser::wbxml_STR_I, '1', '2', '3', 0, 105 ulxr::WbXmlParser::wbxml_END, 106 ulxr::WbXmlParser::wbxml_END 107 }; 108 109 const char int2Pattern[] = { WB_PROLOG, 110 ulxr::ValueParserWb::wbToken_Value, 111 ulxr::ValueParserWb::wbToken_I4, 112 ulxr::WbXmlParser::wbxml_STR_I, '1', '2', '3', 0, 113 ulxr::WbXmlParser::wbxml_END, 114 ulxr::WbXmlParser::wbxml_END 115 }; 116 117 const char boolPattern[] = { WB_PROLOG, 118 ulxr::ValueParserWb::wbToken_Value, 119 ulxr::ValueParserWb::wbToken_Boolean, 120 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'l', 's', 'e', 0, 121 ulxr::WbXmlParser::wbxml_END, 122 ulxr::WbXmlParser::wbxml_END 123 }; 124 125 const char doublePattern[] = { WB_PROLOG, 126 ulxr::ValueParserWb::wbToken_Value, 127 ulxr::ValueParserWb::wbToken_Double, 128 ulxr::WbXmlParser::wbxml_STR_I, '1', '2', '3', '.', '4', '5', '6', '0', '0', '0', 0, 129 ulxr::WbXmlParser::wbxml_END, 130 ulxr::WbXmlParser::wbxml_END 131 }; 132 133 const char stringPattern[] = { WB_PROLOG, 134 ulxr::ValueParserWb::wbToken_Value, 135 ulxr::ValueParserWb::wbToken_String, 136 ulxr::WbXmlParser::wbxml_STR_I, '&', 'a', 'm', 'p', ';', '\"', '\'', 137 's', 't', 'r', 'i', 'n', 'g', '&', 'l', 't', ';', 138 '>', '&', 'a', 'm', 'p', ';', '\"', '\'', 0, 139 ulxr::WbXmlParser::wbxml_END, 140 ulxr::WbXmlParser::wbxml_END 141 }; 142 143 const char implPattern[] = { WB_PROLOG, 144 ulxr::ValueParserWb::wbToken_Value, 145 ulxr::WbXmlParser::wbxml_STR_I, 'i', 'm', 'p', 'l', 'i', 'z', 'i', 't', 146 ' ', 's', 't', 'r', 'i', 'n', 'g', 0, 147 ulxr::WbXmlParser::wbxml_END 148 }; 149 150 const char datePattern[] = { WB_PROLOG, 151 ulxr::ValueParserWb::wbToken_Value, 152 ulxr::ValueParserWb::wbToken_Date, 153 ulxr::WbXmlParser::wbxml_STR_I, '2', '0', '0', '2', '0', '3', '1', '0', 154 'T', '1', '0', ':', '2', '3', ':', '4', '5', 0, 155 ulxr::WbXmlParser::wbxml_END, 156 ulxr::WbXmlParser::wbxml_END 157 }; 158 159 160 const char base64Pattern[] = { WB_PROLOG, 161 ulxr::ValueParserWb::wbToken_Value, 162 ulxr::ValueParserWb::wbToken_Base64, 163 ulxr::WbXmlParser::wbxml_STR_I, 'A', 'B', 'A', 'S', 'r', 't', 164 '4', '6', '6', 'a', '9', '0', 0, 165 ulxr::WbXmlParser::wbxml_END, 166 ulxr::WbXmlParser::wbxml_END 167 }; 168 169 const char struct1Pattern[]= { WB_PROLOG, 170 ulxr::ValueParserWb::wbToken_Value, 171 ulxr::ValueParserWb::wbToken_Struct, 172 173 ulxr::ValueParserWb::wbToken_Member, 174 ulxr::ValueParserWb::wbToken_Name, 175 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 176 'S', 't', 'r', 'i', 'n', 'g', 0, 177 ulxr::WbXmlParser::wbxml_END, 178 ulxr::ValueParserWb::wbToken_Value, 179 ulxr::ValueParserWb::wbToken_String, 180 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 's', 't', 'r', '1', 0, 181 ulxr::WbXmlParser::wbxml_END, 182 ulxr::WbXmlParser::wbxml_END, 183 ulxr::WbXmlParser::wbxml_END, 184 185 ulxr::ValueParserWb::wbToken_Member, 186 ulxr::ValueParserWb::wbToken_Name, 187 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 'c', 'o', 'd', 'e', 0, 188 ulxr::WbXmlParser::wbxml_END, 189 ulxr::ValueParserWb::wbToken_Value, 190 ulxr::ValueParserWb::wbToken_I4, 191 ulxr::WbXmlParser::wbxml_STR_I, '1', '2', '3', 0, 192 ulxr::WbXmlParser::wbxml_END, 193 ulxr::WbXmlParser::wbxml_END, 194 ulxr::WbXmlParser::wbxml_END, 195 196 ulxr::WbXmlParser::wbxml_END, 197 ulxr::WbXmlParser::wbxml_END 198 }; 199 200 201 const char struct2Pattern[]= { WB_PROLOG, 202 ulxr::ValueParserWb::wbToken_Value, 203 ulxr::ValueParserWb::wbToken_Struct, 204 205 ulxr::ValueParserWb::wbToken_Member, 206 ulxr::ValueParserWb::wbToken_Value, 207 ulxr::ValueParserWb::wbToken_String, 208 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 's', 't', 'r', '2', 0, 209 ulxr::WbXmlParser::wbxml_END, 210 ulxr::WbXmlParser::wbxml_END, 211 ulxr::ValueParserWb::wbToken_Name, 212 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 213 'S', 't', 'r', 'i', 'n', 'g', 0, 214 ulxr::WbXmlParser::wbxml_END, 215 ulxr::WbXmlParser::wbxml_END, 216 217 ulxr::ValueParserWb::wbToken_Member, 218 ulxr::ValueParserWb::wbToken_Value, 219 ulxr::ValueParserWb::wbToken_I4, 220 ulxr::WbXmlParser::wbxml_STR_I, '4', '5', '6', 0, 221 ulxr::WbXmlParser::wbxml_END, 222 ulxr::WbXmlParser::wbxml_END, 223 ulxr::ValueParserWb::wbToken_Name, 224 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 'c', 'o', 'd', 'e', 0, 225 ulxr::WbXmlParser::wbxml_END, 226 ulxr::WbXmlParser::wbxml_END, 227 228 ulxr::WbXmlParser::wbxml_END, 229 ulxr::WbXmlParser::wbxml_END 230 }; 231 232 const char arrayPattern[] = { WB_PROLOG, 233 ulxr::ValueParserWb::wbToken_Value, 234 ulxr::ValueParserWb::wbToken_Array, 235 ulxr::ValueParserWb::wbToken_Data, 236 237 ulxr::ValueParserWb::wbToken_Value, 238 ulxr::ValueParserWb::wbToken_Boolean, 239 ulxr::WbXmlParser::wbxml_STR_I, 't', 'r', 'u', 'e', 0, 240 ulxr::WbXmlParser::wbxml_END, 241 ulxr::WbXmlParser::wbxml_END, 242 243 ulxr::ValueParserWb::wbToken_Value, 244 ulxr::ValueParserWb::wbToken_I4, 245 ulxr::WbXmlParser::wbxml_STR_I, '1', '2', '3', 0, 246 ulxr::WbXmlParser::wbxml_END, 247 ulxr::WbXmlParser::wbxml_END, 248 249 ulxr::WbXmlParser::wbxml_END, 250 ulxr::WbXmlParser::wbxml_END, 251 ulxr::WbXmlParser::wbxml_END 252 }; 253 254 const char respPattern[] = { WB_PROLOG, 255 ulxr::MethodResponseParserWb::wbToken_MethodResponse, 256 ulxr::MethodResponseParserWb::wbToken_Fault, 257 ulxr::ValueParserWb::wbToken_Value, 258 ulxr::ValueParserWb::wbToken_Struct, 259 260 ulxr::ValueParserWb::wbToken_Member, 261 ulxr::ValueParserWb::wbToken_Name, 262 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 'C', 'o', 'd', 'e', 0, 263 ulxr::WbXmlParser::wbxml_END, 264 ulxr::ValueParserWb::wbToken_Value, 265 ulxr::ValueParserWb::wbToken_I4, 266 ulxr::WbXmlParser::wbxml_STR_I, '1', '2', '3', 0, 267 ulxr::WbXmlParser::wbxml_END, 268 ulxr::WbXmlParser::wbxml_END, 269 ulxr::WbXmlParser::wbxml_END, 270 271 ulxr::ValueParserWb::wbToken_Member, 272 ulxr::ValueParserWb::wbToken_Name, 273 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 274 'S', 't', 'r', 'i', 'n', 'g', 0, 275 ulxr::WbXmlParser::wbxml_END, 276 ulxr::ValueParserWb::wbToken_Value, 277 ulxr::ValueParserWb::wbToken_String, 278 ulxr::WbXmlParser::wbxml_STR_I, 'f', 'a', 'u', 'l', 't', 's', 279 't', 'r', '_', 'r', 0, 280 ulxr::WbXmlParser::wbxml_END, 281 ulxr::WbXmlParser::wbxml_END, 282 283 ulxr::WbXmlParser::wbxml_END, 284 ulxr::WbXmlParser::wbxml_END, 285 ulxr::WbXmlParser::wbxml_END, 286 ulxr::WbXmlParser::wbxml_END 287 }; 288 289 290 const char callPattern[] = { WB_PROLOG, 291 ulxr::MethodCallParserWb::wbToken_MethodCall, 292 ulxr::MethodCallParserWb::wbToken_MethodName, 293 ulxr::WbXmlParser::wbxml_STR_I, 's', 'h', 'e', 'l', 'l', '.', 'c', 'a', 'l', 'l', 0, 294 ulxr::WbXmlParser::wbxml_END, 295 296 ulxr::MethodCallParserWb::wbToken_Params, 297 298 ulxr::MethodCallParserWb::wbToken_Param, 299 ulxr::ValueParserWb::wbToken_Value, 300 ulxr::ValueParserWb::wbToken_String, 301 ulxr::WbXmlParser::wbxml_STR_I, 's', 't', 'r', 'i', 'n', 'g', 0, 302 ulxr::WbXmlParser::wbxml_END, 303 ulxr::WbXmlParser::wbxml_END, 304 ulxr::WbXmlParser::wbxml_END, 305 306 ulxr::MethodCallParserWb::wbToken_Param, 307 ulxr::ValueParserWb::wbToken_Value, 308 ulxr::ValueParserWb::wbToken_I4, 309 ulxr::WbXmlParser::wbxml_STR_I, '1', '2', '3', 0, 310 ulxr::WbXmlParser::wbxml_END, 311 ulxr::WbXmlParser::wbxml_END, 312 ulxr::WbXmlParser::wbxml_END, 313 314 ulxr::MethodCallParserWb::wbToken_Param, 315 ulxr::ValueParserWb::wbToken_Value, 316 ulxr::ValueParserWb::wbToken_Boolean, 317 ulxr::WbXmlParser::wbxml_STR_I, 't', 'r', 'u', 'e', 0, 318 ulxr::WbXmlParser::wbxml_END, 319 ulxr::WbXmlParser::wbxml_END, 320 ulxr::WbXmlParser::wbxml_END, 321 322 ulxr::WbXmlParser::wbxml_END, 323 ulxr::WbXmlParser::wbxml_END 324 }; 325 326 const char emptyCallPattern[] 327 = { WB_PROLOG, 328 ulxr::MethodCallParserWb::wbToken_MethodCall, 329 ulxr::MethodCallParserWb::wbToken_MethodName, 330 ulxr::WbXmlParser::wbxml_STR_I, 's', 'h', 'e', 'l', 'l', '.', 'c', 'a', 'l', 'l', 0, 331 ulxr::WbXmlParser::wbxml_END, 332 333 ulxr::MethodCallParserWb::wbToken_Params, 334 335 ulxr::WbXmlParser::wbxml_END, 336 ulxr::WbXmlParser::wbxml_END 337 }; 338 339 void testPattern(const char *pattern, unsigned len) 340 { 341 ULXR_COUT << ULXR_PCHAR("====================================================\n"); 342 unsigned cnt = 0; 343 for (unsigned i = 0; i < len; ++i) 344 { 345 ULXR_COUT << ulxr::HtmlFormHandler::makeHexNumber(pattern[i]) << ULXR_PCHAR(" "); 346 if (++cnt > 16) 347 { 348 ULXR_COUT << std::endl; 349 cnt = 0; 350 } 351 } 352 ULXR_COUT << std::endl 353 << ULXR_PCHAR("-----------------------------------------------------\n"); 354 ulxr::ValueParserWb parser; 355 bool done = false; 356 ULXR_COUT << ULXR_PCHAR("Parser start\n"); 357 if (!parser.parse(pattern, len, done)) 358 { 359 ULXR_COUT << ULXR_PCHAR("Parser error\n"); 360 std::cerr << ulxr::getLatin1(parser.getErrorString(parser.getErrorCode())).c_str() 361 << " at line " 362 << parser.getCurrentLineNumber() 363 << std::endl; 364 } 365 ULXR_COUT << ULXR_PCHAR("Parser finish\n"); 366 367 ulxr::Value val = parser.getValue(); 368 ULXR_COUT << val.getSignature(true) << std::endl; 369 ULXR_COUT << val.getXml(0) << std::endl; 370 if (val.isString() ) 371 { 372 ulxr::RpcString str= val; 373 ULXR_COUT << ULXR_PCHAR("EinRpcString: ") << str.getString() << std::endl; 374 return; 375 } 376 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 377 ULXR_COUT << ulxr::binaryDebugOutput(val.getWbXml()); 378 ULXR_COUT << ULXR_PCHAR("====================================================\n"); 379 } 380 381 382 void testCallPattern(const char *pattern, unsigned len) 383 { 384 ULXR_COUT << ULXR_PCHAR("====================================================\n"); 385 unsigned cnt = 0; 386 for (unsigned i2 = 0; i2 < len; ++i2) 387 { 388 ULXR_COUT << ulxr::HtmlFormHandler::makeHexNumber(pattern[i2]) << ULXR_PCHAR(" "); 389 if (++cnt > 16) 390 { 391 ULXR_COUT << std::endl; 392 cnt = 0; 393 } 394 } 395 ULXR_COUT << std::endl 396 << ULXR_PCHAR("-----------------------------------------------------\n"); 397 398 ulxr::MethodCallParserWb parser; 399 bool done= false; 400 if (!parser.parse(pattern, len, done)) 401 { 402 ULXR_COUT << ULXR_PCHAR("Parser error\n"); 403 std::cerr << ulxr::getLatin1(parser.getErrorString(parser.getErrorCode())).c_str() 404 << " at line " 405 << parser.getCurrentLineNumber() 406 << std::endl; 407 } 408 409 ULXR_COUT << parser.getMethodCall().getSignature(true) << std::endl; 410 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 411 ULXR_COUT << parser.getMethodCall().getXml(0) << std::endl; 412 ULXR_COUT << parser.getMethodName() << std::endl; 413 ULXR_COUT << parser.numParams() << std::endl; 414 for (unsigned i1 = 0; i1 < parser.numParams(); ++i1) 415 ULXR_COUT << parser.getParam(i1).getSignature(true) << std::endl; 416 417 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 418 ULXR_COUT << ulxr::binaryDebugOutput(parser.getMethodCall().getWbXml()); 419 ULXR_COUT << ULXR_PCHAR("====================================================\n"); 420 } 421 422 423 void testRespPattern(const char *pattern, unsigned len) 424 { 425 ULXR_COUT << ULXR_PCHAR("====================================================\n"); 426 unsigned cnt = 0; 427 for (unsigned i = 0; i < len; ++i) 428 { 429 ULXR_COUT << ulxr::HtmlFormHandler::makeHexNumber(pattern[i]) << ULXR_PCHAR(" "); 430 if (++cnt > 16) 431 { 432 ULXR_COUT << std::endl; 433 cnt = 0; 434 } 435 } 436 ULXR_COUT << std::endl 437 << ULXR_PCHAR("-----------------------------------------------------\n"); 438 439 ulxr::MethodResponseParserWb parser; 440 bool done= false; 441 if (!parser.parse(pattern, len, done)) 442 { 443 ULXR_COUT << ULXR_PCHAR("Parser error\n"); 444 std::cerr << ulxr::getLatin1(parser.getErrorString(parser.getErrorCode())).c_str() 445 << " at line " 446 << parser.getCurrentLineNumber() 447 << std::endl; 448 } 449 450 ulxr::Value val= parser.getValue(); 451 ULXR_COUT << ULXR_PCHAR("!Value...\n"); 452 ULXR_COUT << val.getSignature(true) << std::endl; 453 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 454 ULXR_COUT << val.getXml(0) << std::endl; 455 ULXR_COUT << ULXR_PCHAR("Response...\n"); 456 ULXR_COUT << parser.getMethodResponse().getSignature(true) << std::endl; 457 ULXR_COUT << parser.getMethodResponse().getXml(0) << std::endl; 458 459 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 460 ULXR_COUT << ulxr::binaryDebugOutput(parser.getMethodResponse().getWbXml()); 461 ULXR_COUT << ULXR_PCHAR("====================================================\n"); 462 } 463 464 // #define STRESS_IT 465 466 int main(int argc, char * argv []) 467 { 468 ulxr::intializeLog4J(argv[0]); 469 470 int success = 0; 471 472 #ifdef STRESS_IT 473 for (int i= 0; i < 1000; ++i) 474 { 475 #endif 476 try 477 { 478 ULXR_COUT << ULXR_PCHAR("Testing patterns\n"); 479 480 ULXR_COUT << ULXR_PCHAR("boolPattern\n") << std::flush; 481 testPattern(boolPattern, sizeof(boolPattern)); 482 483 ULXR_COUT << ULXR_PCHAR("int1Pattern\n"); 484 testPattern(int1Pattern, sizeof(int1Pattern)); 485 486 ULXR_COUT << ULXR_PCHAR("int2Pattern\n"); 487 testPattern(int2Pattern, sizeof(int2Pattern)); 488 489 ULXR_COUT << ULXR_PCHAR("doublePattern\n"); 490 testPattern(doublePattern, sizeof(doublePattern)); 491 492 ULXR_COUT << ULXR_PCHAR("stringPattern\n"); 493 testPattern(stringPattern, sizeof(stringPattern)); 494 495 ULXR_COUT << ULXR_PCHAR("base64Pattern\n"); 496 testPattern(base64Pattern, sizeof(base64Pattern)); 497 498 ULXR_COUT << ULXR_PCHAR("datePattern\n"); 499 testPattern(datePattern, sizeof(datePattern)); 500 501 ULXR_COUT << ULXR_PCHAR("struct1Pattern\n"); 502 testPattern(struct1Pattern, sizeof(struct1Pattern)); 503 504 ULXR_COUT << ULXR_PCHAR("struct2Pattern\n"); 505 testPattern(struct2Pattern, sizeof(struct2Pattern)); 506 507 ULXR_COUT << ULXR_PCHAR("arrayPattern\n"); 508 testPattern(arrayPattern, sizeof(arrayPattern)); 509 510 ULXR_COUT << ULXR_PCHAR("callPattern\n"); 511 testCallPattern(callPattern, sizeof(callPattern)); 512 513 ULXR_COUT << ULXR_PCHAR("emptyCallPattern\n"); 514 testCallPattern(emptyCallPattern, sizeof(emptyCallPattern)); 515 516 ULXR_COUT << ULXR_PCHAR("respPattern\n"); 517 testRespPattern(respPattern, sizeof(respPattern)); 518 519 ULXR_COUT << ULXR_PCHAR("implPattern\n"); 520 testPattern(implPattern, sizeof(implPattern)); 521 522 ULXR_COUT << ULXR_PCHAR("emptyArrayPattern\n"); 523 testRespPattern(emptyArrayPattern, sizeof(emptyArrayPattern)); 524 525 ULXR_COUT << ULXR_PCHAR("emptyRespPattern\n"); 526 testRespPattern(emptyRespPattern, sizeof(emptyRespPattern)); 527 528 ULXR_COUT << ULXR_PCHAR("emptyStructPattern\n"); 529 testRespPattern(emptyStructPattern, sizeof(emptyStructPattern)); 530 531 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 532 533 ULXR_COUT << ULXR_PCHAR("MethodResponse abc\n"); 534 535 ulxr::MethodResponse mr1(123, ULXR_PCHAR("faultstr_m")); 536 ULXR_COUT << ulxr::binaryDebugOutput(mr1.getWbXml()); 537 ULXR_COUT << std::endl << mr1.getXml(0) << std::endl; 538 539 ulxr::MethodResponse mr2(ulxr::Integer(1)); 540 ULXR_COUT << ulxr::binaryDebugOutput(mr2.getWbXml()); 541 ULXR_COUT << std::endl << mr2.getXml(0) << std::endl; 542 543 ulxr::MethodResponse mr3; 544 ULXR_COUT << ulxr::binaryDebugOutput(mr3.getWbXml()); 545 ULXR_COUT << std::endl << mr3.getXml(0) << std::endl; 546 547 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 548 549 ulxr::MethodCall mc (ULXR_PCHAR("test.call")); 550 ULXR_COUT << ulxr::binaryDebugOutput(mc.getWbXml()); 551 552 ULXR_COUT << std::endl << mc.getXml(0) << std::endl; 553 554 ULXR_COUT << ULXR_PCHAR("====================================================\n"); 555 556 ulxr::Boolean b(true); 557 ulxr::Integer i(123); 558 ulxr::Double d(123.456); 559 ulxr::RpcString s("<>&\"\'string<>&\"\'"); 560 ulxr::DateTime dt(ULXR_PCHAR("20020310T10:23:45")); 561 ulxr::Base64 b64(ULXR_PCHAR("ABASrt466a90")); 562 ulxr::Struct st; 563 ulxr::Array ar; 564 565 ULXR_COUT << ulxr::binaryDebugOutput(b.getWbXml()) << std::endl; 566 ULXR_COUT << b.getXml(0) << std::endl; 567 568 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 569 ULXR_COUT << ulxr::binaryDebugOutput(i.getWbXml()) << std::endl; 570 ULXR_COUT << i.getXml(0) << std::endl; 571 572 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 573 ULXR_COUT << ulxr::binaryDebugOutput(d.getWbXml()) << std::endl; 574 ULXR_COUT << d.getXml(0) << std::endl; 575 576 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 577 ULXR_COUT << ulxr::binaryDebugOutput(s.getWbXml()) << std::endl; 578 ULXR_COUT << s.getXml(0) << std::endl; 579 580 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 581 ULXR_COUT << ulxr::binaryDebugOutput(dt.getWbXml()) << std::endl; 582 ULXR_COUT << dt.getXml(0) << std::endl; 583 584 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 585 ULXR_COUT << ulxr::binaryDebugOutput(b64.getWbXml()) << std::endl; 586 ULXR_COUT << b64.getXml(0) << std::endl; 587 588 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 589 ULXR_COUT << ulxr::binaryDebugOutput(st.getWbXml()) << std::endl; 590 ULXR_COUT << st.getXml(0) << std::endl; 591 592 ULXR_COUT << ULXR_PCHAR("----------------------------------------------------\n"); 593 ULXR_COUT << ulxr::binaryDebugOutput(ar.getWbXml()) << std::endl; 594 ULXR_COUT << ar.getXml(0) << std::endl; 595 596 ULXR_COUT << ULXR_PCHAR("====================================================\n"); 597 598 ULXR_COUT << "wbToken_Value " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Value) << std::endl; 599 ULXR_COUT << "wbToken_Array " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Array) << std::endl; 600 ULXR_COUT << "wbToken_Data " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Data) << std::endl; 601 ULXR_COUT << "wbToken_Struct " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Struct) << std::endl; 602 ULXR_COUT << "wbToken_Member " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Member) << std::endl; 603 ULXR_COUT << "wbToken_Name " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Name) << std::endl; 604 ULXR_COUT << "wbToken_Boolean " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Boolean) << std::endl; 605 ULXR_COUT << "wbToken_Int " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Int) << std::endl; 606 ULXR_COUT << "wbToken_I4 " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_I4) << std::endl; 607 ULXR_COUT << "wbToken_Double " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Double) << std::endl; 608 ULXR_COUT << "wbToken_String " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_String) << std::endl; 609 ULXR_COUT << "wbToken_Base64 " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Base64) << std::endl; 610 ULXR_COUT << "wbToken_Date " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_Date) << std::endl; 611 ULXR_COUT << std::endl; 612 613 ULXR_COUT << "wbToken_MethodCall " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodCallParserWb::wbToken_MethodCall) << std::endl; 614 ULXR_COUT << "wbToken_MethodName " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodCallParserWb::wbToken_MethodName) << std::endl; 615 ULXR_COUT << "wbToken_Params " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodCallParserWb::wbToken_Params) << std::endl; 616 ULXR_COUT << "wbToken_Param " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodCallParserWb::wbToken_Param) << std::endl; 617 ULXR_COUT << std::endl; 618 619 ULXR_COUT << "wbToken_MethodResponse " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodResponseParserWb::wbToken_MethodResponse) << std::endl; 620 ULXR_COUT << "wbToken_Fault " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodResponseParserWb::wbToken_Fault) << std::endl; 621 ULXR_COUT << "wbToken_Params " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodResponseParserWb::wbToken_Params) << std::endl; 622 ULXR_COUT << "wbToken_Param " << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodResponseParserWb::wbToken_Param) << std::endl; 623 ULXR_COUT << std::endl; 624 625 ULXR_COUT << "wbToken_ValueParserLast " 626 << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::ValueParserWb::wbToken_ValueParserLast) << std::endl; 627 628 ULXR_COUT << "wbToken_CallParserLast " 629 << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodCallParserWb::wbToken_CallParserLast) << std::endl; 630 631 ULXR_COUT << "wbToken_ResponseParserLast " 632 << ulxr::HtmlFormHandler::makeHexNumber((unsigned char)ulxr::MethodResponseParserWb::wbToken_ResponseParserLast) << std::endl; 633 634 635 } 636 637 catch(ulxr::Exception &ex) 638 { 639 ULXR_COUT << ULXR_PCHAR("Error occured: ") 640 << ULXR_GET_STRING(ex.why()) << std::endl; 641 success= 1; 642 } 643 #ifdef STRESS_IT 644 } 645 #endif 646 647 return success; 648 } 649 650