Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

103 rader
2.2 KiB

  1. #include <vector>
  2. #include <gtest/gtest.h>
  3. #include <cppargs.h>
  4. using parser = ::cppargs::simple_parser;
  5. TEST(simple_parser, short_name_seperate_arg)
  6. {
  7. std::string s;
  8. parser p(
  9. nullptr,
  10. parser::make_reference_option({ 's', "string" }, s)
  11. );
  12. std::vector<const char*> args({
  13. "/fuu/bar/exe", "-s", "fuu"
  14. });
  15. p.parse(static_cast<int>(args.size()), args.data());
  16. EXPECT_EQ(s, "fuu");
  17. }
  18. TEST(simple_parser, long_name_seperate_arg)
  19. {
  20. int i;
  21. parser p(
  22. nullptr,
  23. parser::make_reference_option({ 'i', "int" }, i)
  24. );
  25. std::vector<const char*> args({
  26. "/fuu/bar/exe", "--int", "123"
  27. });
  28. p.parse(static_cast<int>(args.size()), args.data());
  29. EXPECT_EQ(i, 123);
  30. }
  31. TEST(simple_parser, short_name_same_arg)
  32. {
  33. double d;
  34. parser p(
  35. nullptr,
  36. parser::make_reference_option({ 'd', "double" }, d)
  37. );
  38. std::vector<const char*> args({
  39. "/fuu/bar/exe", "-d0.2"
  40. });
  41. p.parse(static_cast<int>(args.size()), args.data());
  42. EXPECT_EQ(d, 0.2);
  43. }
  44. TEST(simple_parser, long_name_same_arg)
  45. {
  46. std::string s;
  47. parser p(
  48. nullptr,
  49. parser::make_reference_option({ 's', "string" }, s)
  50. );
  51. std::vector<const char*> args({
  52. "/fuu/bar/exe", "--string=fuubar"
  53. });
  54. p.parse(static_cast<int>(args.size()), args.data());
  55. EXPECT_EQ(s, "fuubar");
  56. }
  57. TEST(simple_parser, vector_extra_arg)
  58. {
  59. std::vector<int> vec;
  60. parser p(
  61. parser::make_predicate_option({ }, [](auto){ }),
  62. parser::make_reference_option({ 'v', "vec" }, vec)
  63. );
  64. std::vector<const char*> args({
  65. "/fuu/bar/exe", "--vec", "1", "2", "3", "4", "5", "-i"
  66. });
  67. p.parse(static_cast<int>(args.size()), args.data());
  68. EXPECT_EQ(vec, std::vector<int>({ 1, 2, 3, 4, 5 }));
  69. }
  70. TEST(simple_parser, vector_same_arg)
  71. {
  72. std::vector<int> vec;
  73. parser p(
  74. parser::make_predicate_option({ }, [](auto){ }),
  75. parser::make_reference_option({ 'v', "vec" }, vec)
  76. );
  77. std::vector<const char*> args({
  78. "/fuu/bar/exe", "--vec=1,2,3,4,5", "-i"
  79. });
  80. p.parse(static_cast<int>(args.size()), args.data());
  81. EXPECT_EQ(vec, std::vector<int>({ 1, 2, 3, 4, 5 }));
  82. }