#include "testutils/ProgramOptionsTestBase.h" #include "../../../src/cli/program_options/utils.h" using namespace cryfs::program_options; using std::pair; using std::vector; using std::string; class ProgramOptionsUtilsTest: public ProgramOptionsTestBase {}; TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_ZeroOptions) { vector input = options({"./executableName"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName"}, result.first); EXPECT_VECTOR_EQ({"./executableName"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OneShortOption) { vector input = options({"./executableName", "-j"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "-j"}, result.first); EXPECT_VECTOR_EQ({"./executableName"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OneLongOption) { vector input = options({"./executableName", "--myoption"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "--myoption"}, result.first); EXPECT_VECTOR_EQ({"./executableName"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OnePositionalOption) { vector input = options({"./executableName", "mypositionaloption"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "mypositionaloption"}, result.first); EXPECT_VECTOR_EQ({"./executableName"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OneShortOption_DoubleDash) { vector input = options({"./executableName", "-j", "--"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "-j"}, result.first); EXPECT_VECTOR_EQ({"./executableName"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OneLongOption_DoubleDash) { vector input = options({"./executableName", "--myoption", "--"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "--myoption"}, result.first); EXPECT_VECTOR_EQ({"./executableName"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OnePositionalOption_DoubleDash) { vector input = options({"./executableName", "mypositionaloption", "--"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "mypositionaloption"}, result.first); EXPECT_VECTOR_EQ({"./executableName"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_DoubleDash_OneShortOption) { vector input = options({"./executableName", "--", "-a"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName"}, result.first); EXPECT_VECTOR_EQ({"./executableName", "-a"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_DoubleDash_OneLongOption) { vector input = options({"./executableName", "--", "--myoption"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName"}, result.first); EXPECT_VECTOR_EQ({"./executableName", "--myoption"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_DoubleDash_OnePositionalOption) { vector input = options({"./executableName", "--", "mypositionaloption"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName"}, result.first); EXPECT_VECTOR_EQ({"./executableName", "mypositionaloption"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OneShortOption_DoubleDash_OneShortOption) { vector input = options({"./executableName", "-j", "--", "-a"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "-j"}, result.first); EXPECT_VECTOR_EQ({"./executableName", "-a"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OneLongOption_DoubleDash_OneLongOption) { vector input = options({"./executableName", "--myoption", "--", "--myotheroption"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "--myoption"}, result.first); EXPECT_VECTOR_EQ({"./executableName", "--myotheroption"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_OnePositionalOption_DoubleDash_OnePositionalOption) { vector input = options({"./executableName", "mypositionaloption", "--", "otherpositionaloption"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "mypositionaloption"}, result.first); EXPECT_VECTOR_EQ({"./executableName", "otherpositionaloption"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_MoreOptions) { vector input = options({"./executableName", "mypositionaloption", "myotherpositionaloption", "-j", "--alpha", "--", "filename", "--beta", "-j3"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "mypositionaloption", "myotherpositionaloption", "-j", "--alpha"}, result.first); EXPECT_VECTOR_EQ({"./executableName", "filename", "--beta", "-j3"}, result.second); } TEST_F(ProgramOptionsUtilsTest, SplitAtDoubleDash_RealisticCryfsOptions) { vector input = options({"./executableName", "rootDir", "mountDir", "--", "-f"}); pair,vector> result = splitAtDoubleDash(input); EXPECT_VECTOR_EQ({"./executableName", "rootDir", "mountDir"}, result.first); EXPECT_VECTOR_EQ({"./executableName", "-f"}, result.second); }