]> git.street.me.uk Git - andy/viking.git/commitdiff
Store test example for GValue
authorGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Sat, 18 Jul 2009 15:08:42 +0000 (17:08 +0200)
committerGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Sat, 18 Jul 2009 15:08:42 +0000 (17:08 +0200)
test/Makefile.am
test/test_gvalues.c [new file with mode: 0644]

index 07c6e341b3552b5f0db6bf2192e58c655084919b..a293b427a510c3e34ca0671d4a9b938fd4326ab9 100644 (file)
@@ -6,7 +6,7 @@ endif
 
 TESTS = check_degrees_conversions.sh
 
-check_PROGRAMS = degrees_converter gpx2gpx gobject_builder
+check_PROGRAMS = degrees_converter gpx2gpx gobject_builder test_gvalues
 
 check_SCRIPTS = check_degrees_conversions.sh
 
@@ -26,3 +26,7 @@ gobject_builder_SOURCES = gobject_builder.c
 gobject_builder_LDADD = \
   $(top_builddir)/src/libviking.a \
   $(LDADD)
+
+test_gvalues_SOURCES = test_gvalues.c
+test_gvalues_LDADD = \
+  $(LDADD)
diff --git a/test/test_gvalues.c b/test/test_gvalues.c
new file mode 100644 (file)
index 0000000..30f2007
--- /dev/null
@@ -0,0 +1,73 @@
+#include <glib-object.h>
+
+static void
+string2int (const GValue *src_value,
+            GValue       *dest_value)
+{
+  int val;
+  
+g_debug("%s: %s", __FUNCTION__, g_value_get_string (src_value));
+  sscanf(g_value_get_string (src_value), "%d", &val);
+  g_value_set_int (dest_value, val);
+}
+
+static void
+int2string (const GValue *src_value,
+            GValue       *dest_value)
+{
+  if (g_value_get_int (src_value) == 42)
+    g_value_set_static_string (dest_value, "An important number");
+  else
+    g_value_set_static_string (dest_value, "What's that?");
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  /* GValues must start zero-filled */
+  GValue a = {0};
+  GValue b = {0};
+  const gchar *message;
+
+  g_type_init ();
+
+  /* The GValue starts empty */
+  g_assert (!G_VALUE_HOLDS_STRING (&a));
+
+  /* Put a string in it */
+  g_value_init (&a, G_TYPE_STRING);
+  g_assert (G_VALUE_HOLDS_STRING (&a));
+  g_value_set_static_string (&a, "Hello, world!");
+  g_printf ("%s\n", g_value_get_string (&a));
+
+  /* Reset it to its pristine state */
+  g_value_unset (&a);
+
+  /* It can then be reused for another type */
+  g_value_init (&a, G_TYPE_INT);
+  g_value_set_int (&a, 42);
+
+  /* Attempt to transform it into a GValue of type STRING */
+  g_value_init (&b, G_TYPE_STRING);
+
+  /* An INT is transformable to a STRING */
+  g_assert (g_value_type_transformable (G_TYPE_INT, G_TYPE_STRING));
+
+  g_value_transform (&a, &b);
+  g_printf ("%s\n", g_value_get_string (&b));
+
+  /* An INT is transformable to a STRING */
+  g_value_register_transform_func (G_TYPE_STRING, G_TYPE_INT, string2int);
+  g_assert (g_value_type_transformable (G_TYPE_STRING, G_TYPE_INT));
+
+  g_value_transform (&b, &a);
+  g_printf ("%d\n", g_value_get_int (&a));
+
+  /* Attempt to transform it again using a custom transform function */
+  g_value_register_transform_func (G_TYPE_INT, G_TYPE_STRING, int2string);
+  g_value_transform (&a, &b);
+  g_printf ("%s\n", g_value_get_string (&b));
+  return 0;
+}
+