aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRebecca Turner <rbt@sent.as>2024-03-14 17:44:43 -0700
committerRebecca Turner <rbt@sent.as>2024-03-26 16:44:04 -0700
commitaee3d639b5096349413021537ae842c8c33ef6cf (patch)
treeee8557f970f5c477116bd1b77a8b9cacce59d03a /tests
parentda22dbc33397c9c6c5d115ce753d5cf11585291e (diff)
Move `shell_words` into its own file
Change-Id: I34c0ebfb6dcea49bf632d8880e04075335a132bf
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/libutil/shlex.cc57
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