Blame gcr/test-memory-icon.c

Packit b00eeb
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit b00eeb
/*
Packit b00eeb
   Copyright (C) 2011 Collabora Ltd
Packit b00eeb
Packit b00eeb
   The Gnome Keyring Library is free software; you can redistribute it and/or
Packit b00eeb
   modify it under the terms of the GNU Library General Public License as
Packit b00eeb
   published by the Free Software Foundation; either version 2 of the
Packit b00eeb
   License, or (at your option) any later version.
Packit b00eeb
Packit b00eeb
   The Gnome Keyring Library is distributed in the hope that it will be useful,
Packit b00eeb
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit b00eeb
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit b00eeb
   Library General Public License for more details.
Packit b00eeb
Packit b00eeb
   You should have received a copy of the GNU Library General Public
Packit b00eeb
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit b00eeb
   see <http://www.gnu.org/licenses/>.
Packit b00eeb
Packit b00eeb
   Author: Stef Walter <stefw@collabora.co.uk>
Packit b00eeb
*/
Packit b00eeb
Packit b00eeb
#include "config.h"
Packit b00eeb
Packit b00eeb
#include "gcr/gcr-memory-icon.h"
Packit b00eeb
Packit b00eeb
#include "egg/egg-testing.h"
Packit b00eeb
Packit b00eeb
#include <glib.h>
Packit b00eeb
Packit b00eeb
#include <errno.h>
Packit b00eeb
#include <stdlib.h>
Packit b00eeb
#include <string.h>
Packit b00eeb
Packit b00eeb
typedef struct {
Packit b00eeb
	GIcon *icon;
Packit b00eeb
	GAsyncResult *result;
Packit b00eeb
} Test;
Packit b00eeb
Packit b00eeb
static const guint8 test_data[256] = {
Packit b00eeb
	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
Packit b00eeb
	16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
Packit b00eeb
	32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
Packit b00eeb
	48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
Packit b00eeb
	64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
Packit b00eeb
	80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
Packit b00eeb
	96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
Packit b00eeb
	112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
Packit b00eeb
	128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
Packit b00eeb
	144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
Packit b00eeb
	160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
Packit b00eeb
	176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
Packit b00eeb
	192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
Packit b00eeb
	208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
Packit b00eeb
	224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
Packit b00eeb
	240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
Packit b00eeb
};
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
setup (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	test->icon = _gcr_memory_icon_new ("application/octet-stream",
Packit b00eeb
	                                   test_data, sizeof (test_data));
Packit b00eeb
	g_object_add_weak_pointer (G_OBJECT (test->icon), (gpointer *)&test->icon);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
teardown (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	g_object_unref (test->icon);
Packit b00eeb
Packit b00eeb
	if (test->result) {
Packit b00eeb
		g_object_unref (test->result);
Packit b00eeb
		g_assert (test->result == NULL);
Packit b00eeb
	}
Packit b00eeb
Packit b00eeb
	g_assert (test->icon == NULL);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_equal_same (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	g_assert (g_icon_equal (test->icon, test->icon) == TRUE);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_equal_not (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	GIcon *icon;
Packit b00eeb
Packit b00eeb
	icon = g_themed_icon_new ("folder");
Packit b00eeb
	g_assert (g_icon_equal (test->icon, icon) == FALSE);
Packit b00eeb
	g_object_unref (icon);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_equal_data (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	GIcon *icon;
Packit b00eeb
Packit b00eeb
	icon = _gcr_memory_icon_new ("application/octet-stream",
Packit b00eeb
	                             test_data, sizeof (test_data));
Packit b00eeb
	g_assert (g_icon_equal (test->icon, icon) == TRUE);
Packit b00eeb
	g_assert_cmpuint (g_icon_hash (test->icon), ==, g_icon_hash (icon));
Packit b00eeb
	g_object_unref (icon);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_different_type (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	GIcon *icon;
Packit b00eeb
Packit b00eeb
	icon = _gcr_memory_icon_new ("application/x-other",
Packit b00eeb
	                             test_data, sizeof (test_data));
Packit b00eeb
	g_assert (g_icon_equal (test->icon, icon) == FALSE);
Packit b00eeb
	g_assert_cmpuint (g_icon_hash (test->icon), !=, g_icon_hash (icon));
Packit b00eeb
	g_object_unref (icon);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_different_offset (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	GIcon *icon;
Packit b00eeb
Packit b00eeb
	icon = _gcr_memory_icon_new_full ("application/octet-stream", (gpointer)test_data,
Packit b00eeb
	                                  sizeof (test_data) - 16, 16, NULL);
Packit b00eeb
	g_assert (g_icon_equal (test->icon, icon) == FALSE);
Packit b00eeb
	g_assert_cmpuint (g_icon_hash (test->icon), !=, g_icon_hash (icon));
Packit b00eeb
	g_object_unref (icon);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_load_sync (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GInputStream *is;
Packit b00eeb
	gchar buf[1024];
Packit b00eeb
	gsize length;
Packit b00eeb
	gchar *type;
Packit b00eeb
Packit b00eeb
	is = g_loadable_icon_load (G_LOADABLE_ICON (test->icon), 0, &type, NULL, &error);
Packit b00eeb
	g_assert (is != NULL);
Packit b00eeb
	g_assert_no_error (error);
Packit b00eeb
	g_assert_cmpstr (type, ==, "application/octet-stream");
Packit b00eeb
Packit b00eeb
	if (!g_input_stream_read_all (is, buf, sizeof (buf), &length, NULL, &error))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert_no_error (error);
Packit b00eeb
	egg_assert_cmpsize (length, ==, sizeof (test_data));
Packit b00eeb
	egg_assert_cmpmem (buf, length, ==, test_data, sizeof (test_data));
Packit b00eeb
Packit b00eeb
	g_free (type);
Packit b00eeb
	g_object_unref (is);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
on_async_ready (GObject *source, GAsyncResult *result, gpointer user_data)
Packit b00eeb
{
Packit b00eeb
	Test *test = user_data;
Packit b00eeb
	GObject *result_source;
Packit b00eeb
Packit b00eeb
	g_assert (G_OBJECT (test->icon) == source);
Packit b00eeb
	g_assert (test->result == NULL);
Packit b00eeb
Packit b00eeb
	result_source = g_async_result_get_source_object (result);
Packit b00eeb
	g_assert (result_source == source);
Packit b00eeb
	g_object_unref (result_source);
Packit b00eeb
Packit b00eeb
	test->result = g_object_ref (result);
Packit b00eeb
	g_object_add_weak_pointer (G_OBJECT (test->result), (gpointer *)&test->result);
Packit b00eeb
	egg_test_wait_stop ();
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_load_async (Test *test, gconstpointer unused)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GInputStream *is;
Packit b00eeb
	gchar buf[1024];
Packit b00eeb
	gsize length;
Packit b00eeb
	gchar *type;
Packit b00eeb
Packit b00eeb
	g_loadable_icon_load_async (G_LOADABLE_ICON (test->icon), 0, NULL, on_async_ready, test);
Packit b00eeb
	egg_test_wait_until (500);
Packit b00eeb
Packit b00eeb
	g_assert (test->result);
Packit b00eeb
	is = g_loadable_icon_load_finish (G_LOADABLE_ICON (test->icon), test->result, &type, &error);
Packit b00eeb
	g_assert (is != NULL);
Packit b00eeb
	g_assert_no_error (error);
Packit b00eeb
	g_assert_cmpstr (type, ==, "application/octet-stream");
Packit b00eeb
	g_object_add_weak_pointer (G_OBJECT (is), (gpointer *)&is);
Packit b00eeb
Packit b00eeb
	if (!g_input_stream_read_all (is, buf, sizeof (buf), &length, NULL, &error))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert_no_error (error);
Packit b00eeb
	egg_assert_cmpsize (length, ==, sizeof (test_data));
Packit b00eeb
	egg_assert_cmpmem (buf, length, ==, test_data, sizeof (test_data));
Packit b00eeb
Packit b00eeb
	g_free (type);
Packit b00eeb
	g_object_unref (is);
Packit b00eeb
	g_assert (is == NULL);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
int
Packit b00eeb
main (int argc, char **argv)
Packit b00eeb
{
Packit b00eeb
	g_test_init (&argc, &argv, NULL);
Packit b00eeb
Packit b00eeb
	g_test_add ("/gcr/memory-icon/equal_same", Test, NULL, setup, test_equal_same, teardown);
Packit b00eeb
	g_test_add ("/gcr/memory-icon/equal_not", Test, NULL, setup, test_equal_not, teardown);
Packit b00eeb
	g_test_add ("/gcr/memory-icon/equal_data", Test, NULL, setup, test_equal_data, teardown);
Packit b00eeb
	g_test_add ("/gcr/memory-icon/different_type", Test, NULL, setup, test_different_type, teardown);
Packit b00eeb
	g_test_add ("/gcr/memory-icon/different_offset", Test, NULL, setup, test_different_offset, teardown);
Packit b00eeb
	g_test_add ("/gcr/memory-icon/load_sync", Test, NULL, setup, test_load_sync, teardown);
Packit b00eeb
	g_test_add ("/gcr/memory-icon/load_async", Test, NULL, setup, test_load_async, teardown);
Packit b00eeb
Packit b00eeb
	return egg_tests_run_with_loop ();
Packit b00eeb
}