Add basic tests for strpbrk()/strspn()/strcspn()/strsep()/strtok()/strtok_r().

We actually have full line coverage for all of these already, but not from explicit direct tests.

Change-Id: I07e8cb2c0040b615cd4e84b53b503db612ef8a34
diff --git a/tests/string_test.cpp b/tests/string_test.cpp
index 7832f07..e760b1b 100644
--- a/tests/string_test.cpp
+++ b/tests/string_test.cpp
@@ -1701,3 +1701,72 @@
   GTEST_SKIP() << "strerrorname_np not available";
 #endif
 }
+
+TEST(STRING_TEST, strpbrk) {
+  EXPECT_EQ(nullptr, strpbrk("hello", ""));
+  EXPECT_STREQ("hello", strpbrk("hello", "ehl"));
+  EXPECT_STREQ("llo", strpbrk("hello", "l"));
+  EXPECT_STREQ(" world", strpbrk("hello world", "\t "));
+}
+
+TEST(STRING_TEST, strspn) {
+  EXPECT_EQ(0u, strspn("hello", ""));
+  EXPECT_EQ(4u, strspn("hello", "ehl"));
+  EXPECT_EQ(5u, strspn("hello", "ehlo"));
+  EXPECT_EQ(5u, strspn("hello world", "abcdefghijklmnopqrstuvwxyz"));
+}
+
+TEST(STRING_TEST, strcspn) {
+  EXPECT_EQ(5u, strcspn("hello", ""));
+  EXPECT_EQ(0u, strcspn("hello", "ehl"));
+  EXPECT_EQ(5u, strcspn("hello", "abc"));
+  EXPECT_EQ(5u, strcspn("hello world", " "));
+}
+
+TEST(STRING_TEST, strsep) {
+  char* p = nullptr;
+  EXPECT_EQ(nullptr, strsep(&p, ":"));
+
+  // Unlike strtok(), strsep() _does_ return empty strings.
+  char str[] = ":hello:world:::foo:";
+  p = str;
+  EXPECT_STREQ("", strsep(&p, ":"));
+  EXPECT_STREQ("hello", strsep(&p, ":"));
+  EXPECT_STREQ("world", strsep(&p, ":"));
+  EXPECT_STREQ("", strsep(&p, ":"));
+  EXPECT_STREQ("", strsep(&p, ":"));
+  EXPECT_STREQ("foo", strsep(&p, ":"));
+  EXPECT_STREQ("", strsep(&p, ":"));
+}
+
+TEST(STRING_TEST, strtok) {
+  char empty[] = "";
+  EXPECT_EQ(nullptr, strtok(empty, ":"));
+
+  char only_delimiters[] = ":::";
+  EXPECT_EQ(nullptr, strtok(only_delimiters, ":"));
+
+  // Unlike strsep(), strtok() doesn't return empty strings.
+  char str[] = ":hello:world:::foo:";
+  EXPECT_STREQ("hello", strtok(str, ":"));
+  EXPECT_STREQ("world", strtok(nullptr, ":"));
+  EXPECT_STREQ("foo", strtok(nullptr, ":"));
+  EXPECT_STREQ(nullptr, strtok(nullptr, ":"));
+}
+
+TEST(STRING_TEST, strtok_r) {
+  char* p;
+
+  char empty[] = "";
+  EXPECT_EQ(nullptr, strtok_r(empty, ":", &p));
+
+  char only_delimiters[] = ":::";
+  EXPECT_EQ(nullptr, strtok_r(only_delimiters, ":", &p));
+
+  // Unlike strsep(), strtok_r() doesn't return empty strings.
+  char str[] = ":hello:world:::foo:";
+  EXPECT_STREQ("hello", strtok_r(str, ":", &p));
+  EXPECT_STREQ("world", strtok_r(nullptr, ":", &p));
+  EXPECT_STREQ("foo", strtok_r(nullptr, ":", &p));
+  EXPECT_STREQ(nullptr, strtok_r(nullptr, ":", &p));
+}