Mercurial > code
view C++/tests/OptionParser/main.cpp @ 334:0b576ee64d45
* Create brand new hierarchy
* Rename DynLib to Dynlib
* Remove some warnings
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 08 Mar 2015 14:26:33 +0100 |
parents | C++/Tests/OptionParser/main.cpp@99e83685d4da |
children | d5ec1174b707 |
line wrap: on
line source
/* * main.cpp -- main test file for OptionParser * * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <gtest/gtest.h> #include <OptionParser.h> /* -------------------------------------------------------- * Short options * -------------------------------------------------------- */ TEST(Short, simpleNoArg) { OptionParser parser{ { "a", "", Option::NoArg }, { "b", "", Option::NoArg } }; OptionPack pack = parser.parse({ "-a", "-b" }); ASSERT_TRUE(pack); ASSERT_EQ(2, static_cast<int>(pack.size())); ASSERT_EQ(2, pack.parsed()); ASSERT_TRUE(pack[0] == "a"); ASSERT_TRUE(pack[1] == "b"); } TEST(Short, simpleArg) { OptionParser parser{ { "v", "", Option::NoArg }, { "c", "", } }; OptionPack pack = parser.parse({ "-v", "-cfoo.conf" }); ASSERT_TRUE(pack); ASSERT_EQ(2, static_cast<int>(pack.size())); ASSERT_EQ(2, pack.parsed()); ASSERT_TRUE(pack[0] == "v"); ASSERT_TRUE(pack[1] == "c"); ASSERT_EQ("foo.conf", pack[1].value()); } TEST(Short, spacedArg) { OptionParser parser{ { "v", "", Option::NoArg }, { "c", "", } }; OptionPack pack = parser.parse({ "-v", "-c", "foo.conf" }); ASSERT_TRUE(pack); ASSERT_EQ(2, static_cast<int>(pack.size())); ASSERT_EQ(3, pack.parsed()); ASSERT_TRUE(pack[0] == "v"); ASSERT_TRUE(pack[1] == "c"); ASSERT_EQ("foo.conf", pack[1].value()); } TEST(Short, compacted) { OptionParser parser{ { "a", "", Option::NoArg }, { "b", "", Option::NoArg }, { "c", "", Option::NoArg }, }; OptionPack pack = parser.parse({ "-abc" }); ASSERT_TRUE(pack); ASSERT_EQ(3, static_cast<int>(pack.size())); ASSERT_EQ(1, pack.parsed()); ASSERT_TRUE(pack[0] == "a"); ASSERT_TRUE(pack[1] == "b"); ASSERT_TRUE(pack[2] == "c"); } TEST(Short, compactedArg) { OptionParser parser{ { "a", "", }, { "b", "", }, { "c", "", }, }; OptionPack pack = parser.parse({ "-abc" }); ASSERT_TRUE(pack); ASSERT_EQ(1, static_cast<int>(pack.size())); ASSERT_EQ(1, pack.parsed()); ASSERT_TRUE(pack[0] == "a"); } /* -------------------------------------------------------- * Long options * -------------------------------------------------------- */ TEST(Long, simple) { OptionParser parser{ { "", "verbose", Option::NoArg }, { "", "fullscreen", Option::NoArg } }; OptionPack pack = parser.parse({ "--fullscreen" }); ASSERT_TRUE(pack); ASSERT_EQ(1, static_cast<int>(pack.size())); ASSERT_EQ(1, pack.parsed()); ASSERT_TRUE(pack[0] == "fullscreen"); } TEST(Long, simpleArg) { OptionParser parser{ { "", "config", }, { "", "level", } }; OptionPack pack = parser.parse({ "--config", "config.conf", "--level", "2" }); ASSERT_TRUE(pack); ASSERT_EQ(2, static_cast<int>(pack.size())); ASSERT_EQ(4, pack.parsed()); ASSERT_TRUE(pack[0] == "config"); ASSERT_EQ("config.conf", pack[0].value()); ASSERT_TRUE(pack[1] == "level"); ASSERT_EQ("2", pack[1].value()); } /* -------------------------------------------------------- * 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 * -------------------------------------------------------- */ TEST(Flags, standard) { // No flags, parse unless there is an argument which is not an option OptionParser parser{ { "v", "", Option::NoArg } }; OptionPack pack = parser.parse({ "-v", "install", "malikania" }); ASSERT_FALSE(pack); ASSERT_EQ(1, static_cast<int>(pack.size())); ASSERT_EQ(1, pack.parsed()); ASSERT_TRUE(pack[0] == "v"); } TEST(Flags, unstrict) { // No flags, parse unless there is an argument which is not an option OptionParser parser{ { "v", "", Option::NoArg }, { "d", "", } }; OptionPack pack = parser.parse({ "-v", "install", "malikania", "-d", "/usr/local" }, OptionParser::Unstrict); ASSERT_TRUE(pack); ASSERT_EQ(2, static_cast<int>(pack.size())); ASSERT_EQ(5, pack.parsed()); ASSERT_TRUE(pack[0] == "v"); ASSERT_TRUE(pack[1] == "d"); ASSERT_EQ("/usr/local", pack[1].value()); } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }