#include "app_helper.hpp" #include "gmock/gmock.h" #include using ::testing::HasSubstr; typedef std::complex cx; CLI::Option* add_option(CLI::App& app, std::string name, cx& variable, std::string description="", bool defaulted=false) { CLI::callback_t fun = [&variable](CLI::results_t res){ if(res.size()!=2) return false; double x,y; bool worked = CLI::detail::lexical_cast(res[0], x) && CLI::detail::lexical_cast(res[1], y); if(worked) variable = cx(x,y); return worked; }; CLI::Option* opt = app.add_option(name, fun, description, defaulted); opt->set_custom_option("COMPLEX", 2); if(defaulted) { std::stringstream out; out << variable; opt->set_default_val(out.str()); } return opt; } TEST_F(TApp, AddingComplexParser) { cx comp {0, 0}; add_option(app, "-c,--complex", comp); args = {"-c", "1.5", "2.5"}; run(); EXPECT_EQ(cx(1.5,2.5), comp); } TEST_F(TApp, DefaultComplex) { cx comp {1, 2}; add_option(app, "-c,--complex", comp, "", true); args = {"-c", "4", "3"}; std::string help = app.help(); EXPECT_THAT(help, HasSubstr("1")); EXPECT_THAT(help, HasSubstr("2")); EXPECT_EQ(cx(1,2), comp); run(); EXPECT_EQ(cx(4,3), comp); }