cleanup
[platform/upstream/glib.git] / gio / tests / simple-async-result.c
index 2c4f62b..7506004 100644 (file)
@@ -56,31 +56,56 @@ callback_func (GObject      *source,
   got_user_data = user_data;
 }
 
-static void
-test_simple_async (void)
+static gboolean
+test_simple_async_idle (gpointer user_data)
 {
   GSimpleAsyncResult *result;
   GObject *a, *b, *c;
+  gboolean *ran = user_data;
 
   a = g_object_new (G_TYPE_OBJECT, NULL);
   b = g_object_new (G_TYPE_OBJECT, NULL);
   c = g_object_new (G_TYPE_OBJECT, NULL);
 
-  result = g_simple_async_result_new (a, callback_func, b, test_simple_async);
+  result = g_simple_async_result_new (a, callback_func, b, test_simple_async_idle);
+  g_assert (g_async_result_get_user_data (G_ASYNC_RESULT (result)) == b);
   check (NULL, NULL, NULL);
   g_simple_async_result_complete (result);
   check (a, result, b);
   g_object_unref (result);
 
-  g_assert (g_simple_async_result_is_valid (got_result, a, test_simple_async));
-  g_assert (!g_simple_async_result_is_valid (got_result, b, test_simple_async));
-  g_assert (!g_simple_async_result_is_valid (got_result, c, test_simple_async));
+  g_assert (g_simple_async_result_is_valid (got_result, a, test_simple_async_idle));
+  g_assert (!g_simple_async_result_is_valid (got_result, b, test_simple_async_idle));
+  g_assert (!g_simple_async_result_is_valid (got_result, c, test_simple_async_idle));
   g_assert (!g_simple_async_result_is_valid (got_result, b, callback_func));
   g_assert (!g_simple_async_result_is_valid ((gpointer) a, NULL, NULL));
   reset ();
   reset ();
   reset ();
 
+  ensure_destroyed (a);
+  ensure_destroyed (b);
+  ensure_destroyed (c);
+
+  *ran = TRUE;
+  return G_SOURCE_REMOVE;
+}
+
+static void
+test_simple_async (void)
+{
+  GSimpleAsyncResult *result;
+  GObject *a, *b;
+  gboolean ran_test_in_idle = FALSE;
+
+  g_idle_add (test_simple_async_idle, &ran_test_in_idle);
+  g_main_context_iteration (NULL, FALSE);
+
+  g_assert (ran_test_in_idle);
+
+  a = g_object_new (G_TYPE_OBJECT, NULL);
+  b = g_object_new (G_TYPE_OBJECT, NULL);
+
   result = g_simple_async_result_new (a, callback_func, b, test_simple_async);
   check (NULL, NULL, NULL);
   g_simple_async_result_complete_in_idle (result);
@@ -92,16 +117,79 @@ test_simple_async (void)
 
   ensure_destroyed (a);
   ensure_destroyed (b);
-  ensure_destroyed (c);
+}
+
+static void
+test_valid (void)
+{
+  GAsyncResult *result;
+  GObject *a, *b;
+
+  a = g_object_new (G_TYPE_OBJECT, NULL);
+  b = g_object_new (G_TYPE_OBJECT, NULL);
+
+  /* Without source or tag */
+  result = (GAsyncResult *) g_simple_async_result_new (NULL, NULL, NULL, NULL);
+  g_assert_true (g_simple_async_result_is_valid (result, NULL, NULL));
+  g_assert_true (g_simple_async_result_is_valid (result, NULL, test_valid));
+  g_assert_true (g_simple_async_result_is_valid (result, NULL, test_simple_async));
+  g_assert_false (g_simple_async_result_is_valid (result, a, NULL));
+  g_assert_false (g_simple_async_result_is_valid (result, a, test_valid));
+  g_assert_false (g_simple_async_result_is_valid (result, a, test_simple_async));
+  g_object_unref (result);
+
+  /* Without source, with tag */
+  result = (GAsyncResult *) g_simple_async_result_new (NULL, NULL, NULL, test_valid);
+  g_assert_true (g_simple_async_result_is_valid (result, NULL, NULL));
+  g_assert_true (g_simple_async_result_is_valid (result, NULL, test_valid));
+  g_assert_false (g_simple_async_result_is_valid (result, NULL, test_simple_async));
+  g_assert_false (g_simple_async_result_is_valid (result, a, NULL));
+  g_assert_false (g_simple_async_result_is_valid (result, a, test_valid));
+  g_assert_false (g_simple_async_result_is_valid (result, a, test_simple_async));
+  g_object_unref (result);
+
+  /* With source, without tag */
+  result = (GAsyncResult *) g_simple_async_result_new (a, NULL, NULL, NULL);
+  g_assert_true (g_simple_async_result_is_valid (result, a, NULL));
+  g_assert_true (g_simple_async_result_is_valid (result, a, test_valid));
+  g_assert_true (g_simple_async_result_is_valid (result, a, test_simple_async));
+  g_assert_false (g_simple_async_result_is_valid (result, NULL, NULL));
+  g_assert_false (g_simple_async_result_is_valid (result, NULL, test_valid));
+  g_assert_false (g_simple_async_result_is_valid (result, NULL, test_simple_async));
+  g_assert_false (g_simple_async_result_is_valid (result, b, NULL));
+  g_assert_false (g_simple_async_result_is_valid (result, b, test_valid));
+  g_assert_false (g_simple_async_result_is_valid (result, b, test_simple_async));
+  g_object_unref (result);
+
+  /* With source and tag */
+  result = (GAsyncResult *) g_simple_async_result_new (a, NULL, NULL, test_valid);
+  g_assert_true (g_simple_async_result_is_valid (result, a, test_valid));
+  g_assert_true (g_simple_async_result_is_valid (result, a, NULL));
+  g_assert_false (g_simple_async_result_is_valid (result, a, test_simple_async));
+  g_assert_false (g_simple_async_result_is_valid (result, NULL, NULL));
+  g_assert_false (g_simple_async_result_is_valid (result, NULL, test_valid));
+  g_assert_false (g_simple_async_result_is_valid (result, NULL, test_simple_async));
+  g_assert_false (g_simple_async_result_is_valid (result, b, NULL));
+  g_assert_false (g_simple_async_result_is_valid (result, b, test_valid));
+  g_assert_false (g_simple_async_result_is_valid (result, b, test_simple_async));
+  g_object_unref (result);
+
+  /* Non-GSimpleAsyncResult */
+  result = (GAsyncResult *) g_task_new (NULL, NULL, NULL, NULL);
+  g_assert_false (g_simple_async_result_is_valid (result, NULL, NULL));
+  g_object_unref (result);
+
+  g_object_unref (a);
+  g_object_unref (b);
 }
 
 int
 main (int argc, char **argv)
 {
-  g_type_init ();
   g_test_init (&argc, &argv, NULL);
 
   g_test_add_func ("/gio/simple-async-result/test", test_simple_async);
+  g_test_add_func ("/gio/simple-async-result/valid", test_valid);
 
   return g_test_run();
 }