This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch feature/674-use-properties-type-in-filter
in repository https://gitbox.apache.org/repos/asf/celix.git
The following commit(s) were added to
refs/heads/feature/674-use-properties-type-in-filter by this push:
new abd4da92 Add additional null argument test for filter
abd4da92 is described below
commit abd4da92805876f7ab65a781a46a37e31d2632ce
Author: Pepijn Noltes <[email protected]>
AuthorDate: Fri Dec 1 16:32:03 2023 +0100
Add additional null argument test for filter
---
libs/utils/gtest/src/FilterTestSuite.cc | 41 ++++++++++++++++++---------------
libs/utils/include/celix_filter.h | 3 ++-
libs/utils/src/filter.c | 4 ++--
3 files changed, 27 insertions(+), 21 deletions(-)
diff --git a/libs/utils/gtest/src/FilterTestSuite.cc
b/libs/utils/gtest/src/FilterTestSuite.cc
index ac54f006..d6cad19e 100644
--- a/libs/utils/gtest/src/FilterTestSuite.cc
+++ b/libs/utils/gtest/src/FilterTestSuite.cc
@@ -146,38 +146,29 @@ TEST_F(FilterTestSuite, MiscInvalidCreateTest) {
}
TEST_F(FilterTestSuite, MatchEqualTest) {
- char* str;
celix_filter_t* filter;
celix_properties_t* props = celix_properties_create();
- char* key = celix_utils_strdup("test_attr1");
- char* val = celix_utils_strdup("attr1");
- char* key2 = celix_utils_strdup("test_attr2");
- char* val2 = celix_utils_strdup("attr2");
+ const char* key = "test_attr1";
+ const char* val = "attr1";
+ const char* key2 = "test_attr2";
+ const char* val2 = "attr2";
celix_properties_set(props, key, val);
celix_properties_set(props, key2, val2);
+
// test AND
- str =
celix_utils_strdup("(&(test_attr1=attr1)(|(test_attr2=attr2)(!(test_attr3=attr3))))");
- filter = celix_filter_create(str);
+ filter =
celix_filter_create("(&(test_attr1=attr1)(|(test_attr2=attr2)(!(test_attr3=attr3))))");
bool result = celix_filter_match(filter, props);
ASSERT_TRUE(result);
+ celix_filter_destroy(filter);
// test AND false
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1=attr1)(test_attr1=attr2))");
- filter = celix_filter_create(str);
- ASSERT_TRUE(filter == nullptr);
+ filter = celix_filter_create("(&(test_attr1=attr1)(test_attr1=attr2))");
result = celix_filter_match(filter, props);
ASSERT_FALSE(result);
+ celix_filter_destroy(filter);
// cleanup
celix_properties_destroy(props);
- celix_filter_destroy(filter);
- free(str);
- free(key);
- free(key2);
- free(val);
- free(val2);
}
TEST_F(FilterTestSuite, MatchTest) {
@@ -315,6 +306,20 @@ TEST_F(FilterTestSuite, MatchTest) {
celix_filter_destroy(filter);
}
+TEST_F(FilterTestSuite, MatchWithNullTest) {
+ //match with null filter, should return true
+ EXPECT_TRUE(celix_filter_match(nullptr, nullptr));
+
+ //match with null properties with a valid match all filter, should return
true
+ celix_autoptr(celix_filter_t) filter1 = celix_filter_create("(|)");
+ EXPECT_TRUE(celix_filter_match(filter1, nullptr));
+
+ //match with null properties, should return false if an attribute is needed
+ celix_autoptr(celix_filter_t) filter2 =
celix_filter_create("(test_attr1=attr1)");
+ EXPECT_FALSE(celix_filter_match(filter2, nullptr));
+}
+
+
TEST_F(FilterTestSuite, MatchRecursionTest) {
auto* str =
"(&(test_attr1=attr1)(|(&(test_attr2=attr2)(!(&(test_attr1=attr1)(test_attr3=attr3))))(test_attr3=attr3)))";
auto* filter = celix_filter_create(str);
diff --git a/libs/utils/include/celix_filter.h
b/libs/utils/include/celix_filter.h
index 1cdb8eb7..cbe54492 100644
--- a/libs/utils/include/celix_filter.h
+++ b/libs/utils/include/celix_filter.h
@@ -133,7 +133,8 @@ CELIX_DEFINE_AUTOPTR_CLEANUP_FUNC(celix_filter_t,
celix_filter_destroy)
* @brief Check whether the provided filter matches the provided properties.
* @param[in] filter The filter.
* @param[in] props The properties.
- * @return True if the filter matches the properties, false otherwise. If
filter or props is NULL false is returned.
+ * @return True if the filter matches the properties, false otherwise. If
filter is NULL always returns true and
+ * if props is NULL, the result is the same as if an empty properties
set was provided.
*/
CELIX_UTILS_EXPORT bool celix_filter_match(const celix_filter_t* filter, const
celix_properties_t* props);
diff --git a/libs/utils/src/filter.c b/libs/utils/src/filter.c
index cdc0a600..ab0469c8 100644
--- a/libs/utils/src/filter.c
+++ b/libs/utils/src/filter.c
@@ -789,8 +789,8 @@ void celix_filter_destroy(celix_filter_t* filter) {
}
bool celix_filter_match(const celix_filter_t* filter, const
celix_properties_t* properties) {
- if (!filter || !properties) {
- return false; // matching on null filter or property is always false
+ if (!filter) {
+ return true; // if filter is NULL, it matches
}
if (filter->operand == CELIX_FILTER_OPERAND_PRESENT) {