⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.cpp

📁 一个很好用的解析
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        } 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 + -