Esempio n. 1
0
void TestSuite::run_case(
    ITestCaseFactory&   test_case_factory,
    ITestListener&      test_listener,
    TestResult&         test_case_result) const
{
    test_case_result.signal_case_execution();

    try
    {
        auto_ptr<ITestCase> test_case(test_case_factory.create());

        test_case->run(test_listener, test_case_result);

        if (test_case_result.get_assertion_failure_count() > 0)
            test_case_result.signal_case_failure();
    }
    catch (const ExceptionAssertionFailure&)
    {
        test_case_result.signal_case_failure();
    }
#ifdef NDEBUG
    catch (const exception& e)
    {
        TestListenerHelper::write(
            test_listener,
            *this,
            test_case_factory.get_name(),
            __FILE__,
            __LINE__,
            TestMessage::TestCaseFailure,
            "an unexpected exception was caught: %s.",
            e.what());

        test_case_result.signal_case_failure();
    }
    catch (...)
    {
        TestListenerHelper::write(
            test_listener,
            *this,
            test_case_factory.get_name(),
            __FILE__,
            __LINE__,
            TestMessage::TestCaseFailure,
            "an unexpected exception was caught (no details available).");

        test_case_result.signal_case_failure();
    }
#endif
}
Esempio n. 2
0
void TestSuite::run_suite(
    const IFilter&  filter,
    ITestListener&  test_listener,
    TestResult&     test_suite_result,
    TestResult&     cumulated_result) const
{
    TestResult local_cumulated_result(cumulated_result);
    local_cumulated_result.merge(test_suite_result);

    bool has_begun_suite = false;

    for (size_t i = 0; i < impl->m_factories.size(); ++i)
    {
        ITestCaseFactory* factory = impl->m_factories[i];

        // Skip test cases that aren't let through by the filter.
        if (!filter.accepts(factory->get_name()))
            continue;

        if (!has_begun_suite)
        {
            // Tell the listener that a test suite is about to be executed.
            test_listener.begin_suite(*this);
            test_suite_result.signal_suite_execution();
            has_begun_suite = true;
        }

        // Instantiate the test case.
        auto_ptr<ITestCase> test_case(factory->create());

        // Tell the listener that a test case is about to be executed.
        test_listener.begin_case(*this, *test_case.get());

        // Run the test case.
        TestResult test_case_result;
        run_case(
            *test_case.get(),
            test_listener,
            test_case_result);

        // Accumulate the test results.
        test_suite_result.merge(test_case_result);
        local_cumulated_result.merge(test_case_result);

        // Tell the listener that the test case execution has ended.
        test_listener.end_case(
            *this,
            *test_case.get(),
            test_suite_result,
            test_case_result,
            local_cumulated_result);
    }

    if (has_begun_suite)
    {
        // Report a test suite failure if one or more test cases failed.
        if (test_suite_result.get_case_failure_count() > 0)
            test_suite_result.signal_suite_failure();

        // Tell the listener that the test suite execution has ended.
        test_listener.end_suite(
            *this,
            test_suite_result,
            cumulated_result);
    }
}