2
0
mirror of https://github.com/boostorg/test.git synced 2026-02-11 12:12:11 +00:00
Files
test/test/framework-ts/message-in-datatestcase-test.cpp
Raffi Enficiaud fcb302b66e Indicating the log level to the formatters for the contexts
- unit tests for the message part: for checking the dataset, we need to register it and then to re-run it under our own environment (so technically it runs twice in the test module)
- refactoring of tests for reusing the stream checker that is agnostic to filenames location, testing time, etc. Modifying the baseline outputs accordingly
2017-07-06 11:45:33 +02:00

138 lines
4.5 KiB
C++

// (C) Copyright Raffi Enficiaud 2017.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org/libs/test for the library home page.
#define BOOST_TEST_MODULE message in dataset
#include <boost/test/unit_test.hpp>
#include <boost/test/unit_test_suite.hpp>
#include <boost/test/unit_test_log.hpp>
#include <boost/test/results_collector.hpp>
#include <boost/test/data/monomorphic.hpp>
#include <boost/test/data/test_case.hpp>
#include <boost/test/framework.hpp>
#include <boost/test/unit_test_parameters.hpp>
#include <boost/test/utils/nullstream.hpp>
#include "logger-for-tests.hpp"
// STL
#include <iostream>
#include <ios>
using boost::test_tools::output_test_stream;
using namespace boost::unit_test;
#line 34
std::string filenames[] = { "util/test_image1.jpg", "util/test_image2.jpg" };
BOOST_DATA_TEST_CASE(test_update,
boost::unit_test::data::make(filenames))
{
std::string field_name = "Volume";
int value = 100;
BOOST_TEST_MESSAGE("Testing update :");
BOOST_TEST_MESSAGE("Update " << field_name << " with " << value);
}
void check_pattern_loggers(
output_test_stream& output,
output_format log_format,
test_unit_id id,
bool bt_module_failed = false,
log_level ll = log_successful_tests )
{
boost::unit_test::unit_test_log.set_format(log_format);
boost::unit_test::unit_test_log.set_stream(output);
boost::unit_test::unit_test_log.set_threshold_level(ll);
// output before fixture registration
output << "* " << log_format << "-format *******************************************************************";
output << std::endl;
framework::finalize_setup_phase( id );
bool setup_error_caught = false;
try {
framework::run( id, false ); // do not continue the test tree to have the test_log_start/end
}
catch (framework::setup_error&) {
BOOST_TEST_MESSAGE("Framework setup_error caught");
setup_error_caught = true;
}
output << std::endl;
// we do not want the result of the comparison go to the "output" stream
boost::unit_test::unit_test_log.set_format(OF_CLF);
boost::unit_test::unit_test_log.set_stream(std::cout);
BOOST_TEST( bt_module_failed == (( results_collector.results( id ).result_code() != 0 ) ));
BOOST_TEST( output.match_pattern(true) ); // flushes the stream at the end of the comparison.
}
void check_pattern_loggers(
output_test_stream& output,
test_suite* ts,
bool bt_module_failed = false)
{
ts->p_default_status.value = test_unit::RS_ENABLED;
check_pattern_loggers( output, OF_CLF, ts->p_id, bt_module_failed );
check_pattern_loggers( output, OF_XML, ts->p_id, bt_module_failed );
check_pattern_loggers( output, OF_JUNIT, ts->p_id, bt_module_failed, log_successful_tests );
check_pattern_loggers( output, OF_JUNIT, ts->p_id, bt_module_failed, log_cpp_exception_errors ); // should branch to the log log_all_errors
}
struct guard {
~guard()
{
boost::unit_test::unit_test_log.set_format( runtime_config::get<output_format>( runtime_config::btrt_log_format ) );
boost::unit_test::unit_test_log.set_stream( std::cout );
}
};
//____________________________________________________________________________//
BOOST_AUTO_TEST_CASE( messages_in_datasets )
{
guard G;
ut_detail::ignore_unused_variable_warning( G );
#define PATTERN_FILE_NAME "messages-in-datasets-test.pattern"
std::string pattern_file_name(
framework::master_test_suite().argc == 1
? (runtime_config::save_pattern() ? PATTERN_FILE_NAME : "./baseline-outputs/" PATTERN_FILE_NAME )
: framework::master_test_suite().argv[1] );
output_test_stream_for_loggers test_output( pattern_file_name,
!runtime_config::save_pattern(),
true,
__FILE__ );
auto dataset = boost::unit_test::data::make(filenames);
test_unit_generator const& generator = boost::unit_test::data::ds_detail::test_case_gen<test_updatecase, decltype(dataset)>(
"fake_name",
__FILE__,
200,
std::forward<decltype(dataset)>(dataset) );
test_suite* ts = BOOST_TEST_SUITE( "fake_datatest_case" );
while(test_unit *tu = generator.next()) {
ts->add(tu);
}
check_pattern_loggers(test_output, ts);
}