* dbus/dbus-auth.c, dbus/dbus-connection.c, dbus/dbus-keyring.c,
[platform/upstream/dbus.git] / test / glib / test-dbus-glib.c
index 786235d..03a1a73 100644 (file)
@@ -216,13 +216,11 @@ increment_received_cb (DBusGProxy *proxy,
                       gpointer data)
 {
   GError *error;
-  char *echo_data;
   guint val;
 
   g_assert (!strcmp (data, "moo"));
 
   error = NULL;
-  echo_data = NULL;
   if (!dbus_g_proxy_end_call (proxy, call, &error,
                              G_TYPE_UINT, &val,
                              G_TYPE_INVALID))
@@ -885,6 +883,51 @@ main (int argc, char **argv)
   run_mainloop ();
 
   {
+    GValueArray *vals;
+    GValueArray *vals_ret;
+    GValue *val;
+
+    vals = g_value_array_new (3);
+
+    g_value_array_append (vals, NULL);
+    g_value_init (g_value_array_get_nth (vals, vals->n_values - 1), G_TYPE_STRING);
+    g_value_set_string (g_value_array_get_nth (vals, 0), "foo");
+
+    g_value_array_append (vals, NULL);
+    g_value_init (g_value_array_get_nth (vals, vals->n_values - 1), G_TYPE_UINT);
+    g_value_set_uint (g_value_array_get_nth (vals, vals->n_values - 1), 42);
+
+    g_value_array_append (vals, NULL);
+    g_value_init (g_value_array_get_nth (vals, vals->n_values - 1), G_TYPE_VALUE);
+    val = g_new0 (GValue, 1);
+    g_value_init (val, G_TYPE_UCHAR);
+    g_value_set_uchar (val, '!');
+    g_value_set_boxed (g_value_array_get_nth (vals, vals->n_values - 1), val);
+
+    vals_ret = NULL;
+    g_print ("Calling SendCar\n");
+    if (!dbus_g_proxy_call (proxy, "SendCar", &error,
+                           G_TYPE_VALUE_ARRAY, vals,
+                           G_TYPE_INVALID,
+                           G_TYPE_VALUE_ARRAY, &vals_ret,
+                           G_TYPE_INVALID))
+      lose_gerror ("Failed to complete SendCar call", error);
+
+    g_assert (vals_ret != NULL);
+    g_assert (vals_ret->n_values == 2);
+
+    g_assert (G_VALUE_HOLDS_UINT (g_value_array_get_nth (vals_ret, 0)));
+    g_assert (g_value_get_uint (g_value_array_get_nth (vals_ret, 0)) == 43);
+    
+    g_assert (G_VALUE_TYPE (g_value_array_get_nth (vals_ret, 1)) == DBUS_TYPE_G_OBJECT_PATH);
+    g_assert (!strcmp ("/org/freedesktop/DBus/Tests/MyTestObject2",
+                      g_value_get_boxed (g_value_array_get_nth (vals_ret, 1))));
+
+    g_value_array_free (vals);
+    g_value_array_free (vals_ret);
+  }
+
+  {
     GValue *val;
     GHashTable *table;
     GHashTable *ret_table;
@@ -929,6 +972,57 @@ main (int argc, char **argv)
   }
 
   {
+    GPtrArray *in_array;
+    GPtrArray *out_array;
+    char **strs;
+    GArray *uints;
+
+    in_array = g_ptr_array_new ();
+
+    strs = g_new0 (char *, 3);
+    strs[0] = "foo";
+    strs[1] = "bar";
+    strs[2] = NULL;
+    g_ptr_array_add (in_array, strs);
+
+    strs = g_new0 (char *, 4);
+    strs[0] = "baz";
+    strs[1] = "whee";
+    strs[2] = "moo";
+    strs[3] = NULL;
+    g_ptr_array_add (in_array, strs);
+
+    out_array = NULL;
+    g_print ("Calling RecArrays\n");
+    if (!dbus_g_proxy_call (proxy, "RecArrays", &error,
+                           dbus_g_type_get_collection ("GPtrArray", G_TYPE_STRV), in_array,
+                           G_TYPE_INVALID,
+                           dbus_g_type_get_collection ("GPtrArray",
+                                                       dbus_g_type_get_collection ("GPtrArray",
+                                                                                   G_TYPE_UINT)), &out_array, 
+                           G_TYPE_INVALID))
+      lose_gerror ("Failed to complete RecArrays call", error);
+    g_free (g_ptr_array_index (in_array, 0));
+    g_free (g_ptr_array_index (in_array, 1));
+
+    g_assert (out_array);
+    g_assert (out_array->len == 2);
+    uints = g_ptr_array_index (out_array, 0);
+    g_assert (uints);
+    g_assert (uints->len == 3);
+    g_assert (g_array_index (uints, guint, 0) == 10);
+    g_assert (g_array_index (uints, guint, 1) == 42);
+    g_assert (g_array_index (uints, guint, 2) == 27);
+    g_array_free (uints, TRUE);
+    uints = g_ptr_array_index (out_array, 1);
+    g_assert (uints);
+    g_assert (uints->len == 1);
+    g_assert (g_array_index (uints, guint, 0) == 30);
+    g_array_free (uints, TRUE);
+    g_ptr_array_free (out_array, TRUE);
+  }
+
+  {
     guint val;
     char *ret_path;
     DBusGProxy *ret_proxy;
@@ -1042,7 +1136,34 @@ main (int argc, char **argv)
       g_free (g_ptr_array_index (objs, i));
     g_ptr_array_free (objs, TRUE);
   }
+  
+  {
+    GValue *variant;
+    GArray *array;
+    gint i;
+
+    g_print ("Calling ProcessVariantOfArrayOfInts123\n");
+
+    array = g_array_sized_new (FALSE, FALSE, sizeof(gint), 3);
+    i = 1;
+    g_array_append_val (array, i);
+    i++;
+    g_array_append_val (array, i);
+    i++;
+    g_array_append_val (array, i);
 
+    variant = g_new0 (GValue, 1);
+    g_value_init (variant, dbus_g_type_get_collection ("GArray", G_TYPE_INT));
+    g_value_set_boxed_take_ownership (variant, array);
+
+    if (!dbus_g_proxy_call (proxy, "ProcessVariantOfArrayOfInts123", &error,
+                            G_TYPE_VALUE, variant,
+                            G_TYPE_INVALID,
+                           G_TYPE_INVALID))
+      lose_gerror ("Failed to send a vairant of array of ints 1, 2 and 3!", error);
+
+    g_value_unset (variant);
+  }
   /* Signal handling tests */
   
   g_print ("Testing signal handling\n");