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

Reply via email to