[gcr] gcr: Add tests for new-prompt signal on GcrSystemPrompter
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcr] gcr: Add tests for new-prompt signal on GcrSystemPrompter
- Date: Mon, 9 Jan 2012 15:09:43 +0000 (UTC)
commit ff3aea653e8bf828941e351e32c42d4fb26a0a54
Author: Stef Walter <stefw collabora co uk>
Date: Mon Jan 9 16:08:14 2012 +0100
gcr: Add tests for new-prompt signal on GcrSystemPrompter
gcr/gcr-mock-prompter.c | 52 +++++++++++++++++++++++++++++++++++++++++---
gcr/gcr-system-prompter.c | 21 +++++++++++++----
2 files changed, 64 insertions(+), 9 deletions(-)
---
diff --git a/gcr/gcr-mock-prompter.c b/gcr/gcr-mock-prompter.c
index 55aadcf..ccd6a4d 100644
--- a/gcr/gcr-mock-prompter.c
+++ b/gcr/gcr-mock-prompter.c
@@ -676,7 +676,7 @@ gcr_mock_prompter_expect_confirm_ok (const gchar *first_property_name,
response->password = NULL;
response->proceed = TRUE;
- klass = g_type_class_ref (gcr_system_prompter_get_prompt_type (running->prompter));
+ klass = g_type_class_ref (GCR_TYPE_MOCK_PROMPT);
va_start (var_args, first_property_name);
response->properties = build_properties (G_OBJECT_CLASS (klass), first_property_name, var_args);
@@ -750,7 +750,7 @@ gcr_mock_prompter_expect_password_ok (const gchar *password,
response->password = g_strdup (password);
response->proceed = TRUE;
- klass = g_type_class_ref (gcr_system_prompter_get_prompt_type (running->prompter));
+ klass = g_type_class_ref (GCR_TYPE_MOCK_PROMPT);
va_start (var_args, first_property_name);
response->properties = build_properties (G_OBJECT_CLASS (klass), first_property_name, var_args);
@@ -821,6 +821,35 @@ on_idle_signal_cond (gpointer user_data)
return FALSE; /* Don't run again */
}
+/*
+ * These next few functions test the new-prompt signals of
+ * GcrSystemPrompter. They should probably be in tests, but
+ * don't fit there nicely.
+ */
+static GcrPrompt *
+on_new_prompt_skipped (GcrSystemPrompter *prompter,
+ gpointer user_data)
+{
+ g_return_val_if_fail (GCR_IS_SYSTEM_PROMPTER (prompter), NULL);
+ return NULL;
+}
+
+static GcrPrompt *
+on_new_prompt_creates (GcrSystemPrompter *prompter,
+ gpointer user_data)
+{
+ g_return_val_if_fail (GCR_IS_SYSTEM_PROMPTER (prompter), NULL);
+ return g_object_new (GCR_TYPE_MOCK_PROMPT, NULL);
+}
+
+static GcrPrompt *
+on_new_prompt_not_called (GcrSystemPrompter *prompter,
+ gpointer user_data)
+{
+ g_return_val_if_fail (GCR_IS_SYSTEM_PROMPTER (prompter), NULL);
+ g_return_val_if_reached (NULL);
+}
+
static gpointer
mock_prompter_thread (gpointer data)
{
@@ -835,8 +864,23 @@ mock_prompter_thread (gpointer data)
context = g_main_context_new ();
g_main_context_push_thread_default (context);
- thread_data->prompter = gcr_system_prompter_new (GCR_SYSTEM_PROMPTER_SINGLE,
- GCR_TYPE_MOCK_PROMPT);
+ /*
+ * Random choice between signals, and prompt-gtype style of creating
+ * GcrPrompt objects.
+ */
+
+ if (g_random_boolean ()) {
+ /* Allows GcrSystemPrompter to create the prompts directly */
+ thread_data->prompter = gcr_system_prompter_new (GCR_SYSTEM_PROMPTER_SINGLE,
+ GCR_TYPE_MOCK_PROMPT);
+
+ } else {
+ /* Create the prompt objects in signal handler */
+ thread_data->prompter = gcr_system_prompter_new (GCR_SYSTEM_PROMPTER_SINGLE, 0);
+ g_signal_connect (thread_data->prompter, "new-prompt", G_CALLBACK (on_new_prompt_skipped), NULL);
+ g_signal_connect (thread_data->prompter, "new-prompt", G_CALLBACK (on_new_prompt_creates), NULL);
+ g_signal_connect (thread_data->prompter, "new-prompt", G_CALLBACK (on_new_prompt_not_called), NULL);
+ }
address = g_dbus_address_get_for_bus_sync (G_BUS_TYPE_SESSION, NULL, &error);
if (error == NULL) {
diff --git a/gcr/gcr-system-prompter.c b/gcr/gcr-system-prompter.c
index c86e97c..b094f01 100644
--- a/gcr/gcr-system-prompter.c
+++ b/gcr/gcr-system-prompter.c
@@ -991,7 +991,11 @@ gcr_system_prompter_unregister (GcrSystemPrompter *self,
* Create a new system prompter service. This prompter won't do anything unless
* you connect to its signals and show appropriate prompts.
*
- * The @prompt_type #GType must implement the #GcrPrompt interface.
+ * If @prompt_type is zero, then the new-prompt signal must be handled and
+ * return a valid prompt object implementing the #GcrPrompt interface.
+ *
+ * If @prompt_type is non-zero then the #GType must implement the #GcrPrompt
+ * interface.
*
* Returns: (transfer full): a new prompter service
*/
@@ -999,10 +1003,17 @@ GcrSystemPrompter *
gcr_system_prompter_new (GcrSystemPrompterMode mode,
GType prompt_type)
{
- return g_object_new (GCR_TYPE_SYSTEM_PROMPTER,
- "mode", mode,
- "prompt-type", prompt_type,
- NULL);
+ if (prompt_type == 0) {
+ return g_object_new (GCR_TYPE_SYSTEM_PROMPTER,
+ "mode", mode,
+ NULL);
+
+ } else {
+ return g_object_new (GCR_TYPE_SYSTEM_PROMPTER,
+ "mode", mode,
+ "prompt-type", prompt_type,
+ NULL);
+ }
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]