diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/libutil/shlex.cc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/unit/libutil/shlex.cc b/tests/unit/libutil/shlex.cc new file mode 100644 index 000000000..2a13635f0 --- /dev/null +++ b/tests/unit/libutil/shlex.cc @@ -0,0 +1,57 @@ +#include "shlex.hh" + +#include <gtest/gtest.h> +#include <gmock/gmock.h> +#include <sstream> + +using testing::Eq; + +namespace nix { + +TEST(Shlex, shell_split) { + ASSERT_THAT(shell_split(""), Eq<std::vector<std::string>>({})); + ASSERT_THAT(shell_split(" "), Eq<std::vector<std::string>>({})); + + ASSERT_THAT( + shell_split("puppy doggy"), + Eq<std::vector<std::string>>({ + "puppy", + "doggy", + }) + ); + + ASSERT_THAT( + shell_split("goldie \"puppy 'doggy'\" sweety"), + Eq<std::vector<std::string>>({ + "goldie", + "puppy 'doggy'", + "sweety", + }) + ); + + ASSERT_THAT( + shell_split("\"pupp\\\"y\""), + Eq<std::vector<std::string>>({ "pupp\"y" }) + ); + + ASSERT_THAT( + shell_split("goldie 'puppy' doggy"), + Eq<std::vector<std::string>>({ + "goldie", + "puppy", + "doggy", + }) + ); + + ASSERT_THAT( + shell_split("'pupp\\\"y'"), + Eq<std::vector<std::string>>({ + "pupp\\\"y", + }) + ); + + ASSERT_THROW(shell_split("\"puppy"), ShlexError); + ASSERT_THROW(shell_split("'puppy"), ShlexError); +} + +} // namespace nix |