NULL,
};
+/* Foo2 is just Foo without the properties */
+static const GDBusInterfaceInfo foo2_interface_info =
+{
+ -1,
+ "org.example.Foo2",
+ (GDBusMethodInfo **) &foo_method_info_pointers,
+ (GDBusSignalInfo **) &foo_signal_info_pointers,
+};
+
static void
foo_method_call (GDBusConnection *connection,
const gchar *sender,
num_successful_registrations++;
/* now register a dynamic subtree, spawning objects as they are called */
- dyna_data = g_ptr_array_new ();
+ dyna_data = g_ptr_array_new_with_free_func (g_free);
dyna_subtree_registration_id = g_dbus_connection_register_subtree (c,
"/foo/dyna",
&dynamic_subtree_vtable,
/* Install three nodes in the dynamic subtree via the dyna_data backdoor and
* assert that they show up correctly in the introspection data */
- g_ptr_array_add (dyna_data, "lol");
- g_ptr_array_add (dyna_data, "cat");
- g_ptr_array_add (dyna_data, "cheezburger");
+ g_ptr_array_add (dyna_data, g_strdup ("lol"));
+ g_ptr_array_add (dyna_data, g_strdup ("cat"));
+ g_ptr_array_add (dyna_data, g_strdup ("cheezburger"));
nodes = get_nodes_at (c, "/foo/dyna");
g_assert (nodes != NULL);
g_assert_cmpint (g_strv_length (nodes), ==, 3);
property = g_dbus_method_invocation_get_property_info (invocation);
+ /* We should never be seeing any property calls on the com.example.Bar
+ * interface because it doesn't export any properties.
+ *
+ * In each case below make sure the interface is org.example.Foo.
+ */
+
/* Do a whole lot of asserts to make sure that invalid calls are still
* getting properly rejected by GDBusConnection and that our
* environment is as we expect it to be.
test_async_properties (void)
{
GError *error = NULL;
- guint registration_id;
+ guint registration_id, registration_id2;
static const GDBusInterfaceVTable vtable = {
test_async_method_call, NULL, NULL
};
&vtable, NULL, NULL, &error);
g_assert_no_error (error);
g_assert (registration_id);
+ registration_id2 = g_dbus_connection_register_object (c,
+ "/foo",
+ (GDBusInterfaceInfo *) &foo2_interface_info,
+ &vtable, NULL, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (registration_id);
test_async_case (c, NULL, "random", "()");
test_async_case (c, NULL, "GetAll", "(si)", "wrong signature", 5);
test_async_case (c, NULL, "GetAll", "(s)", "org.example.WrongInterface");
+ /* Make sure that we get no unexpected async property calls for com.example.Foo2 */
+ test_async_case (c, NULL, "Get", "(ss)", "org.example.Foo2", "zzz");
+ test_async_case (c, NULL, "Set", "(ssv)", "org.example.Foo2", "zzz", g_variant_new_string (""));
+ test_async_case (c, "(@a{sv} {},)", "GetAll", "(s)", "org.example.Foo2");
+
/* Now do the proper things */
test_async_case (c, "(<'PropertyUno'>,)", "Get", "(ss)", "org.example.Foo", "PropertyUno");
test_async_case (c, "(<'NotWritable'>,)", "Get", "(ss)", "org.example.Foo", "NotWritable");
g_main_context_iteration (NULL, TRUE);
g_dbus_connection_unregister_object (c, registration_id);
+ g_dbus_connection_unregister_object (c, registration_id2);
g_object_unref (c);
}
/* all the tests rely on a shared main loop */
loop = g_main_loop_new (NULL, FALSE);
- session_bus_up ();
-
g_test_add_func ("/gdbus/object-registration", test_object_registration);
g_test_add_func ("/gdbus/registered-interfaces", test_registered_interfaces);
g_test_add_func ("/gdbus/async-properties", test_async_properties);
/* TODO: check that we spit out correct introspection data */
/* TODO: check that registering a whole subtree works */
- ret = g_test_run();
+ ret = session_bus_run ();
- /* tear down bus */
- session_bus_down ();
+ g_main_loop_unref (loop);
return ret;
}