[Xfce4-commits] <xfconf:master> Add test framework for the bindings.

Nick Schermer noreply at xfce.org
Sat Dec 26 12:44:02 CET 2009


Updating branch refs/heads/master
         to 8138f9038f970eb894ff90dde9d0c5b75901e1cf (commit)
       from f5cbc11c25731eb9bdc4e15fa26f5440a53745df (commit)

commit 8138f9038f970eb894ff90dde9d0c5b75901e1cf
Author: Nick Schermer <nick at xfce.org>
Date:   Sun Sep 13 14:28:46 2009 +0200

    Add test framework for the bindings.
    
    These test don't really check if the value set is correct,
    but more if the unbind functions work properly, since this
    is not something we test often.

 configure.ac.in                           |    1 +
 tests/Makefile.am                         |    3 +-
 tests/object-bindings/Makefile.am         |    6 +
 tests/object-bindings/t-object-bindings.c |  207 +++++++++++++++++++++++++++++
 4 files changed, 216 insertions(+), 1 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index d5de3b1..bcbfd2d 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -201,6 +201,7 @@ tests/set-properties/Makefile
 tests/has-properties/Makefile
 tests/get-properties/Makefile
 tests/reset-properties/Makefile
+tests/object-bindings/Makefile
 tests/property-changed-signal/Makefile
 xfconf/Makefile
 xfconf/libxfconf-0.pc
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4d031ba..57165d9 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -4,7 +4,8 @@ SUBDIRS = \
 	has-properties \
 	get-properties \
 	reset-properties \
-	property-changed-signal
+	property-changed-signal \
+	object-bindings
 #	list-channels
 
 clean-local:
diff --git a/tests/object-bindings/Makefile.am b/tests/object-bindings/Makefile.am
new file mode 100644
index 0000000..44321a6
--- /dev/null
+++ b/tests/object-bindings/Makefile.am
@@ -0,0 +1,6 @@
+check_PROGRAMS = \
+	t-object-bindings
+
+t_reset_string_SOURCES = t-object-bindings.c
+
+include $(top_srcdir)/tests/Makefile.inc
diff --git a/tests/object-bindings/t-object-bindings.c b/tests/object-bindings/t-object-bindings.c
new file mode 100644
index 0000000..a00395e
--- /dev/null
+++ b/tests/object-bindings/t-object-bindings.c
@@ -0,0 +1,207 @@
+/*
+ *  xfconf
+ *
+ *  Copyright (c) 2009 Nick Schermer <nick at xfce.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; version 2 of the License ONLY.
+ *
+ *  This program 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 Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "tests-common.h"
+
+enum
+{
+    PROP_0,
+    PROP_TEST
+};
+
+typedef struct _TestObject TestObject;
+typedef struct _TestObjectClass TestObjectClass;
+
+struct _TestObjectClass
+{
+    GObjectClass __parent__;
+};
+
+struct _TestObject
+{
+    GObject __parent__;
+
+    gboolean test;
+};
+
+GType test_object_get_type(void) G_GNUC_CONST;
+static void test_object_get_property(GObject *object,
+                                     guint prop_id,
+                                     GValue *value,
+                                     GParamSpec *pspec);
+static void test_object_set_property(GObject *object,
+                                     guint prop_id,
+                                     const GValue *value,
+                                     GParamSpec *pspec);
+
+G_DEFINE_TYPE(TestObject, test_object, G_TYPE_OBJECT)
+
+static gboolean was_set = FALSE;
+
+static void
+test_object_class_init(TestObjectClass *klass)
+{
+    GObjectClass *gobject_class;
+
+    gobject_class = G_OBJECT_CLASS(klass);
+    gobject_class->get_property = test_object_get_property;
+    gobject_class->set_property = test_object_set_property;
+
+    g_object_class_install_property(gobject_class,
+                                    PROP_TEST,
+                                    g_param_spec_boolean("test",
+                                                         NULL, NULL,
+                                                         FALSE,
+                                                         G_PARAM_READWRITE));
+}
+
+static void
+test_object_init(TestObject *object)
+{
+}
+
+static void
+test_object_get_property(GObject *object,
+                         guint prop_id,
+                         GValue *value,
+                         GParamSpec *pspec)
+{
+    TestObject *test = (TestObject *)object;
+
+    switch(prop_id) {
+        case PROP_TEST:
+            g_value_set_boolean(value, test->test);
+            break;
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+            break;
+    }
+}
+
+static void
+test_object_set_property(GObject *object,
+                         guint prop_id,
+                         const GValue *value,
+                         GParamSpec *pspec)
+{
+    TestObject *test = (TestObject *)object;
+
+    switch(prop_id) {
+        case PROP_TEST:
+            test->test = g_value_get_boolean(value);
+            was_set = TRUE;
+            break;
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+            break;
+    }
+}
+
+
+int
+main(int argc,
+     char **argv)
+{
+    XfconfChannel *channel;
+    GObject *object;
+    gulong id;
+    gboolean initial_property_was_set;
+    gboolean property_was_changed;
+
+    if(!xfconf_tests_start())
+        return 1;
+
+    channel = xfconf_channel_new(TEST_CHANNEL_NAME);
+
+    {
+        TEST_OPERATION(xfconf_channel_set_bool(channel, "/bindings/test", TRUE));
+
+        object = g_object_new(test_object_get_type(), NULL);
+
+        /* set if we set the property when connecting the binding */
+        was_set = FALSE;
+        id = xfconf_g_property_bind(channel, "/bindings/test",
+                                    G_TYPE_BOOLEAN, object, "test");
+        initial_property_was_set = was_set;
+        TEST_OPERATION(initial_property_was_set);
+
+        /* change channel property, see if binding works */
+        was_set = FALSE;
+        xfconf_channel_set_bool(channel, "/bindings/test", FALSE);
+        property_was_changed = was_set;
+        TEST_OPERATION(property_was_changed);
+
+        /* unbind, object should not get the new channel value */
+        xfconf_g_property_unbind(id);
+        was_set = FALSE;
+        xfconf_channel_set_bool(channel, "/bindings/test", TRUE);
+        property_was_changed = was_set;
+        TEST_OPERATION(!property_was_changed);
+
+        /* reconnect binding a couple of times */
+        xfconf_g_property_bind(channel, "/bindings/test1",
+                               G_TYPE_BOOLEAN, object, "test");
+        xfconf_g_property_bind(channel, "/bindings/test2",
+                               G_TYPE_BOOLEAN, object, "test");
+        xfconf_g_property_bind(channel, "/bindings/test3",
+                               G_TYPE_BOOLEAN, object, "test");
+
+        /* test unbind all on object */
+        xfconf_g_property_unbind_all(object);
+        was_set = FALSE;
+        xfconf_channel_set_bool(channel, "/bindings/test", FALSE);
+        property_was_changed = was_set;
+        TEST_OPERATION(!property_was_changed);
+
+        /* reconnect binding a couple of times */
+        xfconf_g_property_bind(channel, "/bindings/test1",
+                               G_TYPE_BOOLEAN, object, "test");
+        xfconf_g_property_bind(channel, "/bindings/test2",
+                               G_TYPE_BOOLEAN, object, "test");
+        xfconf_g_property_bind(channel, "/bindings/test3",
+                               G_TYPE_BOOLEAN, object, "test");
+
+        /* test unbind all on channel */
+        xfconf_g_property_unbind_all(channel);
+        was_set = FALSE;
+        xfconf_channel_set_bool(channel, "/bindings/test", TRUE);
+        property_was_changed = was_set;
+        TEST_OPERATION(!property_was_changed);
+
+        /* reconnect */
+        xfconf_g_property_bind(channel, "/bindings/test",
+                               G_TYPE_BOOLEAN, object, "test");
+
+        /* unbind property by name */
+        xfconf_g_property_unbind_by_property(channel, "/bindings/test",
+                                             object, "test");
+        was_set = FALSE;
+        xfconf_channel_set_bool(channel, "/bindings/test", FALSE);
+        property_was_changed = was_set;
+        TEST_OPERATION(!property_was_changed);
+
+        g_object_unref(G_OBJECT(object));
+    }
+
+    g_object_unref(G_OBJECT(channel));
+
+    xfconf_tests_end();
+
+    return 0;
+}



More information about the Xfce4-commits mailing list