From 8c180aa49ed89f82b36060df6fc7eed9c313bf08 Mon Sep 17 00:00:00 2001 From: William Jon McCann Date: Fri, 8 Oct 2010 21:13:12 -0400 Subject: [PATCH] Add a test for the persistence server capability --- tests/Makefile.am | 4 ++ tests/test-persistence.c | 95 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 tests/test-persistence.c diff --git a/tests/Makefile.am b/tests/Makefile.am index 087fb58..de86b90 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -8,6 +8,7 @@ noinst_PROGRAMS = \ test-basic \ test-error \ test-markup \ + test-persistence \ test-rtl \ test-size-changes \ test-urgency \ @@ -65,6 +66,9 @@ test_xy_stress_LDADD = $(common_ldflags) test_rtl_SOURCES = test-rtl.c test_rtl_LDADD = $(common_ldflags) +test_persistence_SOURCES = test-persistence.c +test_persistence_LDADD = $(common_ldflags) + test_gtk3_SOURCES = test-gtk3.c test_gtk3_LDADD = $(top_builddir)/libnotify/libnotify.la $(GTK3_LIBS) diff --git a/tests/test-persistence.c b/tests/test-persistence.c new file mode 100644 index 0000000..0da4860 --- /dev/null +++ b/tests/test-persistence.c @@ -0,0 +1,95 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * This library 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.1 of the License, or(at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include +#include + +static gboolean +server_has_persistence (void) +{ + gboolean has; + GList *caps; + GList *l; + + caps = notify_get_server_caps (); + if (caps == NULL) { + fprintf (stderr, "Failed to receive server caps.\n"); + return FALSE; + } + + l = g_list_find_custom (caps, "persistence", (GCompareFunc)strcmp); + has = l != NULL; + + g_list_foreach (caps, (GFunc) g_free, NULL); + g_list_free (caps); + + return has; +} + +static void +install_callback (NotifyNotification *n, + const char *action) +{ + g_assert (action != NULL); + g_assert (strcmp (action, "install") == 0); + + printf ("You clicked Install\n"); + + gtk_main_quit (); +} + +int +main (int argc, char *argv[]) +{ + NotifyNotification *n; + + gtk_init (&argc, &argv); + notify_init ("Persistence Test"); + + n = notify_notification_new ("Software Updates Available", + "Important updates for your apps are now available.", + "software-update-available", + NULL); + notify_notification_add_action (n, + "install", + "Install now", + (NotifyActionCallback) install_callback, + NULL, + NULL); + + notify_notification_set_timeout (n, 0); //don't timeout + notify_notification_show (n, NULL); + + if (!server_has_persistence ()) { + GtkStatusIcon *icon; + g_message ("Server does not support persistence; using a status icon"); + icon = gtk_status_icon_new_from_icon_name ("software-update-available"); + gtk_status_icon_set_tooltip_markup (icon, "Software Updates Available\nImportant updates for your apps are now available."); + gtk_status_icon_set_visible (icon, TRUE); + } else { + g_message ("Server supports persistence; status icon not needed"); + } + + gtk_main (); + + return 0; +}