]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
test: Simplify tokenizer tests
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>
Sun, 27 Mar 2022 12:14:10 +0000 (15:14 +0300)
committerOrgad Shaneh <orgad.shaneh@audiocodes.com>
Tue, 5 Apr 2022 07:04:20 +0000 (10:04 +0300)
unittest/test_util_Tokenizer.cpp

index 76c9e027c6f74671033a0f8de774605fa5975a0b..0ada5a2ab2e0e8fdeb625c2fc046223ad68f559c 100644 (file)
 TEST_CASE("util::Tokenizer")
 {
   using Mode = util::Tokenizer::Mode;
-
-  SUBCASE("include empty tokens")
+  struct SplitTest
   {
+    SplitTest(Mode mode) : m_mode(mode)
     {
-      const auto s = Util::split_into_views("", "/", Mode::include_empty);
-      REQUIRE(s.size() == 1);
-      CHECK(s[0] == "");
-    }
-    {
-      const auto s = Util::split_into_views("/", "/", Mode::include_empty);
-      REQUIRE(s.size() == 2);
-      CHECK(s[0] == "");
-      CHECK(s[1] == "");
-    }
-    {
-      const auto s = Util::split_into_views("a/", "/", Mode::include_empty);
-      REQUIRE(s.size() == 2);
-      CHECK(s[0] == "a");
-      CHECK(s[1] == "");
-    }
-    {
-      const auto s = Util::split_into_views("/b", "/", Mode::include_empty);
-      REQUIRE(s.size() == 2);
-      CHECK(s[0] == "");
-      CHECK(s[1] == "b");
-    }
-    {
-      const auto s = Util::split_into_views("a/b", "/", Mode::include_empty);
-      REQUIRE(s.size() == 2);
-      CHECK(s[0] == "a");
-      CHECK(s[1] == "b");
     }
+
+    void
+    operator()(const char* input,
+               const char* separators,
+               const std::vector<std::string>& expected)
     {
-      const auto s = Util::split_into_views("/a:", "/:", Mode::include_empty);
-      REQUIRE(s.size() == 3);
-      CHECK(s[0] == "");
-      CHECK(s[1] == "a");
-      CHECK(s[2] == "");
+      const auto res = Util::split_into_views(input, separators, m_mode);
+      REQUIRE(res.size() == expected.size());
+      for (int i = 0, total = expected.size(); i < total; ++i)
+        CHECK(res[i] == expected[i]);
     }
+
+    Mode m_mode;
+  };
+
+  SUBCASE("include empty tokens")
+  {
+    SplitTest split(Mode::include_empty);
+    split("", "/", {""});
+    split("/", "/", {"", ""});
+    split("a/", "/", {"a", ""});
+    split("/b", "/", {"", "b"});
+    split("a/b", "/", {"a", "b"});
+    split("/a:", "/:", {"", "a", ""});
   }
 
   SUBCASE("skip empty")
   {
-    CHECK(Util::split_into_views("", "/", Mode::skip_empty).empty());
-    CHECK(Util::split_into_views("///", "/", Mode::skip_empty).empty());
-    {
-      const auto s = Util::split_into_views("a/b", "/", Mode::skip_empty);
-      REQUIRE(s.size() == 2);
-      CHECK(s[0] == "a");
-      CHECK(s[1] == "b");
-    }
-    {
-      const auto s = Util::split_into_views("a/b", "x", Mode::skip_empty);
-      REQUIRE(s.size() == 1);
-      CHECK(s[0] == "a/b");
-    }
-    {
-      const auto s = Util::split_into_views("a/b:c", "/:", Mode::skip_empty);
-      REQUIRE(s.size() == 3);
-      CHECK(s[0] == "a");
-      CHECK(s[1] == "b");
-      CHECK(s[2] == "c");
-    }
-    {
-      const auto s =
-        Util::split_into_views(":a//b..:.c/:/.", "/:.", Mode::skip_empty);
-      REQUIRE(s.size() == 3);
-      CHECK(s[0] == "a");
-      CHECK(s[1] == "b");
-      CHECK(s[2] == "c");
-    }
-    {
-      const auto s = Util::split_into_views(
-        ".0.1.2.3.4.5.6.7.8.9.", "/:.+_abcdef", Mode::skip_empty);
-      REQUIRE(s.size() == 10);
-      CHECK(s[0] == "0");
-      CHECK(s[9] == "9");
-    }
+    SplitTest split(Mode::skip_empty);
+    split("", "/", {});
+    split("///", "/", {});
+    split("a/b", "/", {"a", "b"});
+    split("a/b", "x", {"a/b"});
+    split("a/b:c", "/:", {"a", "b", "c"});
+    split("/a:", "/:", {"a"});
+    split(":a//b..:.c/:/.", "/:.", {"a", "b", "c"});
+    split(".0.1.2.3.4.5.6.7.8.9.",
+          "/:.+_abcdef",
+          {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"});
   }
 
   SUBCASE("skip last empty token")
   {
-    CHECK(Util::split_into_views("", "/", Mode::skip_last_empty).empty());
-    {
-      const auto s = Util::split_into_views("/", "/", Mode::skip_last_empty);
-      REQUIRE(s.size() == 1);
-      CHECK(s[0] == "");
-    }
-    {
-      const auto s = Util::split_into_views("a/", "/", Mode::skip_last_empty);
-      REQUIRE(s.size() == 1);
-      CHECK(s[0] == "a");
-    }
-    {
-      const auto s = Util::split_into_views("/b", "/", Mode::skip_last_empty);
-      REQUIRE(s.size() == 2);
-      CHECK(s[0] == "");
-      CHECK(s[1] == "b");
-    }
-    {
-      const auto s = Util::split_into_views("a/b", "/", Mode::skip_last_empty);
-      REQUIRE(s.size() == 2);
-      CHECK(s[0] == "a");
-      CHECK(s[1] == "b");
-    }
-    {
-      const auto s = Util::split_into_views("/a:", "/:", Mode::skip_last_empty);
-      REQUIRE(s.size() == 2);
-      CHECK(s[0] == "");
-      CHECK(s[1] == "a");
-    }
+    SplitTest split(Mode::skip_last_empty);
+    split("", "/", {});
+    split("/", "/", {""});
+    split("a/", "/", {"a"});
+    split("/b", "/", {"", "b"});
+    split("a/b", "/", {"a", "b"});
+    split("/a:", "/:", {"", "a"});
   }
 }