diff options
| author | Gord Allott <gord.allott@canonical.com> | 2012-03-16 11:45:36 +0000 |
|---|---|---|
| committer | Gord Allott <gord.allott@canonical.com> | 2012-03-16 11:45:36 +0000 |
| commit | e180e267e0f50fd685246d4b0b52cdf84058edf0 (patch) | |
| tree | 2754df95a618af6508e98f5b54850abad458287a /tests | |
| parent | 717cf8321e7f9233b79c0c89bd43f06eb419f521 (diff) | |
emit signal (1 line) and tests (about a billion lines)
(bzr r2120.5.1)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_hud.cpp | 40 | ||||
| -rw-r--r-- | tests/test_service_hud.c | 96 |
2 files changed, 133 insertions, 3 deletions
diff --git a/tests/test_hud.cpp b/tests/test_hud.cpp index 4a0f49dc3..7e2365447 100644 --- a/tests/test_hud.cpp +++ b/tests/test_hud.cpp @@ -2,6 +2,7 @@ #include <glib-object.h> #include <UnityCore/GLibWrapper.h> #include <UnityCore/Hud.h> +#include <sigc++/connection.h> using namespace std; @@ -22,6 +23,7 @@ public: unity::hud::Hud::Queries queries; bool query_return_result; bool connected_result; + int number_signals_found; }; TEST_F(TestHud, TestConstruction) @@ -85,7 +87,7 @@ TEST_F(TestHud, TestQueryReturn) return FALSE; }; - hud->queries_updated.connect(query_connection); + sigc::connection connection = hud->queries_updated.connect(query_connection); guint source_id = g_timeout_add(10000, timeout_bailout, this); @@ -98,7 +100,43 @@ TEST_F(TestHud, TestQueryReturn) // finally close the connection - Nothing to check for here hud->CloseQuery(); + connection.disconnect(); } +TEST_F(TestHud, TestSigEmission) +{ + // checks that the signal emission from Hud is working correctly + // the service is setup to emit the same signal every 1000ms + // using the same query key as its StarQuery method + // so calling StartQuery and listening we expect > 1 + // signal emission + number_signals_found = 0; + + // make sure we receive the queries + auto query_connection = [this](unity::hud::Hud::Queries queries_) + { + number_signals_found += 1; + }; + + auto timeout_bailout = [] (gpointer data) -> gboolean + { + g_main_loop_quit(loop_); + return FALSE; + }; + + sigc::connection connection = hud->queries_updated.connect(query_connection); + + hud->RequestQuery("Request30Queries"); + guint source_id = g_timeout_add(10000, timeout_bailout, this); + + g_main_loop_run(loop_); + EXPECT_GT(number_signals_found, 1); + g_source_remove(source_id); + + // finally close the connection - Nothing to check for here + hud->CloseQuery(); + connection.disconnect(); + +} } diff --git a/tests/test_service_hud.c b/tests/test_service_hud.c index bfdf47ce1..63a718357 100644 --- a/tests/test_service_hud.c +++ b/tests/test_service_hud.c @@ -51,6 +51,10 @@ static void bus_method (GDBusConnection *connection, GDBusMethodInvocation *invocation, gpointer user_data); +static gboolean do_emit_signal(gpointer data); +static void emit_signal(GDBusConnection *connection); + + G_DEFINE_TYPE(ServiceHud, service_hud, G_TYPE_OBJECT); static GDBusNodeInfo * node_info = NULL; static GDBusInterfaceInfo * iface_info = NULL; @@ -60,12 +64,12 @@ static GDBusInterfaceVTable bus_vtable = { set_property: NULL, }; - struct _ServiceHudPrivate { GDBusConnection * bus; GCancellable * bus_lookup; guint bus_registration; + guint sig_emission_handle; }; static void @@ -88,6 +92,11 @@ service_hud_dispose(GObject* object) self->priv->bus = NULL; } + if (self->priv->sig_emission_handle) { + g_source_remove(self->priv->sig_emission_handle); + self->priv->sig_emission_handle = 0; + } + } static void @@ -129,7 +138,6 @@ service_hud_init(ServiceHud* self) self->priv->bus_lookup = g_cancellable_new(); g_bus_get(G_BUS_TYPE_SESSION, self->priv->bus_lookup, bus_got_cb, self); - } ServiceHud* @@ -168,10 +176,94 @@ bus_got_cb (GObject *object, GAsyncResult * res, gpointer user_data) g_error_free(error); return; } + else + { + self->priv->sig_emission_handle = g_timeout_add(1000, do_emit_signal, bus); + } return; } +static gboolean +do_emit_signal(gpointer data) +{ + emit_signal(G_DBUS_CONNECTION(data)); + return TRUE; +} + +static void +emit_signal(GDBusConnection *connection) +{ + GVariant *query; + int num_entries = 5; + + /* Build into into a variant */ + GVariantBuilder ret_builder; + g_variant_builder_init(&ret_builder, G_VARIANT_TYPE_TUPLE); + g_variant_builder_add_value(&ret_builder, g_variant_new_string("target")); + GVariantBuilder builder; + + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); + + int i = 0; + for (i = 0; i < num_entries; i++) + { + gchar* target = g_strdup_printf("test-%i", i); + gchar* icon = g_strdup_printf("icon-%i", i); + gchar* future_icon = g_strdup(icon); + gchar* completion_text = g_strdup_printf("completion-%i", i); + gchar* accelerator = g_strdup_printf("<alt>+whatever"); + + GVariantBuilder tuple; + g_variant_builder_init(&tuple, G_VARIANT_TYPE_TUPLE); + g_variant_builder_add_value(&tuple, g_variant_new_string(target)); + g_variant_builder_add_value(&tuple, g_variant_new_string(icon)); + g_variant_builder_add_value(&tuple, g_variant_new_string(future_icon)); + g_variant_builder_add_value(&tuple, g_variant_new_string(completion_text)); + g_variant_builder_add_value(&tuple, g_variant_new_string(accelerator)); + // build a fake key + GVariant* key; + { + GVariantBuilder keybuilder; + g_variant_builder_init(&keybuilder, G_VARIANT_TYPE_TUPLE); + g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string")); + g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string")); + g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string")); + g_variant_builder_add_value(&keybuilder, g_variant_new_int32(1986)); + + key = g_variant_new_variant(g_variant_builder_end(&keybuilder)); + } + g_variant_ref_sink(key); + g_variant_builder_add_value(&tuple, key); + g_variant_builder_add_value(&builder, g_variant_builder_end(&tuple)); + g_free(target); + g_free(icon); + g_free(future_icon); + g_free(completion_text); + } + g_variant_builder_add_value(&ret_builder, g_variant_builder_end(&builder)); + + GVariant* query_key; + { + GVariantBuilder keybuilder; + g_variant_builder_init(&keybuilder, G_VARIANT_TYPE_TUPLE); + g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string")); + g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string")); + g_variant_builder_add_value(&keybuilder, g_variant_new_string("dummy string")); + g_variant_builder_add_value(&keybuilder, g_variant_new_int32(1986)); + + query_key = g_variant_new_variant(g_variant_builder_end(&keybuilder)); + } + g_variant_ref_sink(query_key); + g_variant_builder_add_value(&ret_builder, query_key); + + query = g_variant_builder_end(&ret_builder); + + g_dbus_connection_emit_signal (connection, NULL, "/com/canonical/hud", + "com.canonical.hud", "UpdatedQuery", + query, NULL); +} + static void bus_method (GDBusConnection *connection, const gchar *sender, const gchar *object_path, const gchar *interface_name, const gchar *method_name, GVariant *parameters, GDBusMethodInvocation *invocation, gpointer user_data) { |
