Mercurial > code
changeset 414:0b6f7f7c8a6c
OptionParser: update unit tests
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 07 Oct 2015 15:06:10 +0200 |
parents | 52a13aad3d02 |
children | ac4573b9bb4b |
files | C++/tests/OptionParser/main.cpp |
diffstat | 1 files changed, 173 insertions(+), 118 deletions(-) [+] |
line wrap: on
line diff
--- a/C++/tests/OptionParser/main.cpp Wed Oct 07 14:25:09 2015 +0200 +++ b/C++/tests/OptionParser/main.cpp Wed Oct 07 15:06:10 2015 +0200 @@ -26,96 +26,96 @@ TEST(Short, simpleNoArg) { - OptionParser parser{ - { "a", "", Option::NoArg }, - { "b", "", Option::NoArg } + std::vector<std::string> args{"-a", "-b"}; + + parser::Options options{ + { "-a", false }, + { "-b", false } }; - OptionPack pack = parser.parse({ "-a", "-b" }); - - ASSERT_TRUE(pack); + parser::Result pack = parser::read(args, options); - ASSERT_EQ(2, static_cast<int>(pack.size())); - ASSERT_EQ(2, pack.parsed()); + ASSERT_EQ(2U, pack.size()); + ASSERT_EQ(0U, args.size()); - ASSERT_TRUE(pack[0] == "a"); - ASSERT_TRUE(pack[1] == "b"); + ASSERT_TRUE(pack.count("-a") != 0); + ASSERT_TRUE(pack.count("-b") != 0); } TEST(Short, simpleArg) { - OptionParser parser{ - { "v", "", Option::NoArg }, - { "c", "", } + std::vector<std::string> args{"-v", "-cfoo.conf"}; + + parser::Options options{ + { "-v", false }, + { "-c", true } }; - OptionPack pack = parser.parse({ "-v", "-cfoo.conf" }); - - ASSERT_TRUE(pack); + parser::Result pack = parser::read(args, options); - ASSERT_EQ(2, static_cast<int>(pack.size())); - ASSERT_EQ(2, pack.parsed()); + ASSERT_EQ(2U, pack.size()); + ASSERT_EQ(0U, args.size()); - ASSERT_TRUE(pack[0] == "v"); - ASSERT_TRUE(pack[1] == "c"); - ASSERT_EQ("foo.conf", pack[1].value()); + ASSERT_TRUE(pack.count("-v") != 0); + ASSERT_EQ("foo.conf", pack.find("-c")->second); } TEST(Short, spacedArg) { - OptionParser parser{ - { "v", "", Option::NoArg }, - { "c", "", } + std::vector<std::string> args{"-v", "-c", "foo.conf"}; + + parser::Options options{ + { "-v", false }, + { "-c", true } }; - OptionPack pack = parser.parse({ "-v", "-c", "foo.conf" }); - - ASSERT_TRUE(pack); + parser::Result pack = parser::read(args, options); - ASSERT_EQ(2, static_cast<int>(pack.size())); - ASSERT_EQ(3, pack.parsed()); + ASSERT_EQ(2U, pack.size()); + ASSERT_EQ(0U, args.size()); - ASSERT_TRUE(pack[0] == "v"); - ASSERT_TRUE(pack[1] == "c"); - ASSERT_EQ("foo.conf", pack[1].value()); + ASSERT_TRUE(pack.count("-v") != 0); + ASSERT_EQ("foo.conf", pack.find("-c")->second); } TEST(Short, compacted) { - OptionParser parser{ - { "a", "", Option::NoArg }, - { "b", "", Option::NoArg }, - { "c", "", Option::NoArg }, + std::vector<std::string> args{"-abc"}; + + parser::Options options{ + { "-a", false }, + { "-b", false }, + { "-c", false }, }; - OptionPack pack = parser.parse({ "-abc" }); - - ASSERT_TRUE(pack); + parser::Result pack = parser::read(args, options); - ASSERT_EQ(3, static_cast<int>(pack.size())); - ASSERT_EQ(1, pack.parsed()); + ASSERT_EQ(3U, pack.size()); + ASSERT_EQ(0U, args.size()); - ASSERT_TRUE(pack[0] == "a"); - ASSERT_TRUE(pack[1] == "b"); - ASSERT_TRUE(pack[2] == "c"); + ASSERT_TRUE(pack.count("-a") != 0); + ASSERT_TRUE(pack.count("-b") != 0); + ASSERT_TRUE(pack.count("-c") != 0); } TEST(Short, compactedArg) { - OptionParser parser{ - { "a", "", }, - { "b", "", }, - { "c", "", }, + std::vector<std::string> args{"-vdcfoo.conf"}; + + parser::Options options{ + { "-v", false }, + { "-d", false }, + { "-c", true }, }; - OptionPack pack = parser.parse({ "-abc" }); - - ASSERT_TRUE(pack); + parser::Result pack = parser::read(args, options); - ASSERT_EQ(1, static_cast<int>(pack.size())); - ASSERT_EQ(1, pack.parsed()); + ASSERT_EQ(3U, pack.size()); + ASSERT_EQ(0U, args.size()); - ASSERT_TRUE(pack[0] == "a"); + ASSERT_TRUE(pack.count("-v") != 0); + ASSERT_TRUE(pack.count("-d") != 0); + ASSERT_EQ("foo.conf", pack.find("-c")->second); } /* -------------------------------------------------------- @@ -124,101 +124,156 @@ TEST(Long, simple) { - OptionParser parser{ - { "", "verbose", Option::NoArg }, - { "", "fullscreen", Option::NoArg } + std::vector<std::string> args{"--fullscreen"}; + + parser::Options options{ + { "--verbose", false }, + { "--fullscreen", false } }; - OptionPack pack = parser.parse({ "--fullscreen" }); - - ASSERT_TRUE(pack); + parser::Result pack = parser::read(args, options); - ASSERT_EQ(1, static_cast<int>(pack.size())); - ASSERT_EQ(1, pack.parsed()); + ASSERT_EQ(1U, pack.size()); + ASSERT_EQ(0U, args.size()); - ASSERT_TRUE(pack[0] == "fullscreen"); + ASSERT_TRUE(pack.count("--fullscreen") != 0); } TEST(Long, simpleArg) { - OptionParser parser{ - { "", "config", }, - { "", "level", } + std::vector<std::string> args{"--config", "config.conf", "--level", "2"}; + + parser::Options options{ + { "--config", true }, + { "--level", true } }; - OptionPack pack = parser.parse({ "--config", "config.conf", "--level", "2" }); - - ASSERT_TRUE(pack); + parser::Result pack = parser::read(args, options); - ASSERT_EQ(2, static_cast<int>(pack.size())); - ASSERT_EQ(4, pack.parsed()); + ASSERT_EQ(2U, pack.size()); + ASSERT_EQ(0U, args.size()); - ASSERT_TRUE(pack[0] == "config"); - ASSERT_EQ("config.conf", pack[0].value()); - ASSERT_TRUE(pack[1] == "level"); - ASSERT_EQ("2", pack[1].value()); + ASSERT_EQ("config.conf", pack.find("--config")->second); + ASSERT_EQ("2", pack.find("--level")->second); } /* -------------------------------------------------------- - * Combined - * -------------------------------------------------------- */ - -TEST(Combined, simple) -{ - OptionParser parser{ - { "v", "verbose", Option::NoArg }, - { "l", "level", Option::NoArg } - }; - - OptionPack pack = parser.parse({ "-v", "-l", "--verbose", "--level" }); - - ASSERT_TRUE(pack); - - ASSERT_TRUE(pack[0] == "v" && pack[0] == "verbose"); - ASSERT_TRUE(pack[1] == "l" && pack[1] == "level"); - ASSERT_TRUE(pack[2] == "v" && pack[2] == "verbose"); - ASSERT_TRUE(pack[3] == "l" && pack[3] == "level"); -} - -/* -------------------------------------------------------- - * Flags + * Errors * -------------------------------------------------------- */ -TEST(Flags, standard) +TEST(Errors, stop) { - // No flags, parse unless there is an argument which is not an option - OptionParser parser{ - { "v", "", Option::NoArg } + std::vector<std::string> args{"-v", "install", "-y", "irccd"}; + std::vector<std::string> expected{"install", "-y", "irccd"}; + + parser::Options options{ + { "-v", false } }; - OptionPack pack = parser.parse({ "-v", "install", "malikania" }); + parser::Result pack = parser::read(args, options); + + ASSERT_EQ(1U, pack.size()); + ASSERT_EQ(3U, args.size()); + + ASSERT_TRUE(pack.count("-v") != 0); + ASSERT_EQ(expected, args); +} - ASSERT_FALSE(pack); +TEST(Errors, missingShortArg) +{ + std::vector<std::string> args{"-c"}; + + parser::Options options{ + { "-c", true } + }; + + try { + parser::Result pack = parser::read(args, options); - ASSERT_EQ(1, static_cast<int>(pack.size())); - ASSERT_EQ(1, pack.parsed()); + FAIL() << "exception expected"; + } catch (const parser::MissingValue &) { + } +} + +TEST(Errors, missingShortArg2) +{ + std::vector<std::string> args{"-vc"}; - ASSERT_TRUE(pack[0] == "v"); + parser::Options options{ + { "-v", false }, + { "-c", true } + }; + + try { + parser::Result pack = parser::read(args, options); + + FAIL() << "exception expected"; + } catch (const parser::MissingValue &) { + } } -TEST(Flags, unstrict) +TEST(Errors, missingLongArg) { - // No flags, parse unless there is an argument which is not an option - OptionParser parser{ - { "v", "", Option::NoArg }, - { "d", "", } + std::vector<std::string> args{"--config"}; + + parser::Options options{ + { "--config", true } + }; + + try { + parser::Result pack = parser::read(args, options); + + FAIL() << "exception expected"; + } catch (const parser::MissingValue &) { + } +} + +TEST(Errors, invalidOption) +{ + std::vector<std::string> args{"-x"}; + + parser::Options options{ + { "-v", true } }; - OptionPack pack = parser.parse({ "-v", "install", "malikania", "-d", "/usr/local" }, OptionParser::Unstrict); + try { + parser::Result pack = parser::read(args, options); + + FAIL() << "exception expected"; + } catch (const parser::InvalidOption &) { + } +} - ASSERT_TRUE(pack); +TEST(Errors, invalidOption2) +{ + std::vector<std::string> args{"--destroy"}; + + parser::Options options{ + { "--verbose", true } + }; + + try { + parser::Result pack = parser::read(args, options); - ASSERT_EQ(2, static_cast<int>(pack.size())); - ASSERT_EQ(5, pack.parsed()); + FAIL() << "exception expected"; + } catch (const parser::InvalidOption &) { + } +} + +TEST(Errors, invalidOption3) +{ + std::vector<std::string> args{"-vx"}; - ASSERT_TRUE(pack[0] == "v"); - ASSERT_TRUE(pack[1] == "d"); - ASSERT_EQ("/usr/local", pack[1].value()); + parser::Options options{ + { "-x", true } + }; + + try { + parser::Result pack = parser::read(args, options); + + FAIL() << "exception expected"; + } catch (const parser::InvalidOption &) { + } } int main(int argc, char **argv)