|
- #include <list>
- #include <vector>
- #include <gtest/gtest.h>
-
- #include <cppargs.h>
-
- struct simple
- {
- int i;
- std::string s;
- double d;
- };
-
- TEST(member_parser, simple_object)
- {
- using parser = ::cppargs::member_parser<simple>;
-
- simple s;
- parser p(
- nullptr,
- parser::make_member_option<simple>({ 'i', "int" }, &simple::i),
- parser::make_member_option<simple>({ 's', "string" }, &simple::s),
- parser::make_member_option<simple>({ 'd', "double" }, &simple::d)
- );
-
- std::vector<const char*> args({
- "/fuu/bar/exe",
- "-i", "123",
- "--string", "fuubar",
- "-d123.123"
- });
- p.parse(s, static_cast<int>(args.size()), args.data());
-
- EXPECT_EQ(s.i, 123);
- EXPECT_EQ(s.s, "fuubar");
- EXPECT_EQ(s.d, 123.123);
- }
-
- struct grouped
- : public simple
- {
- struct group1
- {
- std::list<std::string> list;
- std::vector<int> vec;
- };
-
- group1 g1;
- };
-
- TEST(member_parser, grouped_object)
- {
- using parser = ::cppargs::member_parser<grouped>;
-
- grouped g;
- parser p(
- nullptr,
- parser::make_member_option<grouped>({ 'i', "int" }, &grouped::i),
- parser::make_member_option<grouped>({ 's', "string" }, &grouped::s),
- parser::make_member_option<grouped>({ 'd', "double" }, &grouped::d),
- parser::make_member_group<grouped> ({ }, &grouped::g1,
- parser::make_member_option<grouped::group1>({ 'l', "list" }, &grouped::group1::list),
- parser::make_member_option<grouped::group1>({ 'v', "vector" }, &grouped::group1::vec))
- );
-
- std::vector<const char*> args({
- "/fuu/bar/exe",
- "-i", "123",
- "--string", "fuubar",
- "-d123.123",
- "--list=fuu,bar,baz",
- "--vector", "123", "456", "789"
- });
- p.parse(g, static_cast<int>(args.size()), args.data());
-
- EXPECT_EQ(g.i, 123);
- EXPECT_EQ(g.s, "fuubar");
- EXPECT_EQ(g.d, 123.123);
- EXPECT_EQ(g.g1.list, std::list<std::string>({ "fuu", "bar", "baz" }));
- EXPECT_EQ(g.g1.vec, std::vector<int>({ 123, 456, 789 }));
- }
|