|
- #include <vector>
- #include <gtest/gtest.h>
-
- #include <cppargs.h>
-
- struct config
- {
- std::string config;
-
- struct database
- {
- std::string host;
- uint16_t port;
- std::string password;
- }
- database;
-
- struct logging
- {
- std::string file;
- std::string level;
- std::string name;
- }
- logging;
- };
-
- using parser = ::cppargs::member_parser<config>;
-
- TEST(misc, print_help)
- {
- parser p(
- nullptr,
-
- parser::make_member_option<config>(
- ::cppargs::option_meta()
- .set_short_name ('c')
- .set_long_name ("config")
- .set_arguments (::cppargs::enwrap_type("filename", false))
- .set_description("Specify a configuration file to load config values from.")
- .set_mandatory (true),
- &config::config),
-
- // parser::make_group<std::string>({ }),
-
- /* database */
- parser::make_member_group<config>(
- ::cppargs::group_meta()
- .set_name("Database")
- .set_description("The following parameters are database related."),
- &config::database,
- parser::make_member_option<struct config::database>(
- ::cppargs::option_meta()
- .set_long_name ("database:host")
- .set_description("Database host to connect to."),
- &config::database::host),
- parser::make_member_option<struct config::database>(
- ::cppargs::option_meta()
- .set_long_name ("database:port")
- .set_description("Database port to connect to."),
- &config::database::port),
- parser::make_member_option<struct config::database>(
- ::cppargs::option_meta()
- .set_long_name ("database:password")
- .set_description("Password to use for authenticatiom"),
- &config::database::password)),
-
- /* logging */
- parser::make_member_group<config>(
- ::cppargs::group_meta()
- .set_name("Logging"),
- &config::logging,
- parser::make_member_option<struct config::logging>(
- ::cppargs::option_meta()
- .set_long_name ("logging:file")
- .set_arguments (::cppargs::enwrap_type("filename", false))
- .set_description("File to write log output to."),
- &config::logging::file),
- parser::make_member_option<struct config::logging>(
- ::cppargs::option_meta()
- .set_long_name ("logging:level")
- .set_description("Log Level."),
- &config::logging::level),
- parser::make_member_option<struct config::logging>(
- ::cppargs::option_meta()
- .set_long_name ("logging:name")
- .set_description("Default name of the logger."),
- &config::logging::name)));
-
- std::ostringstream ss;
- p.print_help(ss);
-
- std::cout << ss.str();
- }
|