From 772bfbeb1558419ba00ce2afd9251682531d0560 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Thu, 11 Dec 2025 20:16:36 +0800 Subject: [PATCH] test: add resolver test for clap --- test/yycc/carton/clap.cpp | 209 ++++++++++++++++++++++++++++++-------- 1 file changed, 165 insertions(+), 44 deletions(-) diff --git a/test/yycc/carton/clap.cpp b/test/yycc/carton/clap.cpp index 9f060e3..a8f52c4 100644 --- a/test/yycc/carton/clap.cpp +++ b/test/yycc/carton/clap.cpp @@ -10,6 +10,8 @@ namespace yycctest::carton::clap { using Token = CLAP::types::Token; namespace validator = CLAP::validator; +#pragma region Clap Builder + // YYC MARK: // GoogleTest do not allow use TEST and TEST_F in the same test suite // So I was forcely split following builder checker into independent test suit. @@ -53,6 +55,10 @@ namespace yycctest::carton::clap { } } +#pragma endregion + +#pragma region Clap Body + class CartonClap : public ::testing::Test { protected: CartonClap() : @@ -97,7 +103,7 @@ namespace yycctest::carton::clap { Token int_variable; using IntVariableValidator = validator::IntegralValidator; Token clamped_int_variable; - using ClampedFloatVariableValidator = validator::FloatingPointValidator; + using ClampedFloatVariableValidator = validator::IntegralValidator; Token novalue_variable; // Application @@ -121,6 +127,8 @@ namespace yycctest::carton::clap { EXPECT_FALSE(ss.view().empty()); } +#pragma region Parser Part + TEST_F(CartonClap, ParserNormal) { const std::vector args = {u8"exec", u8"-i", u8"114514"}; auto result = CLAP::parser::Parser::from_user(app, args); @@ -183,49 +191,6 @@ namespace yycctest::carton::clap { } } - TEST_F(CartonClap, ParserInvalidName) { - const std::vector args = {u8"exec", u8"-?", u8"114514"}; - auto result = CLAP::parser::Parser::from_user(app, args); - ASSERT_FALSE(result.has_value()); - } - - TEST_F(CartonClap, ParserDuplicatedAssign) { - const std::vector args = {u8"exec", u8"-i", u8"114514", u8"--int", u8"114514"}; - auto result = CLAP::parser::Parser::from_user(app, args); - ASSERT_FALSE(result.has_value()); - } - - TEST_F(CartonClap, ParserUnexpectedValue) { - const std::vector args = {u8"exec", u8"-i", u8"114514", u8"1919810"}; - auto result = CLAP::parser::Parser::from_user(app, args); - ASSERT_FALSE(result.has_value()); - } - - TEST_F(CartonClap, ParserLostValue) { - const std::vector args = {u8"exec", u8"-i"}; - auto result = CLAP::parser::Parser::from_user(app, args); - ASSERT_FALSE(result.has_value()); - } - - TEST_F(CartonClap, ParserBadCast) { - const std::vector args = {u8"exec", u8"-i", u8"114514", u8"--clamped-float", u8"114.0"}; - auto result = CLAP::parser::Parser::from_user(app, args); - ASSERT_TRUE(result.has_value()); - auto parser = std::move(result.value()); - - // Check okey cast - { - auto value = parser.get_value_option(int_option); - ASSERT_TRUE(value.has_value()); - EXPECT_EQ(value.value(), 114514); - } - // Check bad cast - { - auto value = parser.get_value_option(clamped_float_option); - EXPECT_FALSE(value.has_value()); - } - } - TEST_F(CartonClap, ParserFull) { const std::vector args = { u8"exec", // Program self. @@ -271,4 +236,160 @@ namespace yycctest::carton::clap { } } + TEST_F(CartonClap, ParserInvalidName) { + const std::vector args = {u8"exec", u8"-?", u8"114514"}; + auto result = CLAP::parser::Parser::from_user(app, args); + ASSERT_FALSE(result.has_value()); + } + + TEST_F(CartonClap, ParserDuplicatedAssign) { + const std::vector args = {u8"exec", u8"-i", u8"114514", u8"--int", u8"114514"}; + auto result = CLAP::parser::Parser::from_user(app, args); + ASSERT_FALSE(result.has_value()); + } + + TEST_F(CartonClap, ParserUnexpectedValue) { + const std::vector args = {u8"exec", u8"-i", u8"114514", u8"1919810"}; + auto result = CLAP::parser::Parser::from_user(app, args); + ASSERT_FALSE(result.has_value()); + } + + TEST_F(CartonClap, ParserLostValue) { + const std::vector args = {u8"exec", u8"-i"}; + auto result = CLAP::parser::Parser::from_user(app, args); + ASSERT_FALSE(result.has_value()); + } + + TEST_F(CartonClap, ParserBadCast) { + const std::vector args = {u8"exec", u8"-i", u8"114514", u8"--clamped-float", u8"114.0"}; + auto result = CLAP::parser::Parser::from_user(app, args); + ASSERT_TRUE(result.has_value()); + auto parser = std::move(result.value()); + + // Check okey cast + { + auto value = parser.get_value_option(int_option); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(value.value(), 114514); + } + // Check bad cast + { + auto value = parser.get_value_option(clamped_float_option); + EXPECT_FALSE(value.has_value()); + } + } + +#pragma endregion + +#pragma region Resolver Part + + TEST_F(CartonClap, ResolverNormal) { + const std::vector> vars = { + {u8"int", u8"114514"}, // Integer variable + }; + auto result = CLAP::resolver::Resolver::from_user(app, vars); + ASSERT_TRUE(result.has_value()); + auto resolver = std::move(result.value()); + + // Check that int variable was captured with correct value + { + auto value = resolver.get_value_variable(int_variable); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(value.value(), 114514); + } + // Check that other variables were not captured + { + auto value = resolver.get_value_variable(clamped_int_variable); + EXPECT_FALSE(value.has_value()); + } + { + auto value = resolver.get_flag_variable(novalue_variable); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(value.value(), false); + } + } + + TEST_F(CartonClap, ResolverNothing) { + const std::vector> vars = {}; + auto result = CLAP::resolver::Resolver::from_user(app, vars); + ASSERT_TRUE(result.has_value()); + auto resolver = std::move(result.value()); + + // Check that all variables were not captured + { + auto value = resolver.get_value_variable(int_variable); + EXPECT_FALSE(value.has_value()); + } + { + auto value = resolver.get_value_variable(clamped_int_variable); + EXPECT_FALSE(value.has_value()); + } + { + auto value = resolver.get_flag_variable(novalue_variable); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(value.value(), false); + } + } + + TEST_F(CartonClap, ResolverFull) { + const std::vector> vars = { + {u8"int", u8"114514"}, // Integer variable + {u8"clamped-int", u8"70"}, // Clamped int variable + {u8"b", u8"some words"}, // Integer variable + }; + auto result = CLAP::resolver::Resolver::from_user(app, vars); + ASSERT_TRUE(result.has_value()); + auto resolver = std::move(result.value()); + + // Check that all variables were captured + { + auto value = resolver.get_value_variable(int_variable); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(value.value(), 114514); + } + { + auto value = resolver.get_value_variable(clamped_int_variable); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(value.value(), 70); + } + { + auto value = resolver.get_flag_variable(novalue_variable); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(value.value(), true); + } + } + + TEST_F(CartonClap, ResolverDuplicatedAssign) { + const std::vector> vars = { + {u8"int", u8"114514"}, // Integer variable + {u8"int", u8"1919810"}, // Duplicated integer variable + }; + EXPECT_ANY_THROW(auto result = CLAP::resolver::Resolver::from_user(app, vars)); + } + + TEST_F(CartonClap, ResolverBadCast) { + const std::vector> vars = { + {u8"int", u8"114514"}, // OK integer variable + {u8"clamped-int", u8"11"}, // Bad clamped int variable + }; + auto result = CLAP::resolver::Resolver::from_user(app, vars); + ASSERT_TRUE(result.has_value()); + auto resolver = std::move(result.value()); + + // Check okey cast + { + auto value = resolver.get_value_variable(int_variable); + ASSERT_TRUE(value.has_value()); + EXPECT_EQ(value.value(), 114514); + } + // Check bad cast + { + auto value = resolver.get_value_variable(clamped_int_variable); + EXPECT_FALSE(value.has_value()); + } + } +#pragma endregion + +#pragma endregion + } // namespace yycctest::carton::clap \ No newline at end of file