You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 line
3.1 KiB

  1. #include <vector>
  2. #include <gtest/gtest.h>
  3. #include <cppargs.h>
  4. struct config
  5. {
  6. std::string config;
  7. struct database
  8. {
  9. std::string host;
  10. uint16_t port;
  11. std::string password;
  12. }
  13. database;
  14. struct logging
  15. {
  16. std::string file;
  17. std::string level;
  18. std::string name;
  19. }
  20. logging;
  21. };
  22. using parser = ::cppargs::member_parser<config>;
  23. TEST(misc, print_help)
  24. {
  25. parser p(
  26. nullptr,
  27. parser::make_member_option<config>(
  28. ::cppargs::option_meta()
  29. .set_short_name ('c')
  30. .set_long_name ("config")
  31. .set_arguments (::cppargs::enwrap_type("filename", false))
  32. .set_description("Specify a configuration file to load config values from.")
  33. .set_mandatory (true),
  34. &config::config),
  35. // parser::make_group<std::string>({ }),
  36. /* database */
  37. parser::make_member_group<config>(
  38. ::cppargs::group_meta()
  39. .set_name("Database")
  40. .set_description("The following parameters are database related."),
  41. &config::database,
  42. parser::make_member_option<struct config::database>(
  43. ::cppargs::option_meta()
  44. .set_long_name ("database:host")
  45. .set_description("Database host to connect to."),
  46. &config::database::host),
  47. parser::make_member_option<struct config::database>(
  48. ::cppargs::option_meta()
  49. .set_long_name ("database:port")
  50. .set_description("Database port to connect to."),
  51. &config::database::port),
  52. parser::make_member_option<struct config::database>(
  53. ::cppargs::option_meta()
  54. .set_long_name ("database:password")
  55. .set_description("Password to use for authenticatiom"),
  56. &config::database::password)),
  57. /* logging */
  58. parser::make_member_group<config>(
  59. ::cppargs::group_meta()
  60. .set_name("Logging"),
  61. &config::logging,
  62. parser::make_member_option<struct config::logging>(
  63. ::cppargs::option_meta()
  64. .set_long_name ("logging:file")
  65. .set_arguments (::cppargs::enwrap_type("filename", false))
  66. .set_description("File to write log output to."),
  67. &config::logging::file),
  68. parser::make_member_option<struct config::logging>(
  69. ::cppargs::option_meta()
  70. .set_long_name ("logging:level")
  71. .set_description("Log Level."),
  72. &config::logging::level),
  73. parser::make_member_option<struct config::logging>(
  74. ::cppargs::option_meta()
  75. .set_long_name ("logging:name")
  76. .set_description("Default name of the logger."),
  77. &config::logging::name)));
  78. std::ostringstream ss;
  79. p.print_help(ss);
  80. std::cout << ss.str();
  81. }