diff options
author | Rebecca Turner <rbt@sent.as> | 2024-03-14 17:44:43 -0700 |
---|---|---|
committer | Rebecca Turner <rbt@sent.as> | 2024-03-26 16:44:04 -0700 |
commit | aee3d639b5096349413021537ae842c8c33ef6cf (patch) | |
tree | ee8557f970f5c477116bd1b77a8b9cacce59d03a /tests | |
parent | da22dbc33397c9c6c5d115ce753d5cf11585291e (diff) |
Move `shell_words` into its own file
Change-Id: I34c0ebfb6dcea49bf632d8880e04075335a132bf
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 |