summaryrefslogtreecommitdiff
path: root/tests/stdlib_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/stdlib_test.cpp')
-rw-r--r--tests/stdlib_test.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/stdlib_test.cpp b/tests/stdlib_test.cpp
index 6ae6cda74..05438eb17 100644
--- a/tests/stdlib_test.cpp
+++ b/tests/stdlib_test.cpp
@@ -514,3 +514,26 @@ TEST(stdlib, strtoull_EINVAL) {
strtoull("123", NULL, 37);
ASSERT_EQ(EINVAL, errno);
}
+
+TEST(stdlib, getsubopt) {
+ char* const tokens[] = {
+ const_cast<char*>("a"),
+ const_cast<char*>("b"),
+ const_cast<char*>("foo"),
+ nullptr
+ };
+ std::string input = "a,b,foo=bar,a,unknown";
+ char* subopts = &input[0];
+ char* value = nullptr;
+
+ ASSERT_EQ(0, getsubopt(&subopts, tokens, &value));
+ ASSERT_EQ(nullptr, value);
+ ASSERT_EQ(1, getsubopt(&subopts, tokens, &value));
+ ASSERT_EQ(nullptr, value);
+ ASSERT_EQ(2, getsubopt(&subopts, tokens, &value));
+ ASSERT_STREQ("bar", value);
+ ASSERT_EQ(0, getsubopt(&subopts, tokens, &value));
+ ASSERT_EQ(nullptr, value);
+
+ ASSERT_EQ(-1, getsubopt(&subopts, tokens, &value));
+}