]> source.dussan.org Git - rspamd.git/commitdiff
[Project] Css: Add simple selectors unit tests
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 16 Mar 2021 20:41:42 +0000 (20:41 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 16 Mar 2021 20:41:42 +0000 (20:41 +0000)
src/libserver/css/css_selector.cxx

index a1ed0e234b735952878538c89deea57db8532a32..48914dc1e8fc5b4fea8cbb8644cc5eca57db9e5d 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "css_selector.hxx"
 #include "fmt/core.h"
+#define DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL
+#include "doctest/doctest.h"
 
 namespace rspamd::css {
 
@@ -184,5 +186,35 @@ css_selector::debug_str() const -> std::string
        return ret;
 }
 
+TEST_SUITE("css selectors") {
+       TEST_CASE("simple css selectors") {
+               const std::vector<std::pair<const char *, std::vector<css_selector::selector_type>>> cases{
+                               {"em", {css_selector::selector_type::SELECTOR_ELEMENT}},
+                               {"*", {css_selector::selector_type::SELECTOR_ALL}},
+                               {".class", {css_selector::selector_type::SELECTOR_CLASS}},
+                               {"#id", {css_selector::selector_type::SELECTOR_ID}},
+                               {"em,.class,#id", {css_selector::selector_type::SELECTOR_ELEMENT,
+                                                                  css_selector::selector_type::SELECTOR_CLASS,
+                                                                  css_selector::selector_type::SELECTOR_ID}},
+               };
+
+               auto *pool = rspamd_mempool_new(rspamd_mempool_suggest_size(),
+                       "css", 0);
+
+               for (const auto &c : cases) {
+                       auto res = process_selector_tokens(pool,
+                                       get_selectors_parser_functor(pool, c.first));
+
+                       CHECK(c.second.size() == res.size());
+
+                       for (auto i = 0; i < c.second.size(); i ++) {
+                               CHECK(res[i]->type == c.second[i]);
+                       }
+               }
+
+               rspamd_mempool_delete(pool);
+       }
+}
+
 }