diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-09-23 13:03:45 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-09-23 13:03:45 +0200 |
commit | a669fa8e612cab39d281c094e0265cc428575123 (patch) | |
tree | cc44aed867675fdd1d1fb936ee661dd021d7eb64 /searchsummary | |
parent | 922ce1f4e259c22417300ed3008d29d06c9f35de (diff) |
Add slime filler filter unit test.
Diffstat (limited to 'searchsummary')
3 files changed, 153 insertions, 0 deletions
diff --git a/searchsummary/CMakeLists.txt b/searchsummary/CMakeLists.txt index 3aedae13e70..9c9079e6ed5 100644 --- a/searchsummary/CMakeLists.txt +++ b/searchsummary/CMakeLists.txt @@ -23,6 +23,7 @@ vespa_define_module( src/tests/docsummary/matched_elements_filter src/tests/docsummary/result_class src/tests/docsummary/slime_filler + src/tests/docsummary/slime_filler_filter src/tests/docsummary/slime_summary src/tests/juniper ) 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() |