From d3071db0d7907032e8adee92939f45effba28657 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 20 Sep 2015 13:14:41 +0300 Subject: [PATCH] add some CommandLineParser tests --- modules/core/test/test_utils.cpp | 179 +++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 modules/core/test/test_utils.cpp diff --git a/modules/core/test/test_utils.cpp b/modules/core/test/test_utils.cpp new file mode 100644 index 0000000000..f69a063eb5 --- /dev/null +++ b/modules/core/test/test_utils.cpp @@ -0,0 +1,179 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#include "test_precomp.hpp" + +using namespace cv; + +namespace { + +static const char * const keys = + "{ h help | | print help }" + "{ i info | false | print info }" + "{ t true | true | true value }" + "{ n unused | | dummy }" +; + +TEST(CommandLineParser, testHas_noValues) +{ + const char* argv[] = {"", "-h", "--info"}; + const int argc = 3; + cv::CommandLineParser parser(argc, argv, keys); + EXPECT_TRUE(parser.has("help")); + EXPECT_TRUE(parser.has("h")); + EXPECT_TRUE(parser.has("info")); + EXPECT_TRUE(parser.has("i")); + EXPECT_FALSE(parser.has("n")); + EXPECT_FALSE(parser.has("unused")); + EXPECT_FALSE(parser.has("q")); // TODO Throw ??? +} +TEST(CommandLineParser, testHas_TrueValues) +{ + const char* argv[] = {"", "-h=TRUE", "--info=true"}; + const int argc = 3; + cv::CommandLineParser parser(argc, argv, keys); + EXPECT_TRUE(parser.has("help")); + EXPECT_TRUE(parser.has("h")); + EXPECT_TRUE(parser.has("info")); + EXPECT_TRUE(parser.has("i")); + EXPECT_FALSE(parser.has("n")); + EXPECT_FALSE(parser.has("unused")); + EXPECT_FALSE(parser.has("q")); // TODO Throw ??? +} +TEST(CommandLineParser, testHas_TrueValues1) +{ + const char* argv[] = {"", "-h=1", "--info=1"}; + const int argc = 3; + cv::CommandLineParser parser(argc, argv, keys); + EXPECT_TRUE(parser.has("help")); + EXPECT_TRUE(parser.has("h")); + EXPECT_TRUE(parser.has("info")); + EXPECT_TRUE(parser.has("i")); + EXPECT_FALSE(parser.has("n")); + EXPECT_FALSE(parser.has("unused")); + EXPECT_FALSE(parser.has("q")); // TODO Throw ??? +} +TEST(CommandLineParser, testHas_FalseValues0) +{ + const char* argv[] = {"", "-h=0", "--info=0"}; + const int argc = 3; + cv::CommandLineParser parser(argc, argv, keys); + EXPECT_TRUE(parser.has("help")); + EXPECT_TRUE(parser.has("h")); + EXPECT_TRUE(parser.has("info")); + EXPECT_TRUE(parser.has("i")); + EXPECT_FALSE(parser.has("n")); + EXPECT_FALSE(parser.has("unused")); + EXPECT_FALSE(parser.has("q")); // TODO Throw ??? +} + +TEST(CommandLineParser, testBoolOption_noArgs) +{ + const char* argv[] = {""}; + const int argc = 1; + cv::CommandLineParser parser(argc, argv, keys); + EXPECT_FALSE(parser.get("help")); + EXPECT_FALSE(parser.get("h")); + EXPECT_FALSE(parser.get("info")); + EXPECT_FALSE(parser.get("i")); + EXPECT_TRUE(parser.get("true")); // default is true + EXPECT_TRUE(parser.get("t")); +} + +TEST(CommandLineParser, testBoolOption_noValues) +{ + const char* argv[] = {"", "-h", "--info"}; + const int argc = 3; + cv::CommandLineParser parser(argc, argv, keys); + EXPECT_TRUE(parser.get("help")); + EXPECT_TRUE(parser.get("h")); + EXPECT_TRUE(parser.get("info")); + EXPECT_TRUE(parser.get("i")); +} + +TEST(CommandLineParser, testBoolOption_TrueValues) +{ + const char* argv[] = {"", "-h=TRUE", "--info=true"}; + const int argc = 3; + cv::CommandLineParser parser(argc, argv, keys); + //EXPECT_TRUE(parser.get("help")); + //EXPECT_TRUE(parser.get("h")); + EXPECT_TRUE(parser.get("info")); + EXPECT_TRUE(parser.get("i")); + EXPECT_FALSE(parser.get("unused")); + EXPECT_FALSE(parser.get("n")); +} + +TEST(CommandLineParser, testBoolOption_FalseValues) +{ + const char* argv[] = {"", "--help=FALSE", "-i=false"}; + const int argc = 3; + cv::CommandLineParser parser(argc, argv, keys); + EXPECT_FALSE(parser.get("help")); + EXPECT_FALSE(parser.get("h")); + EXPECT_FALSE(parser.get("info")); + EXPECT_FALSE(parser.get("i")); +} + + +static const char * const keys2 = + "{ h help | | print help }" + "{ @arg1 | default1 | param1 }" + "{ @arg2 | | param2 }" + "{ n unused | | dummy }" +; + +TEST(CommandLineParser, testPositional_noArgs) +{ + const char* argv[] = {""}; + const int argc = 1; + cv::CommandLineParser parser(argc, argv, keys2); + //EXPECT_FALSE(parser.has("arg1")); + //EXPECT_FALSE(parser.has("arg2")); + //EXPECT_EQ("default1", parser.get("arg1")); + EXPECT_EQ("default1", parser.get(0)); + //??? EXPECT_ANY_THROW(parser.get("arg2")); + //??? EXPECT_ANY_THROW(parser.get(1)); +} + +TEST(CommandLineParser, testPositional_default) +{ + const char* argv[] = {"", "test1", "test2"}; + const int argc = 3; + cv::CommandLineParser parser(argc, argv, keys2); + //EXPECT_TRUE(parser.has("arg1")); + //EXPECT_TRUE(parser.has("arg2")); + //EXPECT_EQ("test1", parser.get("arg1")); + //EXPECT_EQ("test2", parser.get("arg2")); + EXPECT_EQ("test1", parser.get(0)); + EXPECT_EQ("test2", parser.get(1)); +} + +TEST(CommandLineParser, testPositional_withFlagsBefore) +{ + const char* argv[] = {"", "-h", "test1", "test2"}; + const int argc = 4; + cv::CommandLineParser parser(argc, argv, keys2); + //EXPECT_TRUE(parser.has("arg1")); + //EXPECT_TRUE(parser.has("arg2")); + //EXPECT_EQ("test1", parser.get("arg1")); + //EXPECT_EQ("test2", parser.get("arg2")); + EXPECT_EQ("test1", parser.get(0)); + EXPECT_EQ("test2", parser.get(1)); +} + +TEST(CommandLineParser, testPositional_withFlagsAfter) +{ + const char* argv[] = {"", "test1", "test2", "-h"}; + const int argc = 4; + cv::CommandLineParser parser(argc, argv, keys2); + //EXPECT_TRUE(parser.has("arg1")); + //EXPECT_TRUE(parser.has("arg2")); + //EXPECT_EQ("test1", parser.get("arg1")); + //EXPECT_EQ("test2", parser.get("arg2")); + EXPECT_EQ("test1", parser.get(0)); + EXPECT_EQ("test2", parser.get(1)); +} + +} // namespace -- GitLab