You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by bp...@apache.org on 2015/12/15 15:09:45 UTC

celix git commit: CELIX-327: add support for greather-than and lesser-than operators in filter implementation

Repository: celix
Updated Branches:
  refs/heads/develop 67a7170d7 -> 135ea22a9


CELIX-327: add support for greather-than and lesser-than operators in filter implementation


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/135ea22a
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/135ea22a
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/135ea22a

Branch: refs/heads/develop
Commit: 135ea22a97c129afad8bd10ddfa772ce31446128
Parents: 67a7170
Author: Bjoern Petri <bp...@apache.org>
Authored: Tue Dec 15 15:09:07 2015 +0100
Committer: Bjoern Petri <bp...@apache.org>
Committed: Tue Dec 15 15:09:07 2015 +0100

----------------------------------------------------------------------
 framework/private/include/filter_private.h |  2 ++
 framework/private/src/filter.c             | 34 ++++++++++++++++++++++---
 framework/private/test/filter_test.cpp     | 29 +++++++++++++++++++++
 3 files changed, 61 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/135ea22a/framework/private/include/filter_private.h
----------------------------------------------------------------------
diff --git a/framework/private/include/filter_private.h b/framework/private/include/filter_private.h
index bf3139f..548a6d2 100644
--- a/framework/private/include/filter_private.h
+++ b/framework/private/include/filter_private.h
@@ -36,7 +36,9 @@ typedef enum operand
 	EQUAL,
 	APPROX,
 	GREATER,
+    GREATEREQUAL,
 	LESS,
+	LESSEQUAL,
 	PRESENT,
 	SUBSTRING,
 	AND,

http://git-wip-us.apache.org/repos/asf/celix/blob/135ea22a/framework/private/src/filter.c
----------------------------------------------------------------------
diff --git a/framework/private/src/filter.c b/framework/private/src/filter.c
index 834280d..bf632ff 100644
--- a/framework/private/src/filter.c
+++ b/framework/private/src/filter.c
@@ -228,22 +228,38 @@ filter_pt filter_parseItem(char * filterString, int * pos) {
 			if (filterString[*pos + 1] == '=') {
 				filter_pt filter = (filter_pt) malloc(sizeof(*filter));
 				*pos += 2;
-				filter->operand = GREATER;
+				filter->operand = GREATEREQUAL;
 				filter->attribute = attr;
 				filter->value = filter_parseValue(filterString, pos);
 				return filter;
 			}
+			else {
+                filter_pt filter = (filter_pt) malloc(sizeof(*filter));
+                *pos += 1;
+                filter->operand = GREATER;
+                filter->attribute = attr;
+                filter->value = filter_parseValue(filterString, pos);
+                return filter;
+			}
 			break;
 		}
 		case '<': {
 			if (filterString[*pos + 1] == '=') {
 				filter_pt filter = (filter_pt) malloc(sizeof(*filter));
 				*pos += 2;
-				filter->operand = LESS;
+				filter->operand = LESSEQUAL;
 				filter->attribute = attr;
 				filter->value = filter_parseValue(filterString, pos);
 				return filter;
 			}
+			else {
+                filter_pt filter = (filter_pt) malloc(sizeof(*filter));
+                *pos += 1;
+                filter->operand = LESS;
+                filter->attribute = attr;
+                filter->value = filter_parseValue(filterString, pos);
+                return filter;
+			}
 			break;
 		}
 		case '=': {
@@ -459,7 +475,9 @@ celix_status_t filter_match(filter_pt filter, properties_pt properties, bool *re
 		case SUBSTRING :
 		case EQUAL :
 		case GREATER :
+        case GREATEREQUAL :
 		case LESS :
+        case LESSEQUAL :
 		case APPROX : {
 			char * value = (properties == NULL) ? NULL: properties_get(properties, filter->attribute);
 
@@ -548,13 +566,21 @@ celix_status_t filter_compareString(OPERAND operand, char * string, void * value
 			return CELIX_SUCCESS;
 		}
 		case GREATER: {
-			*result = (strcmp(string, (char *) value2) >= 0);
+			*result = (strcmp(string, (char *) value2) > 0);
 			return CELIX_SUCCESS;
 		}
+        case GREATEREQUAL: {
+            *result = (strcmp(string, (char *) value2) >= 0);
+            return CELIX_SUCCESS;
+        }
 		case LESS: {
-			*result = (strcmp(string, (char *) value2) <= 0);
+			*result = (strcmp(string, (char *) value2) < 0);
 			return CELIX_SUCCESS;
 		}
+        case LESSEQUAL: {
+            *result = (strcmp(string, (char *) value2) <= 0);
+            return CELIX_SUCCESS;
+        }
 		case AND:
 		case NOT:
 		case OR:

http://git-wip-us.apache.org/repos/asf/celix/blob/135ea22a/framework/private/test/filter_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/filter_test.cpp b/framework/private/test/filter_test.cpp
index e6a6930..2ed7485 100644
--- a/framework/private/test/filter_test.cpp
+++ b/framework/private/test/filter_test.cpp
@@ -51,6 +51,8 @@ TEST_GROUP(filter) {
 	void teardown() {
 		mock().checkExpectations();
 		mock().clear();
+
+		free(logger);
 	}
 };
 
@@ -62,5 +64,32 @@ TEST(filter, create) {
 }
 
 
+TEST(filter, create1) {
+    char filterStr[] = "(key<value)";
+    filter_pt filter = filter_create(filterStr);
+
+    STRCMP_EQUAL(filterStr, filter->filterStr);
+}
+
+TEST(filter, create2) {
+    char filterStr[] = "(key>value)";
+    filter_pt filter = filter_create(filterStr);
+
+    STRCMP_EQUAL(filterStr, filter->filterStr);
+}
+
+TEST(filter, create3) {
+    char filterStr[] = "(key<=value)";
+    filter_pt filter = filter_create(filterStr);
+
+    STRCMP_EQUAL(filterStr, filter->filterStr);
+}
+
+TEST(filter, create4) {
+    char filterStr[] = "(key>=value)";
+    filter_pt filter = filter_create(filterStr);
+
+    STRCMP_EQUAL(filterStr, filter->filterStr);
+}