diff --git a/test/data/dunstrc.default b/test/data/dunstrc.default new file mode 120000 index 0000000..921ed3c --- /dev/null +++ b/test/data/dunstrc.default @@ -0,0 +1 @@ +../../dunstrc \ No newline at end of file diff --git a/test/notification.c b/test/notification.c new file mode 100644 index 0000000..6fcdcc5 --- /dev/null +++ b/test/notification.c @@ -0,0 +1,94 @@ +#include "greatest.h" +#include "src/notification.h" +#include "src/option_parser.h" +#include "src/settings.h" + +#include + +TEST test_notification_is_duplicate_field(char **field, notification *a, + notification *b) +{ + ASSERT(notification_is_duplicate(a, b)); + char *tmp = *field; + (*field) = "Something different"; + ASSERT_FALSE(notification_is_duplicate(a, b)); + (*field) = tmp; + + PASS(); +} + +TEST test_notification_is_duplicate(void *notifications) +{ + notification **n = (notification**)notifications; + notification *a = n[0]; + notification *b = n[1]; + + ASSERT(notification_is_duplicate(a, b)); + + CHECK_CALL(test_notification_is_duplicate_field(&(b->appname), a, b)); + CHECK_CALL(test_notification_is_duplicate_field(&(b->summary), a, b)); + CHECK_CALL(test_notification_is_duplicate_field(&(b->body), a, b)); + + ASSERT(notification_is_duplicate(a, b)); + + char *tmp = b->icon; + enum icon_position_t icon_tmp = settings.icon_position; + + b->icon = "Test1"; + + settings.icon_position = icons_off; + ASSERT(notification_is_duplicate(a, b)); + //Setting pointer to a random value since we are checking for null + b->raw_icon = (RawImage*)0xff; + ASSERT(notification_is_duplicate(a, b)); + b->raw_icon = NULL; + + settings.icon_position = icons_left; + ASSERT_FALSE(notification_is_duplicate(a, b)); + b->raw_icon = (RawImage*)0xff; + ASSERT_FALSE(notification_is_duplicate(a, b)); + b->raw_icon = NULL; + + settings.icon_position = icons_right; + ASSERT_FALSE(notification_is_duplicate(a, b)); + b->raw_icon = (RawImage*)0xff; + ASSERT_FALSE(notification_is_duplicate(a, b)); + b->raw_icon = NULL; + + b->icon = tmp; + settings.icon_position = icon_tmp; + + ASSERT(notification_is_duplicate(a, b)); + + b->urgency = LOW; + ASSERT_FALSE(notification_is_duplicate(a, b)); + b->urgency = NORM; + ASSERT(notification_is_duplicate(a, b)); + b->urgency = CRIT; + ASSERT_FALSE(notification_is_duplicate(a, b)); + + PASS(); +} + +SUITE(suite_notification) +{ + cmdline_load(0, NULL); + load_settings("data/dunstrc"); + + notification *a = notification_create(); + a->appname = "Test"; + a->summary = "Summary"; + a->body = "Body"; + a->icon = "Icon"; + a->urgency = NORM; + + notification *b = notification_create(); + memcpy(b, a, sizeof(*b)); + + //2 equal notifications to be passed for duplicate checking, + notification *n[2] = {a, b}; + + RUN_TEST1(test_notification_is_duplicate, (void*) n); +} + +/* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */ diff --git a/test/test.c b/test/test.c index 6de63cd..417ba19 100644 --- a/test/test.c +++ b/test/test.c @@ -2,6 +2,7 @@ SUITE_EXTERN(suite_utils); SUITE_EXTERN(suite_option_parser); +SUITE_EXTERN(suite_notification); GREATEST_MAIN_DEFS(); @@ -9,6 +10,7 @@ int main(int argc, char *argv[]) { GREATEST_MAIN_BEGIN(); RUN_SUITE(suite_utils); RUN_SUITE(suite_option_parser); + RUN_SUITE(suite_notification); GREATEST_MAIN_END(); } /* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */