// // Created by ling on 24-2-4. // #include #include #include TEST(Option, 选项测试) { ling::Order order({"-pts", "--all", "--ok"}); const auto pts = order.addOption({"-pts", "--pts"}); const auto all = order.addOption({"-all", "--all"}); const auto ok = order.addOption({"--ok", "-ok"}); const auto cancel = order.addOption({"--cancel"}); if (!order.analysis()) { std::cout << order.getError() << std::endl; ASSERT_FALSE("解析出错!"); } ASSERT_TRUE(pts.isOption()); ASSERT_TRUE(all.isOption()); ASSERT_TRUE(ok.isOption()); ASSERT_FALSE(cancel.isOption()); } TEST(Option, 参数测试) { ling::Order order({"-pts", "hello world!", "--all", "--ok"}); const auto pts = order.addOption({"-pts", "--pts"}, ling::Order::Type::STRING); const auto all = order.addOption({"-all", "--all"}); const auto ok = order.addOption({"--ok", "-ok"}); const auto cancel = order.addOption({"--cancel"}); if (!order.analysis()) { std::cout << order.getError() << std::endl; ASSERT_FALSE("解析出错!"); } ASSERT_TRUE(all.isOption()); ASSERT_TRUE(ok.isOption()); ASSERT_FALSE(cancel.isOption()); ASSERT_TRUE(pts.getString() == "hello world!"); } TEST(Option, 异常参数测试) { ling::Order order({"-pts", "--all", "--ok"}); const auto pts = order.addOption({"-pts", "--pts"}, ling::Order::Type::STRING); const auto all = order.addOption({"-all", "--all"}); const auto ok = order.addOption({"--ok", "-ok"}); const auto cancel = order.addOption({"--cancel"}); ASSERT_FALSE(order.analysis()); } TEST(Option, 匿名参数测试) { ling::Order order({"-pts", "hello world!", "hello!", "--all", "--ok"}); order.addAnonymity(1); const auto pts = order.addOption({"-pts", "--pts"}, ling::Order::Type::STRING); const auto all = order.addOption({"-all", "--all"}); const auto ok = order.addOption({"--ok", "-ok"}); const auto cancel = order.addOption({"--cancel"}); if (!order.analysis()) { std::cout << order.getError() << std::endl; ASSERT_FALSE("解析出错!"); } ASSERT_TRUE(all.isOption()); ASSERT_TRUE(ok.isOption()); ASSERT_FALSE(cancel.isOption()); ASSERT_TRUE(pts.getString() == "hello world!"); ASSERT_TRUE(order.getAnonymity().size() == 1); ASSERT_TRUE(order.getAnonymity()[0] == "hello!"); } TEST(Option, 匿名参数测试2) { ling::Order order({"-pts", "hello world!", "hello!", "--all", "--ok", "world"}); order.addAnonymity(2); const auto pts = order.addOption({"-pts", "--pts"}, ling::Order::Type::STRING); const auto all = order.addOption({"-all", "--all"}); const auto ok = order.addOption({"--ok", "-ok"}); const auto cancel = order.addOption({"--cancel"}); if (!order.analysis()) { std::cout << order.getError() << std::endl; ASSERT_FALSE("解析出错!"); } ASSERT_TRUE(all.isOption()); ASSERT_TRUE(ok.isOption()); ASSERT_FALSE(cancel.isOption()); ASSERT_TRUE(pts.getString() == "hello world!"); ASSERT_TRUE(order.getAnonymity().size() == 2); ASSERT_TRUE(order.getAnonymity()[0] == "hello!"); ASSERT_TRUE(order.getAnonymity()[1] == "world"); } TEST(Option, 匿名参数测试3) { ling::Order order({"-pts", "hello world!", "hello!", "--all", "--ok", "world"}); order.addAnonymity(1); const auto pts = order.addOption({"-pts", "--pts"}, ling::Order::Type::STRING); const auto all = order.addOption({"-all", "--all"}); const auto ok = order.addOption({"--ok", "-ok"}); const auto cancel = order.addOption({"--cancel"}); if (order.analysis()) ASSERT_FALSE("匿名参数数量超出限制,但是没有抛出异常!"); } TEST(Option, Help生成) { ling::Order order({"-pts", "hello world!", "hello!", "--all", "--ok", "world"}); order.addAnonymity(1); const auto pts = order.addOption({"-pts", "--pts"}, ling::Order::Type::STRING, "测试参数"); const auto all = order.addOption({"-all", "--all"},"测试参数"); const auto ok = order.addOption({"-ok", "--ok"},"测试参数"); const auto cancel = order.addOption({"--cancel"},"测试参数"); auto help = order.generateHelp("test [选项] .. [参数]\n测试命令"); std::cout << help << std::endl; }