Skip to content

Commit

Permalink
Add tests for icon.c
Browse files Browse the repository at this point in the history
  • Loading branch information
bebehei authored and tsipinakis committed May 14, 2018
1 parent 651be8e commit 3f7de41
Show file tree
Hide file tree
Showing 14 changed files with 204 additions and 0 deletions.
29 changes: 29 additions & 0 deletions .valgrind.suppressions
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,32 @@
...
fun:main
}

# librsvg leaks some memory, when an invalid svg file is read
# TODO: find the memory leak and fix it upstream
{
invalid_svgs1
Memcheck:Leak
...
fun:gdk_pixbuf__svg_image_load_increment
...
fun:get_pixbuf_from_file
}

{
invalid_svgs2
Memcheck:Leak
...
fun:gdk_pixbuf__svg_image_begin_load
...
fun:get_pixbuf_from_file
}

{
invalid_svgs3
Memcheck:Leak
...
fun:rsvg_handle_write
...
fun:get_pixbuf_from_file
}
1 change: 1 addition & 0 deletions test/data/icons/invalid.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions test/data/icons/invalid.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions test/data/icons/path/invalid/icon1.png
1 change: 1 addition & 0 deletions test/data/icons/path/invalid/icon1.svg
1 change: 1 addition & 0 deletions test/data/icons/path/valid/icon1.png
1 change: 1 addition & 0 deletions test/data/icons/path/valid/icon1.svg
1 change: 1 addition & 0 deletions test/data/icons/path/valid/onlypng.png
1 change: 1 addition & 0 deletions test/data/icons/path/valid/onlysvg.svg
Binary file added test/data/icons/valid.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
65 changes: 65 additions & 0 deletions test/data/icons/valid.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
98 changes: 98 additions & 0 deletions test/icon.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#include "greatest.h"
#include "../src/icon.h"
#include "../src/utils.h"

#include <gdk-pixbuf/gdk-pixbuf.h>
#include <glib.h>

#define ICONPREFIX "./data/icons/path"

/* As there are no hints to test if the loaded GdkPixbuf is
* read from a PNG or an SVG file, the sample icons in the
* test structure have different sizes
*/
#define IS_ICON_PNG(pb) 4 == gdk_pixbuf_get_width(pb)
#define IS_ICON_SVG(pb) 16 == gdk_pixbuf_get_width(pb)

TEST test_get_pixbuf_from_path_invalid(void)
{
GdkPixbuf *pixbuf = get_pixbuf_from_path("invalid");
ASSERT(pixbuf == NULL);
g_clear_pointer(&pixbuf, g_object_unref);

PASS();
}

TEST test_get_pixbuf_from_path_both(void)
{
GdkPixbuf *pixbuf = get_pixbuf_from_path("icon1");
ASSERT(pixbuf);
ASSERTm("SVG pixbuf hasn't precedence", IS_ICON_SVG(pixbuf));
g_clear_pointer(&pixbuf, g_object_unref);

PASS();
}

TEST test_get_pixbuf_from_path_onlysvg(void)
{
GdkPixbuf *pixbuf = get_pixbuf_from_path("onlysvg");
ASSERT(pixbuf);
ASSERTm("SVG pixbuf isn't loaded", IS_ICON_SVG(pixbuf));
g_clear_pointer(&pixbuf, g_object_unref);

PASS();
}

TEST test_get_pixbuf_from_path_onlypng(void)
{
GdkPixbuf *pixbuf = get_pixbuf_from_path("onlypng");
ASSERT(pixbuf);
ASSERTm("PNG pixbuf isn't loaded", IS_ICON_PNG(pixbuf));
g_clear_pointer(&pixbuf, g_object_unref);

PASS();
}

TEST test_get_pixbuf_from_path_filename(void)
{
char *icon = string_append(g_get_current_dir(), "/data/icons/valid.png", NULL);
GdkPixbuf *pixbuf = get_pixbuf_from_path(icon);
ASSERT(pixbuf);
ASSERTm("PNG pixbuf isn't loaded", IS_ICON_PNG(pixbuf));
g_clear_pointer(&pixbuf, g_object_unref);

g_free(icon);
PASS();
}

TEST test_get_pixbuf_from_path_fileuri(void)
{
char *curdir = g_get_current_dir();
char *icon = g_strconcat("file://", curdir,"/data/icons/valid.svg", NULL);
GdkPixbuf *pixbuf = get_pixbuf_from_path(icon);
ASSERT(pixbuf);
ASSERTm("SVG pixbuf isn't loaded", IS_ICON_SVG(pixbuf));
g_clear_pointer(&pixbuf, g_object_unref);

g_free(icon);
g_free(curdir);
PASS();
}

SUITE(suite_icon)
{
settings.icon_path =
ICONPREFIX "/invalid"
":" ICONPREFIX "/valid"
":" ICONPREFIX "/both";

RUN_TEST(test_get_pixbuf_from_path_invalid);
RUN_TEST(test_get_pixbuf_from_path_both);
RUN_TEST(test_get_pixbuf_from_path_onlysvg);
RUN_TEST(test_get_pixbuf_from_path_onlypng);
RUN_TEST(test_get_pixbuf_from_path_filename);
RUN_TEST(test_get_pixbuf_from_path_fileuri);

settings.icon_path = NULL;
}
/* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */
2 changes: 2 additions & 0 deletions test/notification.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ SUITE(suite_notification)
g_free(b);

RUN_TEST(test_notification_replace_single_field);

g_clear_pointer(&settings.icon_path, g_free);
}

/* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */
2 changes: 2 additions & 0 deletions test/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ SUITE_EXTERN(suite_utils);
SUITE_EXTERN(suite_option_parser);
SUITE_EXTERN(suite_notification);
SUITE_EXTERN(suite_markup);
SUITE_EXTERN(suite_icon);

GREATEST_MAIN_DEFS();

Expand All @@ -20,6 +21,7 @@ int main(int argc, char *argv[]) {
RUN_SUITE(suite_option_parser);
RUN_SUITE(suite_notification);
RUN_SUITE(suite_markup);
RUN_SUITE(suite_icon);
GREATEST_MAIN_END();
}
/* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */

0 comments on commit 3f7de41

Please sign in to comment.