/* Regression test for https://bugs.freedesktop.org/show_bug.cgi?id=15306 * * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include #include #include #include #include "tests/lib/myassert.h" #include "tests/lib/simple-conn.h" #include "tests/lib/util.h" static GType bug15306_connection_get_type (void); typedef TpTestsSimpleConnection Bug15306Connection; typedef TpTestsSimpleConnectionClass Bug15306ConnectionClass; static void bug15306_conn_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (Bug15306Connection, bug15306_connection, TP_TESTS_TYPE_SIMPLE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION, bug15306_conn_iface_init)) static void bug15306_connection_init (Bug15306Connection *self) { } static void bug15306_connection_class_init (Bug15306ConnectionClass *klass) { } static void bug15306_get_interfaces (TpSvcConnection *iface, DBusGMethodInvocation *context) { GError e = { TP_ERRORS, TP_ERROR_NOT_AVAILABLE, "testing fd.o #15306" }; dbus_g_method_return_error (context, &e); } static void bug15306_conn_iface_init (gpointer g_iface, gpointer iface_data) { TpSvcConnectionClass *klass = g_iface; #define IMPLEMENT(x) tp_svc_connection_implement_##x (klass, \ bug15306_##x) IMPLEMENT (get_interfaces); #undef IMPLEMENT } static GMainLoop *mainloop; static void on_status_changed (TpConnection *connection, guint status, guint reason, gpointer user_data, GObject *weak_object) { MYASSERT (status == TP_CONNECTION_STATUS_DISCONNECTED, "%u", status); } static void on_shutdown_finished (TpBaseConnection *base_conn, gpointer user_data) { g_main_loop_quit (mainloop); } int main (int argc, char **argv) { TpTestsSimpleConnection *service_conn; TpBaseConnection *service_conn_as_base; TpDBusDaemon *dbus; TpConnection *conn; GError *error = NULL; gchar *name; gchar *conn_path; g_type_init (); tp_debug_set_flags ("all"); mainloop = g_main_loop_new (NULL, FALSE); dbus = tp_tests_dbus_daemon_dup_or_die (); service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class ( bug15306_connection_get_type (), "account", "me@example.com", "protocol", "simple", NULL)); service_conn_as_base = TP_BASE_CONNECTION (service_conn); MYASSERT (service_conn != NULL, ""); MYASSERT (service_conn_as_base != NULL, ""); g_signal_connect (service_conn, "shutdown-finished", G_CALLBACK (on_shutdown_finished), NULL); MYASSERT (tp_base_connection_register (service_conn_as_base, "simple", &name, &conn_path, &error), ""); g_assert_no_error (error); conn = tp_connection_new (dbus, name, conn_path, &error); MYASSERT (conn != NULL, ""); g_assert_no_error (error); MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL), ""); g_assert_no_error (error); /* disconnect the service_conn */ MYASSERT (tp_cli_connection_connect_to_status_changed (conn, on_status_changed, NULL, NULL, NULL, NULL), ""); tp_tests_simple_connection_inject_disconnect (service_conn); g_main_loop_run (mainloop); g_object_unref (conn); service_conn_as_base = NULL; g_object_unref (service_conn); g_object_unref (dbus); g_main_loop_unref (mainloop); g_free (name); g_free (conn_path); return 0; }