Hello,
I am in despair. The attached source compiles fine, but gives:
$ bin/utf_dataset_loader_issue
Test setup error: test tree is empty
and I don't know why. It is based [Data-driven test cases parametrized
from the command line
<https://www.boost.org/doc/libs/1_73_0/libs/test/doc/html/boost_test/runtime_config/custom_command_line_arguments.html#boost_test.runtime_config.custom_command_line_arguments.data_driven_test_cases_parametri>](https://www.boost.org/doc/libs/1_73_0/libs/test/doc/html/boost_test/runtime_config/custom_command_line_arguments.html#boost_test.runtime_config.custom_command_line_arguments.data_driven_test_cases_parametri)
but reduced to pure API, no cli parse, file loading etc.
Any help is appreciated.
#pragma once
#include <dataset_loader.hpp>
#include <boost/test/data/monomorphic.hpp>
#include <string_view>
class dataset : public dataset_loader {
public:
explicit dataset(std::string_view testcase_group)
: dataset_loader(testcase_group) {
// using compiled builtin defaults and others
// not handled by base class
}
~dataset() = default;
};
namespace boost::unit_test::data::monomorphic {
template <> struct is_dataset<dataset> : boost::mpl::true_ {};
} // namespace boost::unit_test::data::monomorphic
#pragma once
#include <boost/test/data/size.hpp>
#include <string>
#include <string_view>
#include <tuple>
#include <vector>
namespace utf_data = boost::unit_test::data;
/// [Custom command line
/// arguments](https://www.boost.org/doc/libs/1_73_0/libs/test/doc/html/boost_test/runtime_config/custom_command_line_arguments.html)
class dataset_loader {
public:
explicit dataset_loader(std::string_view testcase_group) {}
virtual ~dataset_loader() = default;
public:
enum { arity = 2 };
struct iterator {
using iterator_type = std::vector<std::string>::const_iterator;
iterator(iterator_type input_iter_, iterator_type expected_iter_)
: input_iter{input_iter_}, expected_iter{expected_iter_} {}
std::tuple<std::string, std::string> operator*() const {
return {*input_iter, *expected_iter};
}
void operator++() {
++input_iter;
++expected_iter;
}
private:
iterator_type input_iter;
iterator_type expected_iter;
};
utf_data::size_t size() const { return dataset.input.size(); }
iterator begin() const {
// in real, read data from filesystem into datasets depend on testcase_group
// and argc/argv
return iterator(dataset.input.begin(), dataset.expected.begin());
}
private:
struct test_dataset {
std::vector<std::string> input;
std::vector<std::string> expected;
};
test_dataset mutable dataset;
};
#include <dataset.hpp>
#include <boost/test/data/test_case.hpp>
#include <boost/test/unit_test.hpp>
#include <iostream>
BOOST_AUTO_TEST_SUITE(utf_dataset_loader_issue)
BOOST_DATA_TEST_CASE( // --
abstract_literal, // --
utf_data::make_delayed<dataset>("abstract_literal"),
input, expected)
{}
BOOST_AUTO_TEST_SUITE_END()
#define BOOST_TEST_MODULE Dataset Loader Test Suite
#include <boost/test/unit_test.hpp>
# see [Boost.Test setup error: test tree is
empty](https://stackoverflow.com/questions/67045254/boost-test-setup-error-test-tree-is-empty)
project(utf_dataset_loader_issue)
find_package(Boost 1.73.0
REQUIRED COMPONENTS
unit_test_framework
)
add_executable(${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} PRIVATE
Boost::unit_test_framework
)
target_sources(${PROJECT_NAME} PRIVATE
src/test_main.cpp
src/literal_test.cpp
)
set_source_files_properties(src/test_main.cpp APPEND PROPERTIES
COMPILE_DEFINITIONS "$<$<NOT:$<PLATFORM_ID:Windows>>:BOOST_TEST_DYN_LINK>"
)
target_include_directories(${PROJECT_NAME} PRIVATE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
)
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users