summaryrefslogtreecommitdiff
path: root/tests
diff options
authorGord Allott <gord.allott@canonical.com>2012-03-16 11:45:36 +0000
committerGord Allott <gord.allott@canonical.com>2012-03-16 11:45:36 +0000
commite180e267e0f50fd685246d4b0b52cdf84058edf0 (patch)
tree2754df95a618af6508e98f5b54850abad458287a /tests
parent717cf8321e7f9233b79c0c89bd43f06eb419f521 (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.cpp40
-rw-r--r--tests/test_service_hud.c96
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)
{