]> source.dussan.org Git - rspamd.git/commitdiff
[Tests] Add unit tests
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 24 Jun 2023 14:52:34 +0000 (15:52 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 24 Jun 2023 14:52:34 +0000 (15:52 +0100)
src/libutil/CMakeLists.txt
src/libutil/cxx/util_tests.cxx [new file with mode: 0644]

index d3dd2645408d8da6bbaecba895dade9e8f34098f..67b7e948f22cd03d08cb897a31c60fec7dfb7154 100644 (file)
@@ -18,6 +18,7 @@ SET(LIBRSPAMDUTILSRC
                                ${CMAKE_CURRENT_SOURCE_DIR}/heap.c
                                ${CMAKE_CURRENT_SOURCE_DIR}/multipattern.c
                                ${CMAKE_CURRENT_SOURCE_DIR}/cxx/utf8_util.cxx
+               ${CMAKE_CURRENT_SOURCE_DIR}/cxx/util_tests.cxx
                ${CMAKE_CURRENT_SOURCE_DIR}/cxx/file_util.cxx)
 # Rspamdutil
 SET(RSPAMD_UTIL ${LIBRSPAMDUTILSRC} PARENT_SCOPE)
\ No newline at end of file
diff --git a/src/libutil/cxx/util_tests.cxx b/src/libutil/cxx/util_tests.cxx
new file mode 100644 (file)
index 0000000..6d7f4dd
--- /dev/null
@@ -0,0 +1,44 @@
+/*-
+ * Copyright 2023 Vsevolod Stakhov
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "util.hxx"
+
+#define DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL
+#include "doctest/doctest.h"
+
+using namespace rspamd;
+using namespace std::literals::string_view_literals;
+
+TEST_SUITE("cxx utils") {
+TEST_CASE("string_split_on") {
+       std::tuple<std::string_view, char, std::pair<std::string_view, std::string_view>> cases[] = {
+               {"test test"sv, ' ', std::pair{"test"sv, "test"sv}},
+               {"test    test"sv, ' ', std::pair{"test"sv, "test"sv}},
+               {"test  test  "sv, ' ', std::pair{"test"sv, "test  "sv}},
+               {"testtest  "sv, ' ', std::pair{"testtest"sv, ""sv}},
+               {"   testtest  "sv, ' ', std::pair{""sv, "testtest  "sv}},
+               {"testtest"sv, ' ', std::pair{"testtest"sv, ""sv}},
+               {""sv, ' ', std::pair{""sv, ""sv}},
+       };
+
+       for (const auto& c : cases) {
+               auto res = string_split_on(std::get<0>(c), std::get<1>(c));
+               auto expected = std::get<2>(c);
+               CHECK(res.first == expected.first);
+               CHECK(res.second == expected.second);
+       }
+}
+}
\ No newline at end of file