[glib] Test enum mapping



commit 81a0a268133ba5cb58a4e7893d4eaf039bc21b4c
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Jul 5 12:08:17 2010 -0400

    Test enum mapping

 gio/tests/gsettings.c              |   47 +++++++++++++++++++++++++++++++++++-
 gio/tests/org.gtk.test.gschema.xml |    3 ++
 2 files changed, 49 insertions(+), 1 deletions(-)
---
diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c
index 5e611a9..2984ae1 100644
--- a/gio/tests/gsettings.c
+++ b/gio/tests/gsettings.c
@@ -649,7 +649,8 @@ enum
   PROP_DOUBLE,
   PROP_STRING,
   PROP_NO_READ,
-  PROP_NO_WRITE
+  PROP_NO_WRITE,
+  PROP_ENUM
 };
 
 typedef struct
@@ -664,6 +665,7 @@ typedef struct
   gchar *string_prop;
   gchar *no_read_prop;
   gchar *no_write_prop;
+  guint enum_prop;
 } TestObject;
 
 typedef struct
@@ -717,6 +719,9 @@ test_object_get_property (GObject    *object,
     case PROP_NO_WRITE:
       g_value_set_string (value, test_object->no_write_prop);
       break;
+    case PROP_ENUM:
+      g_value_set_enum (value, test_object->enum_prop);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -756,12 +761,37 @@ test_object_set_property (GObject      *object,
       g_free (test_object->no_read_prop);
       test_object->no_read_prop = g_value_dup_string (value);
       break;
+    case PROP_ENUM:
+      test_object->enum_prop = g_value_get_enum (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
     }
 }
 
+static GType
+test_enum_get_type (void)
+{
+  static volatile gsize define_type_id = 0;
+
+  if (g_once_init_enter (&define_type_id))
+    {
+      static const GEnumValue values[] = {
+        { TEST_ENUM_FOO, "TEST_ENUM_FOO", "foo" },
+        { TEST_ENUM_BAR, "TEST_ENUM_BAR", "bar" },
+        { TEST_ENUM_BAZ, "TEST_ENUM_BAZ", "baz" },
+        { TEST_ENUM_QUUX, "TEST_ENUM_QUUX", "quux" },
+        { 0, NULL, NULL }
+      };
+
+      GType type_id = g_enum_register_static ("TestEnum", values);
+      g_once_init_leave (&define_type_id, type_id);
+    }
+
+  return define_type_id;
+}
+
 static void
 test_object_class_init (TestObjectClass *class)
 {
@@ -787,6 +817,8 @@ test_object_class_init (TestObjectClass *class)
     g_param_spec_string ("no-write", "", "", NULL, G_PARAM_READABLE));
   g_object_class_install_property (gobject_class, PROP_NO_READ,
     g_param_spec_string ("no-read", "", "", NULL, G_PARAM_WRITABLE));
+  g_object_class_install_property (gobject_class, PROP_ENUM,
+    g_param_spec_enum ("enum", "", "", test_enum_get_type (), TEST_ENUM_FOO, G_PARAM_READWRITE));
 }
 
 static TestObject *
@@ -888,6 +920,19 @@ test_simple_binding (void)
   g_object_get (obj, "double", &d, NULL);
   g_assert_cmpfloat (d, ==, -G_MINDOUBLE);
 
+  g_settings_bind (settings, "enum", obj, "enum", G_SETTINGS_BIND_DEFAULT);
+  g_object_set (obj, "enum", TEST_ENUM_BAZ, NULL);
+  g_assert_cmpstr (g_settings_get_string (settings, "enum"), ==, "baz");
+  g_assert_cmpint (g_settings_get_enum (settings, "enum"), ==, TEST_ENUM_BAZ);
+
+  g_settings_set_enum (settings, "enum", TEST_ENUM_QUUX);
+  g_object_get (obj, "enum", &i, NULL);
+  g_assert_cmpint (i, ==, TEST_ENUM_QUUX);
+
+  g_settings_set_string (settings, "enum", "baz");
+  g_object_get (obj, "enum", &i, NULL);
+  g_assert_cmpint (i, ==, TEST_ENUM_BAZ);
+
   g_object_unref (obj);
   g_object_unref (settings);
 }
diff --git a/gio/tests/org.gtk.test.gschema.xml b/gio/tests/org.gtk.test.gschema.xml
index b2dff0b..ba29693 100644
--- a/gio/tests/org.gtk.test.gschema.xml
+++ b/gio/tests/org.gtk.test.gschema.xml
@@ -93,6 +93,9 @@
     <key name="chararray" type="ay">
       <default>[48, 49]</default>
     </key>
+    <key name="enum" enum="org.gtk.test.TestEnum">
+      <default>'foo'</default>
+    </key>
   </schema>
 
   <schema id='org.gtk.test.enums' path='/tests/enums/'>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]