From 481559a031db00b32d2ac65277e50eafd9923b05 Mon Sep 17 00:00:00 2001 From: Ryan Lortie Date: Mon, 5 Jan 2009 06:58:22 +0000 Subject: [PATCH] improve add new simple-async-result test new file to test 2009-01-05 Ryan Lortie * tests/.gitignore: improve * tests/Makefile.am: add new simple-async-result test * tests/simple-async-result.c: new file to test GSimpleAsyncResult svn path=/trunk/; revision=7767 --- gio/ChangeLog | 6 +++ gio/tests/.gitignore | 5 ++ gio/tests/Makefile.am | 5 +- gio/tests/simple-async-result.c | 107 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 gio/tests/simple-async-result.c diff --git a/gio/ChangeLog b/gio/ChangeLog index 69bea0e..6736067 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,5 +1,11 @@ 2009-01-05 Ryan Lortie + * tests/.gitignore: improve + * tests/Makefile.am: add new simple-async-result test + * tests/simple-async-result.c: new file to test GSimpleAsyncResult + +2009-01-05 Ryan Lortie + * gio.symbols: * ../docs/reference/gio/gio-sections.txt: * gsimpleasyncresult.h: diff --git a/gio/tests/.gitignore b/gio/tests/.gitignore index 1e382a8..e770aaa 100644 --- a/gio/tests/.gitignore +++ b/gio/tests/.gitignore @@ -1,3 +1,8 @@ +buffered-input-stream +desktop-app-info +g-icon +simple-async-result +unix-streams data-input-stream data-output-stream g-file diff --git a/gio/tests/Makefile.am b/gio/tests/Makefile.am index 1e7a483..abfe883 100644 --- a/gio/tests/Makefile.am +++ b/gio/tests/Makefile.am @@ -24,7 +24,8 @@ TEST_PROGS += \ data-input-stream \ data-output-stream \ g-icon \ - buffered-input-stream + buffered-input-stream \ + simple-async-result if OS_UNIX TEST_PROGS += live-g-file unix-streams desktop-app-info @@ -64,5 +65,7 @@ unix_streams_SOURCES = unix-streams.c unix_streams_LDADD = $(progs_ldadd) \ $(top_builddir)/gthread/libgthread-2.0.la +simple_async_result_SOURCES = simple-async-result.c +simple_async_result_LDADD = $(progs_ldadd) DISTCLEAN_FILES = applications/mimeinfo.cache diff --git a/gio/tests/simple-async-result.c b/gio/tests/simple-async-result.c new file mode 100644 index 0000000..2c4f62b --- /dev/null +++ b/gio/tests/simple-async-result.c @@ -0,0 +1,107 @@ +/* + * Copyright © 2009 Ryan Lortie + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2 of the licence or (at + * your option) any later version. + * + * See the included COPYING file for more information. + */ + +#include +#include +#include +#include + +static GObject *got_source; +static GAsyncResult *got_result; +static gpointer got_user_data; + +static void +ensure_destroyed (gpointer obj) +{ + g_object_add_weak_pointer (obj, &obj); + g_object_unref (obj); + g_assert (obj == NULL); +} + +static void +reset (void) +{ + got_source = NULL; + + if (got_result) + ensure_destroyed (got_result); + + got_result = NULL; + got_user_data = NULL; +} + +static void +check (gpointer a, gpointer b, gpointer c) +{ + g_assert (a == got_source); + g_assert (b == got_result); + g_assert (c == got_user_data); +} + +static void +callback_func (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + got_source = source; + got_result = g_object_ref (result); + got_user_data = user_data; +} + +static void +test_simple_async (void) +{ + GSimpleAsyncResult *result; + GObject *a, *b, *c; + + a = g_object_new (G_TYPE_OBJECT, NULL); + b = g_object_new (G_TYPE_OBJECT, NULL); + c = g_object_new (G_TYPE_OBJECT, NULL); + + result = g_simple_async_result_new (a, callback_func, b, test_simple_async); + check (NULL, NULL, NULL); + g_simple_async_result_complete (result); + check (a, result, b); + g_object_unref (result); + + g_assert (g_simple_async_result_is_valid (got_result, a, test_simple_async)); + g_assert (!g_simple_async_result_is_valid (got_result, b, test_simple_async)); + g_assert (!g_simple_async_result_is_valid (got_result, c, test_simple_async)); + g_assert (!g_simple_async_result_is_valid (got_result, b, callback_func)); + g_assert (!g_simple_async_result_is_valid ((gpointer) a, NULL, NULL)); + reset (); + reset (); + reset (); + + result = g_simple_async_result_new (a, callback_func, b, test_simple_async); + check (NULL, NULL, NULL); + g_simple_async_result_complete_in_idle (result); + g_object_unref (result); + check (NULL, NULL, NULL); + g_main_context_iteration (NULL, FALSE); + check (a, result, b); + reset (); + + ensure_destroyed (a); + ensure_destroyed (b); + ensure_destroyed (c); +} + +int +main (int argc, char **argv) +{ + g_type_init (); + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/gio/simple-async-result/test", test_simple_async); + + return g_test_run(); +} -- 2.7.4