aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary/src/tests
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-09-23 13:03:45 +0200
committerTor Egge <Tor.Egge@online.no>2022-09-23 13:03:45 +0200
commita669fa8e612cab39d281c094e0265cc428575123 (patch)
treecc44aed867675fdd1d1fb936ee661dd021d7eb64 /searchsummary/src/tests
parent922ce1f4e259c22417300ed3008d29d06c9f35de (diff)
Add slime filler filter unit test.
Diffstat (limited to 'searchsummary/src/tests')
-rw-r--r--searchsummary/src/tests/docsummary/slime_filler_filter/CMakeLists.txt9
-rw-r--r--searchsummary/src/tests/docsummary/slime_filler_filter/slime_filler_filter_test.cpp143
2 files changed, 152 insertions, 0 deletions
diff --git a/searchsummary/src/tests/docsummary/slime_filler_filter/CMakeLists.txt b/searchsummary/src/tests/docsummary/slime_filler_filter/CMakeLists.txt
new file mode 100644
index 00000000000..2f886a24a95
--- /dev/null
+++ b/searchsummary/src/tests/docsummary/slime_filler_filter/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(searchsummary_slime_filler_filter_test_app TEST
+ SOURCES
+ slime_filler_filter_test.cpp
+ DEPENDS
+ searchsummary
+ GTest::GTest
+)
+vespa_add_test(NAME searchsummary_slime_filler_filter_test_app COMMAND searchsummary_slime_filler_filter_test_app)
diff --git a/searchsummary/src/tests/docsummary/slime_filler_filter/slime_filler_filter_test.cpp b/searchsummary/src/tests/docsummary/slime_filler_filter/slime_filler_filter_test.cpp
new file mode 100644
index 00000000000..9211981679b
--- /dev/null
+++ b/searchsummary/src/tests/docsummary/slime_filler_filter/slime_filler_filter_test.cpp
@@ -0,0 +1,143 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include <vespa/searchsummary/docsummary/slime_filler_filter.h>
+#include <vespa/vespalib/gtest/gtest.h>
+
+using search::docsummary::SlimeFillerFilter;
+
+namespace {
+
+class WrappedIterator {
+ SlimeFillerFilter::Iterator _iterator;
+public:
+ WrappedIterator(const SlimeFillerFilter::Iterator& iterator)
+ : _iterator(iterator)
+ {
+ }
+ WrappedIterator check_render(vespalib::stringref field_name) {
+ auto iterator = _iterator.check_field(field_name);
+ EXPECT_TRUE(iterator.should_render());
+ return iterator;
+ }
+ WrappedIterator check_block(vespalib::stringref field_name) {
+ auto iterator = _iterator.check_field(field_name);
+ EXPECT_FALSE(iterator.should_render());
+ return iterator;
+ }
+};
+
+}
+
+class SlimeFillerFilterTest : public testing::Test
+{
+ std::unique_ptr<SlimeFillerFilter> _filter;
+
+ WrappedIterator get_filter() {
+ return _filter ? _filter->begin() : SlimeFillerFilter::all();
+ }
+protected:
+ SlimeFillerFilterTest();
+ ~SlimeFillerFilterTest() override;
+
+ void drop_filter() { _filter.reset(); }
+ void reset_filter() { _filter = std::make_unique<SlimeFillerFilter>(); }
+
+ WrappedIterator check_render(vespalib::stringref field_name) {
+ return get_filter().check_render(field_name);
+ }
+ WrappedIterator check_block(vespalib::stringref field_name) {
+ return get_filter().check_block(field_name);
+ }
+ void check_render_no_sub_fields() {
+ check_block("a");
+ check_block("b");
+ check_block("c");
+ check_block("d");
+ }
+ void check_render_all_sub_fields() {
+ check_render("a").check_render("c");
+ check_render("b").check_render("c").check_render("d");
+ check_render("c");
+ check_render("b").check_render("d");
+ }
+ void check_render_some_sub_fields() {
+ check_render("a").check_render("c");
+ check_render("b").check_render("c").check_render("d");
+ check_block("c");
+ check_render("b").check_block("d");
+ }
+
+public:
+ SlimeFillerFilterTest& add(vespalib::stringref field_path) {
+ if (_filter) {
+ _filter->add(field_path);
+ }
+ return *this;
+ }
+
+ SlimeFillerFilterTest& add_remaining(vespalib::stringref field_path) {
+ SlimeFillerFilter::add_remaining(_filter, field_path);
+ return *this;
+ }
+};
+
+SlimeFillerFilterTest::SlimeFillerFilterTest()
+ : testing::Test(),
+ _filter(std::make_unique<SlimeFillerFilter>())
+{
+}
+
+SlimeFillerFilterTest::~SlimeFillerFilterTest() = default;
+
+TEST_F(SlimeFillerFilterTest, block_everything_or_nothing)
+{
+ check_render_no_sub_fields();
+ drop_filter();
+ check_render_all_sub_fields();
+ reset_filter();
+ check_render_no_sub_fields();
+}
+
+TEST_F(SlimeFillerFilterTest, filter_filters_sub_fields)
+{
+ add("a").add("b.c");
+ check_render_some_sub_fields();
+}
+
+TEST_F(SlimeFillerFilterTest, short_paths_shadows_longer_paths)
+{
+ add("a").add("a.f").add("b.c");
+ check_render_some_sub_fields();
+ reset_filter();
+ add("a.f").add("a").add("b.c");
+ check_render_some_sub_fields();
+}
+
+TEST_F(SlimeFillerFilterTest, simple_remaining_path_allows_all_sub_fields)
+{
+ add_remaining("z");
+ check_render_all_sub_fields();
+}
+
+TEST_F(SlimeFillerFilterTest, composite_remainig_paths_filter_sub_fields)
+{
+ add_remaining("z.a").add_remaining("z.b.c");
+ check_render_some_sub_fields();
+}
+
+TEST_F(SlimeFillerFilterTest, short_remaining_path_shadows_longer_remaining_path)
+{
+ add_remaining("z").add_remaining("z.k");
+ check_render_all_sub_fields();
+ reset_filter();
+ add_remaining("z.k").add_remaining("z");
+ check_render_all_sub_fields();
+ reset_filter();
+ add_remaining("z.a").add_remaining("z.a.f").add_remaining("z.b.c");
+ check_render_some_sub_fields();
+ reset_filter();
+ add_remaining("z.a.f").add_remaining("z.a").add_remaining("z.b.c");
+ check_render_some_sub_fields();
+}
+
+GTEST_MAIN_RUN_ALL_TESTS()