libpurple/tests/test_conversation_manager.c

changeset 42286
3fe515350d59
parent 42273
884be7e66e1f
child 42672
5b864b9b22aa
--- a/libpurple/tests/test_conversation_manager.c	Thu Aug 17 23:06:29 2023 -0500
+++ b/libpurple/tests/test_conversation_manager.c	Fri Aug 18 02:04:34 2023 -0500
@@ -94,6 +94,76 @@
 }
 
 /******************************************************************************
+ * Signal Tests
+ *****************************************************************************/
+static void
+test_purple_conversation_manager_signal_conversation_changed_cb(PurpleConversationManager *manager,
+                                                                PurpleConversation *conversation,
+                                                                GParamSpec *pspec,
+                                                                gpointer data)
+{
+	guint *counter = data;
+
+	g_assert_true(PURPLE_IS_CONVERSATION_MANAGER(manager));
+	g_assert_true(PURPLE_IS_CONVERSATION(conversation));
+	g_assert_true(G_IS_PARAM_SPEC(pspec));
+
+	*counter = *counter + 1;
+}
+
+static void
+test_purple_conversation_manager_signal_conversation_changed(void) {
+	PurpleAccount *account = NULL;
+	PurpleConversationManager *manager = NULL;
+	PurpleConversation *conversation = NULL;
+	guint counter = 0;
+	guint detailed_counter = 0;
+	gboolean result = FALSE;
+
+	manager = g_object_new(PURPLE_TYPE_CONVERSATION_MANAGER, NULL);
+	g_signal_connect(manager, "conversation-changed",
+	                 G_CALLBACK(test_purple_conversation_manager_signal_conversation_changed_cb),
+	                 &counter);
+	g_signal_connect(manager, "conversation-changed::title",
+	                 G_CALLBACK(test_purple_conversation_manager_signal_conversation_changed_cb),
+	                 &detailed_counter);
+
+	account = purple_account_new("test", "test");
+
+	conversation = g_object_new(
+		PURPLE_TYPE_CONVERSATION,
+		"account", account,
+		"name", "kool kats",
+		NULL);
+	purple_conversation_manager_register(manager, conversation);
+
+	/* Set the features and title of the conversation, and verify our counters. */
+	purple_conversation_set_features(conversation, PURPLE_CONNECTION_FLAG_NO_IMAGES);
+	purple_conversation_set_title(conversation, "A place for kool kats");
+
+	g_assert_cmpuint(counter, ==, 2);
+	g_assert_cmpuint(detailed_counter, ==, 1);
+
+	/* Unregister the conversation, to make sure signals are no longer
+	 * propagated.
+	 */
+	result = purple_conversation_manager_unregister(manager, conversation);
+	g_assert_true(result);
+
+	counter = 0;
+	detailed_counter = 0;
+	purple_conversation_set_title(conversation,
+	                              "no longer a place for kool kats");
+	g_assert_cmpuint(counter, ==, 0);
+	g_assert_cmpuint(detailed_counter, ==, 0);
+
+	/* Clean up. */
+	g_clear_object(&conversation);
+	g_clear_object(&account);
+	g_clear_object(&manager);
+}
+
+/******************************************************************************
  * Main
  *****************************************************************************/
 gint
@@ -107,6 +177,9 @@
 	g_test_add_func("/conversation-manager/register-unregister",
 	                test_purple_conversation_manager_register_unregister);
 
+	g_test_add_func("/conversation-manager/signals/conversation-changed",
+	                test_purple_conversation_manager_signal_conversation_changed);
+
 	ret = g_test_run();
 
 	test_ui_purple_uninit();

mercurial