tests+ci: Enable dual XML and HRF output of unit test results
This commit also makes unit tests to run against a debug build, to ensure assertions are properly evaluated (based on suggestion in I5f4419ea48d4eb333e9d107115ef3df4123f76e5). Change-Id: I1bbf14f75aab155ed80a36fc4006f7a5d13f1289 Refs: #2252, #2805
This commit is contained in:
+79
-2
@@ -22,7 +22,84 @@
|
||||
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
|
||||
#define BOOST_TEST_MAIN 1
|
||||
#define BOOST_TEST_DYN_LINK 1
|
||||
#define BOOST_TEST_NO_MAIN
|
||||
#define BOOST_TEST_DYN_LINK
|
||||
#define BOOST_TEST_ALTERNATIVE_INIT_API
|
||||
|
||||
#include "boost-test.hpp"
|
||||
#include "boost-multi-log-formatter.hpp"
|
||||
|
||||
#include <boost/program_options/options_description.hpp>
|
||||
#include <boost/program_options/variables_map.hpp>
|
||||
#include <boost/program_options/parsers.hpp>
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
static bool
|
||||
init_tests()
|
||||
{
|
||||
init_unit_test();
|
||||
|
||||
namespace po = boost::program_options;
|
||||
namespace ut = boost::unit_test;
|
||||
|
||||
po::options_description extraOptions;
|
||||
std::string logger;
|
||||
std::string outputFile = "-";
|
||||
extraOptions.add_options()
|
||||
("log_format2", po::value<std::string>(&logger), "Type of second log formatter: HRF or XML")
|
||||
("log_sink2", po::value<std::string>(&outputFile)->default_value(outputFile), "Second log sink, - for stdout")
|
||||
;
|
||||
po::variables_map vm;
|
||||
try {
|
||||
po::store(po::command_line_parser(ut::framework::master_test_suite().argc,
|
||||
ut::framework::master_test_suite().argv)
|
||||
.options(extraOptions)
|
||||
.run(),
|
||||
vm);
|
||||
po::notify(vm);
|
||||
}
|
||||
catch (const std::exception& e) {
|
||||
std::cerr << "ERROR: " << e.what() << "\n"
|
||||
<< extraOptions << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (vm.count("log_format2") == 0) {
|
||||
// second logger is not configured
|
||||
return true;
|
||||
}
|
||||
|
||||
std::shared_ptr<ut::unit_test_log_formatter> formatter;
|
||||
if (logger == "XML") {
|
||||
formatter = std::make_shared<ut::output::xml_log_formatter>();
|
||||
}
|
||||
else if (logger == "HRF") {
|
||||
formatter = std::make_shared<ut::output::compiler_log_formatter>();
|
||||
}
|
||||
else {
|
||||
std::cerr << "ERROR: only HRF or XML log formatter can be specified" << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::shared_ptr<std::ostream> output;
|
||||
if (outputFile == "-") {
|
||||
output = std::shared_ptr<std::ostream>(&std::cout, std::bind([]{}));
|
||||
}
|
||||
else {
|
||||
output = std::make_shared<std::ofstream>(outputFile.c_str());
|
||||
}
|
||||
|
||||
auto multiFormatter = new ut::output::multi_log_formatter;
|
||||
multiFormatter->add(formatter, output);
|
||||
ut::unit_test_log.set_formatter(multiFormatter);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char* argv[])
|
||||
{
|
||||
return ::boost::unit_test::unit_test_main(&init_tests, argc, argv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user