📄 test.cpp
字号:
} catch (error) {} }};class nilTestSuite : public testSuite {public: virtual string suiteName() { return "nilTestSuite"; } virtual void runtests(unsigned int const) { value_nil nil1; value val1(nil1); TEST(val1.type() == value::TYPE_NIL); value_nil nil2(val1); try { value_nil nil4(value_int(4)); TEST_FAILED("invalid cast int-nil suceeded"); } catch (error) {} }};class structTestSuite : public testSuite {public: virtual string suiteName() { return "structTestSuite"; } virtual void runtests(unsigned int const) { map<string, value> structData; pair<string, value> member("the_integer", value_int(9)); structData.insert(member); value_struct struct1(structData); map<string, value> dataReadBack(struct1); TEST(static_cast<int>(value_int(dataReadBack["the_integer"])) == 9); value val1(struct1); TEST(val1.type() == value::TYPE_STRUCT); value_struct struct2(val1); try { value_struct struct4(value_int(4)); TEST_FAILED("invalid cast int-struct suceeded"); } catch (error) {} }};class arrayTestSuite : public testSuite {public: virtual string suiteName() { return "arrayTestSuite"; } virtual void runtests(unsigned int const) { vector<value> arrayData; arrayData.push_back(value_int(7)); arrayData.push_back(value_double(2.78)); arrayData.push_back(value_string("hello world")); value_array array1(arrayData); TEST(array1.size() == 3); vector<value> dataReadBack1(array1.vectorValueValue()); TEST(dataReadBack1[0].type() == value::TYPE_INT); TEST(static_cast<int>(value_int(dataReadBack1[0])) == 7); TEST(dataReadBack1[1].type() == value::TYPE_DOUBLE); TEST(static_cast<double>(value_double(dataReadBack1[1])) == 2.78); TEST(dataReadBack1[2].type() == value::TYPE_STRING); TEST(static_cast<string>(value_string(dataReadBack1[2])) == "hello world"); value val1(array1); TEST(val1.type() == value::TYPE_ARRAY); value_array array2(val1); TEST(array2.size() == 3); try { value_array array4(value_int(4)); TEST_FAILED("invalid cast int-array suceeded"); } catch (error) {} }};class valueTestSuite : public testSuite {public: virtual string suiteName() { return "valueTestSuite"; } virtual void runtests(unsigned int const indentation) { intTestSuite().run(indentation+1); doubleTestSuite().run(indentation+1); booleanTestSuite().run(indentation+1); datetimeTestSuite().run(indentation+1); stringTestSuite().run(indentation+1); bytestringTestSuite().run(indentation+1); nilTestSuite().run(indentation+1); structTestSuite().run(indentation+1); arrayTestSuite().run(indentation+1); }};namespace {string const noElementFoundXml( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<methodResponse>\r\n" "<fault>\r\n" "<value><struct>\r\n" "<member><name>faultCode</name>\r\n" "<value><i4>-503</i4></value></member>\r\n" "<member><name>faultString</name>\r\n" "<value><string>Call XML not a proper XML-RPC call. " "Call is not valid XML. no element found</string></value>" "</member>\r\n" "</struct></value>\r\n" "</fault>\r\n" "</methodResponse>\r\n" );string const sampleAddGoodCallXml( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<methodCall>\r\n" "<methodName>sample.add</methodName>\r\n" "<params>\r\n" "<param><value><i4>5</i4></value></param>\r\n" "<param><value><i4>7</i4></value></param>\r\n" "</params>\r\n" "</methodCall>\r\n" );string const sampleAddGoodResponseXml( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<methodResponse>\r\n" "<params>\r\n" "<param><value><i4>12</i4></value></param>\r\n" "</params>\r\n" "</methodResponse>\r\n" );string const sampleAddBadCallXml( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<methodCall>\r\n" "<methodName>sample.add</methodName>\r\n" "<params>\r\n" "<param><value><i4>5</i4></value></param>\r\n" "</params>\r\n" "</methodCall>\r\n" );string const sampleAddBadResponseXml( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<methodResponse>\r\n" "<fault>\r\n" "<value><struct>\r\n" "<member><name>faultCode</name>\r\n" "<value><i4>-501</i4></value></member>\r\n" "<member><name>faultString</name>\r\n" "<value><string>Not enough parameters</string></value></member>\r\n" "</struct></value>\r\n" "</fault>\r\n" "</methodResponse>\r\n" );string const nonexistentMethodCallXml( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<methodCall>\r\n" "<methodName>nosuchmethod</methodName>\r\n" "<params>\r\n" "<param><value><i4>5</i4></value></param>\r\n" "<param><value><i4>7</i4></value></param>\r\n" "</params>\r\n" "</methodCall>\r\n" );string const nonexistentMethodYesDefResponseXml( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<methodResponse>\r\n" "<params>\r\n" "<param><value><string>no such method: nosuchmethod</string>" "</value></param>\r\n" "</params>\r\n" "</methodResponse>\r\n" );string const nonexistentMethodNoDefResponseXml( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" "<methodResponse>\r\n" "<fault>\r\n" "<value><struct>\r\n" "<member><name>faultCode</name>\r\n" "<value><i4>-506</i4></value></member>\r\n" "<member><name>faultString</name>\r\n" "<value><string>Method 'nosuchmethod' not defined</string></value>" "</member>\r\n" "</struct></value>\r\n" "</fault>\r\n" "</methodResponse>\r\n" );} // namespaceclass paramListTestSuite : public testSuite {public: virtual string suiteName() { return "paramListTestSuite"; } virtual void runtests(unsigned int const) { paramList paramList1; TEST(paramList1.size() == 0); paramList1.add(value_int(7)); paramList1.add(value_boolean(true)); paramList1.add(value_double(3.14)); time_t const timeZero(0); paramList1.add(value_datetime(timeZero)); time_t const timeFuture(time(NULL)+100); paramList1.add(value_datetime(timeFuture)); paramList1.add(value_string("hello world")); unsigned char bytestringArray[] = {0x10, 0x11, 0x12, 0x13, 0x14}; vector<unsigned char> bytestringData(&bytestringArray[0], &bytestringArray[4]); paramList1.add(value_bytestring(bytestringData)); vector<value> arrayData; arrayData.push_back(value_int(7)); arrayData.push_back(value_double(2.78)); arrayData.push_back(value_string("hello world")); paramList1.add(value_array(arrayData)); map<string, value> structData; pair<string, value> member("the_integer", value_int(9)); structData.insert(member); paramList1.add(value_struct(structData)); paramList1.add(value_nil()); TEST(paramList1.size() == 10); TEST(paramList1.getInt(0) == 7); TEST(paramList1.getInt(0, 7) == 7); TEST(paramList1.getInt(0, -5, 7) == 7); TEST(paramList1.getBoolean(1) == true); TEST(paramList1.getDouble(2) == 3.14); TEST(paramList1.getDouble(2, 1) == 3.14); TEST(paramList1.getDouble(2, 1, 4) == 3.14); TEST(paramList1.getDatetime_sec(3) == 0); TEST(paramList1.getDatetime_sec(3, paramList::TC_ANY) == timeZero); TEST(paramList1.getDatetime_sec(3, paramList::TC_NO_FUTURE) == timeZero); TEST(paramList1.getDatetime_sec(4, paramList::TC_NO_PAST) == timeFuture); TEST(paramList1.getString(5) == "hello world"); TEST(paramList1.getBytestring(6)[0] == 0x10); TEST(paramList1.getArray(7).size() == 3); TEST(paramList1.getArray(7, 3).size() == 3); TEST(paramList1.getArray(7, 1, 3).size() == 3); paramList1.getStruct(8)["the_integer"]; paramList1.getNil(9); paramList1.verifyEnd(10); paramList paramList2(5); TEST(paramList2.size() == 0); }};class registryRegMethodTestSuite : public testSuite {public: virtual string suiteName() { return "registryRegMethodTestSuite"; } virtual void runtests(unsigned int) { xmlrpc_c::registry myRegistry; myRegistry.addMethod("sample.add", xmlrpc_c::methodPtr(new sampleAddMethod)); myRegistry.disableIntrospection(); { string response; myRegistry.processCall("", &response); TEST(response == noElementFoundXml); } { string response; myRegistry.processCall(sampleAddGoodCallXml, &response); TEST(response == sampleAddGoodResponseXml); } { string response; myRegistry.processCall(sampleAddBadCallXml, &response); TEST(response == sampleAddBadResponseXml); } }};class registryDefaultMethodTestSuite : public testSuite {public: virtual string suiteName() { return "registryDefaultMethodTestSuite"; } virtual void runtests(unsigned int) { xmlrpc_c::registry myRegistry; myRegistry.addMethod("sample.add", methodPtr(new sampleAddMethod)); { string response; myRegistry.processCall(sampleAddGoodCallXml, &response); TEST(response == sampleAddGoodResponseXml); } { string response; myRegistry.processCall(nonexistentMethodCallXml, &response); TEST(response == nonexistentMethodNoDefResponseXml); } // We're actually violating the spirit of setDefaultMethod by // doing this to a registry that's already been used, but as long // as it works, it's a convenient way to implement this test. myRegistry.setDefaultMethod(defaultMethodPtr(new nameMethod)); { string response; myRegistry.processCall(nonexistentMethodCallXml, &response); TEST(response == nonexistentMethodYesDefResponseXml); } }};class registryTestSuite : public testSuite {public: virtual string suiteName() { return "registryTestSuite"; } virtual void runtests(unsigned int const indentation) { registryRegMethodTestSuite().run(indentation+1); registryDefaultMethodTestSuite().run(indentation+1); }};//=========================================================================// Test Driver//=========================================================================int main(int argc, char**) { int retval; if (argc-1 > 0) { cout << "Program takes no arguments" << endl; exit(1); } bool testsPassed; try { // Add your test suites here. valueTestSuite().run(0); paramListTestSuite().run(0); registryTestSuite().run(0); serverAbyssTestSuite().run(0); clientTestSuite().run(0); testXmlRpcCpp(); testsPassed = true; } catch (error const& error) { cout << "Unexpected error thrown: " << error.what() << endl; testsPassed = false; } catch (XmlRpcFault const& fault) { cout << "Unexpected XML-RPC fault when running test suites." << endl << "Fault #" << fault.getFaultCode() << ": " << fault.getFaultString() << endl; testsPassed = false; } catch (...) { cout << "Unexpected exception when running test suites." << endl; testsPassed = false; } if (testsPassed) { cout << "PASSED" << endl; retval = 0; } else { cout << "FAILED" << endl; retval = 1; } return retval;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -