X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=tests%2Fgetopt.cpp;fp=tests%2Fgetopt.cpp;h=cb5df6295ffd34a07ab55d9a537ed4191087fc7e;hp=0000000000000000000000000000000000000000;hb=120023d8da0aabcb803a87111608ce84c94661f8;hpb=79482ba7aea1b79c7a310c940cc0292532ef3bcb diff --git a/tests/getopt.cpp b/tests/getopt.cpp new file mode 100644 index 0000000..cb5df62 --- /dev/null +++ b/tests/getopt.cpp @@ -0,0 +1,141 @@ +#include +#include + +using namespace std; +using namespace Msp; + +class GetOptTests: public Test::RegisteredTest +{ +public: + GetOptTests(); + + static const char *get_name() { return "GetOpt"; } + +private: + void short_options(); + void long_options(); + void arguments(); + void non_options(); + void help(); + void invalid_option(); + void invalid_arg(); + void missing_arg(); +}; + +GetOptTests::GetOptTests() +{ + add(&GetOptTests::short_options, "Short options"); + add(&GetOptTests::long_options, "Long options"); + add(&GetOptTests::arguments, "Option arguments"); + add(&GetOptTests::non_options, "Non-options"); + add(&GetOptTests::help, "Help").expect_throw(); + add(&GetOptTests::invalid_option, "Invalid option").expect_throw(); + add(&GetOptTests::invalid_arg, "Invalid argument").expect_throw(); + add(&GetOptTests::missing_arg, "Missing argument").expect_throw(); +} + +void GetOptTests::short_options() +{ + static const char *argv[] = { "test", "-a", "-bc", 0 }; + + bool a = false; + bool b = false; + bool c = false; + + GetOpt getopt; + getopt.add_option('a', "a", a, GetOpt::NO_ARG); + getopt.add_option('b', "b", b, GetOpt::NO_ARG); + getopt.add_option('c', "c", c, GetOpt::NO_ARG); + getopt(3, argv); + + EXPECT(a && b && c); +} + +void GetOptTests::long_options() +{ + static const char *argv[] = { "test", "--foo", "--bar", 0 }; + + bool foo = false; + bool bar = false; + + GetOpt getopt; + getopt.add_option("foo", foo, GetOpt::NO_ARG); + getopt.add_option("bar", bar, GetOpt::NO_ARG); + getopt(3, argv); + + EXPECT(foo && bar); +} + +void GetOptTests::arguments() +{ + static const char *argv[] = { "test", "-aabc", "-b", "x y z", "--foo=42", "--bar", "69", 0 }; + + string a; + string b; + int foo = 0; + int bar = 0; + + GetOpt getopt; + getopt.add_option('a', "a", a, GetOpt::REQUIRED_ARG); + getopt.add_option('b', "b", b, GetOpt::REQUIRED_ARG); + getopt.add_option("foo", foo, GetOpt::REQUIRED_ARG); + getopt.add_option("bar", bar, GetOpt::REQUIRED_ARG); + getopt(7, argv); + + EXPECT_EQUAL(a, "abc"); + EXPECT_EQUAL(b, "x y z"); + EXPECT_EQUAL(foo, 42); + EXPECT_EQUAL(bar, 69); +} + +void GetOptTests::non_options() +{ + static const char *argv[] = { "test", "-a", "foo", "-b", "bar", "baz", 0 }; + + bool a = false; + bool b = false; + + GetOpt getopt; + getopt.add_option('a', "a", a, GetOpt::NO_ARG); + getopt.add_option('b', "b", b, GetOpt::NO_ARG); + getopt(6, argv); + + EXPECT(a && b); + EXPECT_EQUAL(getopt.get_args().size(), 3U); +} + +void GetOptTests::help() +{ + static const char *argv[] = { "test", "--help", 0 }; + + GetOpt getopt; + getopt(2, argv); +} + +void GetOptTests::invalid_option() +{ + static const char *argv[] = { "test", "--invalid", 0 }; + + GetOpt getopt; + getopt(2, argv); +} + +void GetOptTests::invalid_arg() +{ + static const char *argv[] = { "test", "--intval=foo", 0 }; + + int value; + GetOpt getopt; + getopt.add_option("intval", value, GetOpt::REQUIRED_ARG); + getopt(2, argv); +} + +void GetOptTests::missing_arg() +{ + static const char *argv[] = { "test", "--value", 0 }; + + string value; + GetOpt getopt; + getopt.add_option("value", value, GetOpt::REQUIRED_ARG); + getopt(2, argv); +}