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

📄 callback.cpp

📁 VC源码,开源测试工具.有助于VC++的学习与开发
💻 CPP
字号:
#include <tut/tut.hpp>#include <string>#include <stdexcept>#include <vector>using std::vector;using std::string;using std::runtime_error;namespace tut{/** * Tests order and validity of calling callback methods * for various test results. */struct callback_test{    vector<int> called;    vector<string> grps;    string msg;    test_runner tr;    struct dummy    {    };        typedef test_group<dummy> tf;    typedef tf::object object;    tf factory;    tf factory2;    enum event     {         RUN_STARTED = 100,        GROUP_STARTED,        GROUP_COMPLETED,        TEST_COMPLETED,        RUN_COMPLETED     };    struct chk_callback : public tut::callback    {        callback_test& ct;        chk_callback(callback_test& c) : ct(c)        {        };        void run_started()        {            ct.called.push_back(RUN_STARTED);        };        void group_started(const string& name)        {            ct.called.push_back(GROUP_STARTED);            ct.grps.push_back(name);        };        void group_completed(const string& name)        {            if( ct.grps.size() == 0 )            {                throw runtime_error("group_completed: groups empty");            }            string current_group = ct.grps[ct.grps.size()-1];            if( name != current_group )            {                throw runtime_error("group_completed: group mismatch: " +                     name + " vs " + current_group);            }            ct.called.push_back(GROUP_COMPLETED);            ct.grps.push_back(name + ".completed");        };        void test_completed(const test_result& tr)        {            if( ct.grps.size() == 0 )            {                throw runtime_error("test_completed: groups empty");            }            string current_group = ct.grps[ct.grps.size() - 1];            if( tr.group != current_group )            {                throw runtime_error("test_completed: group mismatch: " +                     tr.group + " vs " + current_group);            }            ct.called.push_back(TEST_COMPLETED);            ct.msg = tr.message;        };        void run_completed()        {            ct.called.push_back(RUN_COMPLETED);        };    } callback;    callback_test();};// ==================================// tests of internal runner// ==================================template<>template<>void callback_test::object::test<1>(){    // OK}template<>template<>void callback_test::object::test<3>(){    throw std::runtime_error("an error");}callback_test::callback_test() :        factory("internal",tr),factory2("0copy",tr), callback(*this){}// ==================================// tests of controlling runner// ==================================typedef test_group<callback_test> tf;typedef tf::object object;tf callback_test("callback");/** * running one test which finished ok */template<>template<>void object::test<1>(){    set_test_name("running one test which finished ok");        tr.set_callback(&callback);    tr.run_test("internal", 1);    ensure_equals("size", called.size(), 5U);    ensure_equals("0", called[0], RUN_STARTED);    ensure_equals("1", called[1], GROUP_STARTED);    ensure_equals("2", called[2], TEST_COMPLETED);    ensure_equals("4", called[3], GROUP_COMPLETED);    ensure_equals("5", called[4], RUN_COMPLETED);    ensure_equals("msg", msg, "");    ensure_equals("grp", grps[0], "internal");    ensure_equals("grp", grps[1], "internal.completed");}/** * running one test throwing exception */template<>template<>void object::test<2>(){    set_test_name("running one test throwing exception");        tr.set_callback(&callback);    tr.run_test("internal", 3);    ensure_equals("size", called.size(), 5U);    ensure(called[0] == RUN_STARTED);    ensure(called[1] == GROUP_STARTED);    ensure(called[2] == TEST_COMPLETED);    ensure(called[3] == GROUP_COMPLETED);    ensure(called[4] == RUN_COMPLETED);    ensure_equals("msg", msg, "an error");    ensure_equals("grp", grps[0], "internal");    ensure_equals("grp", grps[1], "internal.completed");}/** * running all tests in one group */template<>template<>void object::test<3>(){    set_test_name("running all tests in one group");        tr.set_callback(&callback);    tr.run_tests("internal");    ensure_equals("0", called[0], RUN_STARTED);    ensure_equals("1", called[1], GROUP_STARTED);    ensure_equals("2", called[2], TEST_COMPLETED);    ensure_equals("3", called[3], TEST_COMPLETED);    ensure_equals("4", called[4], GROUP_COMPLETED);    ensure_equals("5", called[5], RUN_COMPLETED);    ensure_equals("msg", msg, "an error");    ensure_equals("grp[0]", grps[0], "internal");    ensure_equals("grp[1]", grps[1], "internal.completed");}/** * running all tests in non-existing group */template<>template<>void object::test<4>(){    set_test_name("running all tests in non-existing group");        tr.set_callback(&callback);    try    {        tr.run_tests("ooops!");        fail("gotta throw an exception");    }    catch (const no_such_group&)    {    }    ensure_equals("0", called[0], RUN_STARTED);    ensure_equals("1", called[1], RUN_COMPLETED);}/** * running all tests in all groups */template<>template<>void object::test<5>(){    set_test_name("running all tests in all groups");        tr.set_callback(&callback);    tr.run_tests();    ensure_equals("0", called[0], RUN_STARTED);    ensure_equals("1", called[1], GROUP_STARTED);    ensure_equals("2", called[2], TEST_COMPLETED);    ensure_equals("3", called[3], TEST_COMPLETED);    ensure_equals("4", called[4], GROUP_COMPLETED);    ensure_equals("5", called[5], GROUP_STARTED);    ensure_equals("6", called[6], TEST_COMPLETED);    ensure_equals("7", called[7], TEST_COMPLETED);    ensure_equals("8", called[8], GROUP_COMPLETED);    ensure_equals("9", called[9], RUN_COMPLETED);    ensure_equals("msg", msg, "an error");    ensure_equals("grp[0]", grps[0], "0copy");    ensure_equals("grp[1]", grps[1], "0copy.completed");    ensure_equals("grp[2]", grps[2], "internal");    ensure_equals("grp[3]", grps[3], "internal.completed");}/** * running one test which doesn't exist */template<>template<>void object::test<6>(){    set_test_name("running one test which doesn't exist");        tr.set_callback(&callback);    try    {        tr.run_test("internal", 100);        fail();    }    catch(const std::exception&)    {    }    ensure_equals("size", called.size(), 4U);    ensure_equals("0", called[0], RUN_STARTED);    ensure_equals("1", called[1], GROUP_STARTED);    ensure_equals("2", called[2], GROUP_COMPLETED);    ensure_equals("3", called[3], RUN_COMPLETED);    ensure_equals("msg", msg, "");    ensure_equals("grp", grps[0], "internal");    ensure_equals("grp", grps[1], "internal.completed");}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -