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)