# HG changeset patch
# Node ID 7a44b6347aa8
# Parent  18c5298a41d4
diff --git a/libpurple/tests/test_account_manager.c b/libpurple/tests/test_account_manager.c
--- a/libpurple/tests/test_account_manager.c
+++ b/libpurple/tests/test_account_manager.c
@@ -218,6 +218,8 @@ test_purple_account_manager_foreach(void
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -231,5 +233,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/account-manager/foreach",
 	                test_purple_account_manager_foreach);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_account_option.c b/libpurple/tests/test_account_option.c
--- a/libpurple/tests/test_account_option.c
+++ b/libpurple/tests/test_account_option.c
@@ -68,6 +68,9 @@ test_purple_account_option_copy_int(void
 	opt2 = purple_account_option_copy(opt1);
 
 	test_purple_account_option_compare(opt1, opt2);
+
+	purple_account_option_destroy(opt1);
+	purple_account_option_destroy(opt2);
 }
 
 static void
@@ -84,6 +87,9 @@ test_purple_account_option_copy_int_with
 	g_assert_cmpint(purple_account_option_get_default_int(opt1),
 	                ==,
 	                purple_account_option_get_default_int(opt2));
+
+	purple_account_option_destroy(opt1);
+	purple_account_option_destroy(opt2);
 }
 
 static void
@@ -94,6 +100,9 @@ test_purple_account_option_copy_string(v
 
 	opt2 = purple_account_option_copy(opt1);
 	test_purple_account_option_compare_string(opt1, opt2);
+
+	purple_account_option_destroy(opt1);
+	purple_account_option_destroy(opt2);
 }
 
 static void
@@ -105,6 +114,9 @@ test_purple_account_option_copy_string_w
 
 	opt2 = purple_account_option_copy(opt1);
 	test_purple_account_option_compare_string(opt1, opt2);
+
+	purple_account_option_destroy(opt1);
+	purple_account_option_destroy(opt2);
 }
 
 static void
@@ -116,6 +128,9 @@ test_purple_account_option_copy_string_w
 
 	opt2 = purple_account_option_copy(opt1);
 	test_purple_account_option_compare_string(opt1, opt2);
+
+	purple_account_option_destroy(opt1);
+	purple_account_option_destroy(opt2);
 }
 
 /******************************************************************************
diff --git a/libpurple/tests/test_authorization_request.c b/libpurple/tests/test_authorization_request.c
--- a/libpurple/tests/test_authorization_request.c
+++ b/libpurple/tests/test_authorization_request.c
@@ -302,6 +302,8 @@ test_purple_authorization_request_deny_m
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -325,5 +327,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/request-authorization/deny-message/non-null",
 	                test_purple_authorization_request_deny_message_non_null);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_contact.c b/libpurple/tests/test_contact.c
--- a/libpurple/tests/test_contact.c
+++ b/libpurple/tests/test_contact.c
@@ -83,6 +83,8 @@ test_purple_contact_properties(void) {
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -92,5 +94,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/contact/properties",
 	                test_purple_contact_properties);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_contact_info.c b/libpurple/tests/test_contact_info.c
--- a/libpurple/tests/test_contact_info.c
+++ b/libpurple/tests/test_contact_info.c
@@ -437,6 +437,8 @@ test_purple_contact_info_presence_change
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -486,5 +488,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/contact-info/presence-changed-signal",
 	                test_purple_contact_info_presence_changed_signal);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_contact_manager.c b/libpurple/tests/test_contact_manager.c
--- a/libpurple/tests/test_contact_manager.c
+++ b/libpurple/tests/test_contact_manager.c
@@ -470,6 +470,8 @@ test_purple_contact_manager_person_add_v
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -499,5 +501,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/contact-manager/person/add-via-contact-remove-person-with-contacts",
 	                test_purple_contact_manager_person_add_via_contact_remove_person_with_contacts);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_conversation.c b/libpurple/tests/test_conversation.c
--- a/libpurple/tests/test_conversation.c
+++ b/libpurple/tests/test_conversation.c
@@ -31,6 +31,7 @@ test_purple_conversation_properties(void
 	PurpleAccount *account1 = NULL;
 	PurpleConnectionFlags features = 0;
 	PurpleConversation *conversation = NULL;
+	PurpleConversationManager *conversation_manager = NULL;
 	GListModel *members = NULL;
 	gchar *name = NULL;
 	gchar *title = NULL;
@@ -71,6 +72,12 @@ test_purple_conversation_properties(void
 	g_assert_cmpstr(title, ==, "title1");
 #endif
 
+	/* TODO: Conversations are automatically registered on construction for
+	 * legacy reasons, so we need to explicitly unregister to clean them up,
+	 * but this can go away once that stops happening. */
+	conversation_manager = purple_conversation_manager_get_default();
+	purple_conversation_manager_unregister(conversation_manager, conversation);
+
 	/* Free/unref all the things. */
 	g_clear_object(&account1);
 	g_clear_object(&members);
@@ -107,6 +114,7 @@ test_purple_conversation_members_add_rem
 	PurpleAccount *account = NULL;
 	PurpleContactInfo *info = NULL;
 	PurpleConversation *conversation = NULL;
+	PurpleConversationManager *conversation_manager = NULL;
 	PurpleConversationMember *member = NULL;
 	PurpleConversationMember *member1 = NULL;
 	gboolean removed = FALSE;
@@ -164,6 +172,12 @@ test_purple_conversation_members_add_rem
 	g_assert_false(removed);
 	g_assert_cmpint(removed_called, ==, 1);
 
+	/* TODO: Conversations are automatically registered on construction for
+	 * legacy reasons, so we need to explicitly unregister to clean them up,
+	 * but this can go away once that stops happening. */
+	conversation_manager = purple_conversation_manager_get_default();
+	purple_conversation_manager_unregister(conversation_manager, conversation);
+
 	/* Clean up everything. */
 	g_clear_object(&info);
 	g_clear_object(&member);
@@ -176,6 +190,8 @@ test_purple_conversation_members_add_rem
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -186,5 +202,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/conversation/members/add-remove",
 	                test_purple_conversation_members_add_remove);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_credential_manager.c b/libpurple/tests/test_credential_manager.c
--- a/libpurple/tests/test_credential_manager.c
+++ b/libpurple/tests/test_credential_manager.c
@@ -311,6 +311,7 @@ test_purple_credential_manager_no_provid
 	password = purple_credential_manager_read_password_finish(manager, res,
 	                                                          &error);
 	g_assert_error(error, PURPLE_CREDENTIAL_MANAGER_DOMAIN, 0);
+	g_clear_error(&error);
 	g_assert_null(password);
 
 	g_clear_object(&account);
@@ -360,6 +361,7 @@ test_purple_credential_manager_no_provid
 	r = purple_credential_manager_write_password_finish(manager, res, &error);
 	g_assert_false(r);
 	g_assert_error(error, PURPLE_CREDENTIAL_MANAGER_DOMAIN, 0);
+	g_clear_error(&error);
 
 	g_clear_object(&account);
 
@@ -409,6 +411,7 @@ test_purple_credential_manager_no_provid
 	r = purple_credential_manager_clear_password_finish(manager, res, &error);
 	g_assert_false(r);
 	g_assert_error(error, PURPLE_CREDENTIAL_MANAGER_DOMAIN, 0);
+	g_clear_error(&error);
 
 	g_clear_object(&account);
 
@@ -696,5 +699,7 @@ main(gint argc, gchar *argv[]) {
 
 	g_main_loop_unref(loop);
 
+	test_ui_purple_uninit();
+
 	return ret;
 }
diff --git a/libpurple/tests/test_credential_provider.c b/libpurple/tests/test_credential_provider.c
--- a/libpurple/tests/test_credential_provider.c
+++ b/libpurple/tests/test_credential_provider.c
@@ -539,5 +539,7 @@ main(gint argc, gchar *argv[]) {
 
 	g_main_loop_unref(loop);
 
+	test_ui_purple_uninit();
+
 	return ret;
 }
diff --git a/libpurple/tests/test_history_adapter.c b/libpurple/tests/test_history_adapter.c
--- a/libpurple/tests/test_history_adapter.c
+++ b/libpurple/tests/test_history_adapter.c
@@ -236,6 +236,7 @@ static void
 test_purple_history_adapter_test_write(void) {
 	PurpleAccount *account = NULL;
 	PurpleConversation *conversation = NULL;
+	PurpleConversationManager *conversation_manager = NULL;
 	PurpleHistoryAdapter *adapter = test_purple_history_adapter_new();
 	PurpleMessage *message = NULL;
 	TestPurpleHistoryAdapter *ta = TEST_PURPLE_HISTORY_ADAPTER(adapter);
@@ -262,10 +263,14 @@ test_purple_history_adapter_test_write(v
 	g_clear_object(&adapter);
 	g_clear_object(&message);
 
-	/* TODO: something is freeing our ref. */
-	/* g_clear_object(&account); */
+	/* TODO: Conversations are automatically registered on construction for
+	 * legacy reasons, so we need to explicitly unregister to clean them up,
+	 * but this can go away once that stops happening. */
+	conversation_manager = purple_conversation_manager_get_default();
+	purple_conversation_manager_unregister(conversation_manager, conversation);
 
 	g_clear_object(&conversation);
+	g_clear_object(&account);
 }
 
 
@@ -274,6 +279,8 @@ test_purple_history_adapter_test_write(v
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -291,5 +298,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/history-adapter/write",
 	                test_purple_history_adapter_test_write);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_history_manager.c b/libpurple/tests/test_history_manager.c
--- a/libpurple/tests/test_history_manager.c
+++ b/libpurple/tests/test_history_manager.c
@@ -315,6 +315,7 @@ static void
 test_purple_history_manager_no_adapter_write(void) {
 	PurpleAccount *account = NULL;
 	PurpleConversation *conversation = NULL;
+	PurpleConversationManager *conversation_manager = NULL;
 	PurpleHistoryManager *manager = NULL;
 	PurpleMessage *message = NULL;
 	GError *error = NULL;
@@ -337,11 +338,15 @@ test_purple_history_manager_no_adapter_w
 
 	g_assert_false(result);
 
-	/* TODO: someone is freeing our ref. */
-	/* g_clear_object(&account); */
+	/* TODO: Conversations are automatically registered on construction for
+	 * legacy reasons, so we need to explicitly unregister to clean them up,
+	 * but this can go away once that stops happening. */
+	conversation_manager = purple_conversation_manager_get_default();
+	purple_conversation_manager_unregister(conversation_manager, conversation);
 
 	g_clear_object(&message);
 	g_clear_object(&conversation);
+	g_clear_object(&account);
 	g_clear_object(&manager);
 }
 
@@ -429,6 +434,7 @@ static void
 test_purple_history_manager_adapter_write(void) {
 	PurpleAccount *account = NULL;
 	PurpleConversation *conversation = NULL;
+	PurpleConversationManager *conversation_manager = NULL;
 	PurpleHistoryManager *manager = NULL;
 	PurpleHistoryAdapter *adapter = NULL;
 	PurpleMessage *message = NULL;
@@ -471,10 +477,14 @@ test_purple_history_manager_adapter_writ
 	g_clear_object(&adapter);
 	g_clear_object(&message);
 
-	/* TODO: something is freeing our ref. */
-	/* g_clear_object(&account); */
+	/* TODO: Conversations are automatically registered on construction for
+	 * legacy reasons, so we need to explicitly unregister to clean them up,
+	 * but this can go away once that stops happening. */
+	conversation_manager = purple_conversation_manager_get_default();
+	purple_conversation_manager_unregister(conversation_manager, conversation);
 
 	g_clear_object(&conversation);
+	g_clear_object(&account);
 	g_clear_object(&manager);
 }
 
@@ -515,7 +525,10 @@ main(gint argc, gchar *argv[]) {
 	                test_purple_history_manager_no_adapter_remove);
 	g_test_add_func("/history-manager/no-adapter/write",
 	                test_purple_history_manager_no_adapter_write);
+
 	ret = g_test_run();
 
+	test_ui_purple_uninit();
+
 	return ret;
 }
diff --git a/libpurple/tests/test_image.c b/libpurple/tests/test_image.c
--- a/libpurple/tests/test_image.c
+++ b/libpurple/tests/test_image.c
@@ -153,6 +153,7 @@ test_image_new_from_file(void) {
 		"image/png"
 	);
 
+	g_free(edata);
 	g_free(path);
 }
 
diff --git a/libpurple/tests/test_notification.c b/libpurple/tests/test_notification.c
--- a/libpurple/tests/test_notification.c
+++ b/libpurple/tests/test_notification.c
@@ -148,6 +148,8 @@ test_purple_notification_properties(void
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -159,5 +161,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/notification/properties",
 	                test_purple_notification_properties);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_notification_manager.c b/libpurple/tests/test_notification_manager.c
--- a/libpurple/tests/test_notification_manager.c
+++ b/libpurple/tests/test_notification_manager.c
@@ -424,5 +424,7 @@ main(gint argc, gchar *argv[]) {
 
 	g_main_loop_unref(loop);
 
+	test_ui_purple_uninit();
+
 	return ret;
 }
diff --git a/libpurple/tests/test_person.c b/libpurple/tests/test_person.c
--- a/libpurple/tests/test_person.c
+++ b/libpurple/tests/test_person.c
@@ -494,6 +494,8 @@ test_purple_person_matches_contact_info(
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -532,5 +534,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/person/matches/contact_info",
 	                test_purple_person_matches_contact_info);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_protocol.c b/libpurple/tests/test_protocol.c
--- a/libpurple/tests/test_protocol.c
+++ b/libpurple/tests/test_protocol.c
@@ -241,5 +241,7 @@ main(gint argc, gchar *argv[]) {
 
 	g_main_loop_unref(loop);
 
+	test_ui_purple_uninit();
+
 	return ret;
 }
diff --git a/libpurple/tests/test_protocol_xfer.c b/libpurple/tests/test_protocol_xfer.c
--- a/libpurple/tests/test_protocol_xfer.c
+++ b/libpurple/tests/test_protocol_xfer.c
@@ -117,51 +117,71 @@ test_purple_protocol_xfer_new(void) {
  *****************************************************************************/
 static void
 test_purple_protocol_xfer_can_receive_func(void) {
-	TestPurpleProtocolXfer *xfer = test_purple_protocol_xfer_new();
-	PurpleAccount *a = purple_account_new("prpl-xfer-can-receive", "prpl-xfer");
-	PurpleConnection *c = g_object_new(PURPLE_TYPE_CONNECTION, "account", a, NULL);
+	TestPurpleProtocolXfer *xfer = NULL;
+	PurpleAccount *account = NULL;
+	PurpleConnection *connection = NULL;
 	gboolean actual = FALSE;
 
+	xfer = test_purple_protocol_xfer_new();
+	account = purple_account_new("prpl-xfer-can-receive", "prpl-xfer");
+	connection = g_object_new(PURPLE_TYPE_CONNECTION, "account", account, NULL);
+
 	g_assert_true(PURPLE_IS_PROTOCOL_XFER(xfer));
 
 	xfer->can_send = FALSE;
-	actual = purple_protocol_xfer_can_receive(
-		PURPLE_PROTOCOL_XFER(xfer),
-		c,
-		"foo"
-	);
+	actual = purple_protocol_xfer_can_receive(PURPLE_PROTOCOL_XFER(xfer),
+	                                          connection, "foo");
 	g_assert_false(actual);
 
 	xfer->can_send = TRUE;
 	actual = purple_protocol_xfer_can_receive(
 		PURPLE_PROTOCOL_XFER(xfer),
-		c,
+		connection,
 		"foo"
 	);
 	g_assert_true(actual);
+
+	g_clear_object(&account);
+	g_clear_object(&xfer);
 }
 
 static void
 test_purple_protocol_xfer_send_file_func(void) {
-	TestPurpleProtocolXfer *prplxfer = g_object_new(test_purple_protocol_xfer_get_type(), NULL);
-	PurpleAccount *a = purple_account_new("prpl-xfer-send", "prpl-xfer");
-	PurpleConnection *c = g_object_new(PURPLE_TYPE_CONNECTION, "account", a, NULL);
+	TestPurpleProtocolXfer *prplxfer = NULL;
+	PurpleAccount *account = NULL;
+	PurpleConnection *connection = NULL;
 
-	purple_protocol_xfer_send_file(PURPLE_PROTOCOL_XFER(prplxfer), c, "foo", "somefile");
+	prplxfer = g_object_new(test_purple_protocol_xfer_get_type(), NULL);
+	account = purple_account_new("prpl-xfer-send", "prpl-xfer");
+	connection = g_object_new(PURPLE_TYPE_CONNECTION, "account", account, NULL);
+
+	purple_protocol_xfer_send_file(PURPLE_PROTOCOL_XFER(prplxfer), connection,
+	                               "foo", "somefile");
 	g_assert_true(prplxfer->send_called);
+
+	g_clear_object(&account);
+	g_clear_object(&prplxfer);
 }
 
 static void
 test_purple_protocol_xfer_new_func(void) {
-	TestPurpleProtocolXfer *prplxfer = g_object_new(test_purple_protocol_xfer_get_type(), NULL);
-	PurpleAccount *a = purple_account_new("prpl-xfer-new-xfer", "prpl-xfer");
-	PurpleConnection *c = g_object_new(PURPLE_TYPE_CONNECTION, "account", a, NULL);
+	TestPurpleProtocolXfer *prplxfer = NULL;
+	PurpleAccount *account = NULL;
+	PurpleConnection *connection = NULL;
 	PurpleXfer *xfer = NULL;
 
-	xfer = purple_protocol_xfer_new_xfer(PURPLE_PROTOCOL_XFER(prplxfer), c, "foo");
+	prplxfer = g_object_new(test_purple_protocol_xfer_get_type(), NULL);
+	account = purple_account_new("prpl-xfer-new-xfer", "prpl-xfer");
+	connection = g_object_new(PURPLE_TYPE_CONNECTION, "account", account, NULL);
+
+	xfer = purple_protocol_xfer_new_xfer(PURPLE_PROTOCOL_XFER(prplxfer),
+	                                     connection, "foo");
 	g_assert_true(PURPLE_IS_XFER(xfer));
 	g_assert_cmpstr("foo", ==, purple_xfer_get_remote_user(xfer));
 	g_assert_true(prplxfer->new_xfer_called);
+
+	g_clear_object(&account);
+	g_clear_object(&prplxfer);
 }
 
 /******************************************************************************
@@ -194,5 +214,8 @@ main(gint argc, gchar **argv) {
 
 	res = g_test_run();
 
+	/* FIXME: We cannot call test_ui_purple_uninit() here because connections
+	 * are not easily destroyed if they haven't been fully implemented. */
+
 	return res;
 }
diff --git a/libpurple/tests/test_purplepath.c b/libpurple/tests/test_purplepath.c
--- a/libpurple/tests/test_purplepath.c
+++ b/libpurple/tests/test_purplepath.c
@@ -45,6 +45,8 @@ test_purplepath_data_dir(void) {
 
 gint
 main(gint argc, gchar **argv) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -57,5 +59,10 @@ main(gint argc, gchar **argv) {
 	                test_purplepath_config_dir);
 	g_test_add_func("/purplepath/datadir",
 	                test_purplepath_data_dir);
-	return g_test_run();
+
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
diff --git a/libpurple/tests/test_queued_output_stream.c b/libpurple/tests/test_queued_output_stream.c
--- a/libpurple/tests/test_queued_output_stream.c
+++ b/libpurple/tests/test_queued_output_stream.c
@@ -255,6 +255,7 @@ test_queued_output_stream_push_bytes_asy
 	g_assert_no_error(err);
 	g_assert_true(ret);
 
+	g_clear_object(&cancellable);
 	g_clear_object(&queued);
 	g_clear_object(&output);
 }
diff --git a/libpurple/tests/test_ui.h b/libpurple/tests/test_ui.h
--- a/libpurple/tests/test_ui.h
+++ b/libpurple/tests/test_ui.h
@@ -27,6 +27,7 @@
 G_BEGIN_DECLS
 
 void test_ui_purple_init(void);
+void test_ui_purple_uninit(void);
 
 G_END_DECLS
 
diff --git a/libpurple/tests/test_ui.c b/libpurple/tests/test_ui.c
--- a/libpurple/tests/test_ui.c
+++ b/libpurple/tests/test_ui.c
@@ -182,3 +182,8 @@ test_ui_purple_init(void) {
 	 * the preferences using purple_plugins_save_loaded() */
 	purple_plugins_load_saved("/purple/test_ui/plugins/saved");
 }
+
+void
+test_ui_purple_uninit(void) {
+	purple_core_quit();
+}
diff --git a/libpurple/tests/test_util.c b/libpurple/tests/test_util.c
--- a/libpurple/tests/test_util.c
+++ b/libpurple/tests/test_util.c
@@ -44,10 +44,19 @@ test_util_filename_escape(void) {
  *****************************************************************************/
 static void
 test_util_text_strip_mnemonic(void) {
-	g_assert_cmpstr("", ==, purple_text_strip_mnemonic(""));
-	g_assert_cmpstr("foo", ==, purple_text_strip_mnemonic("foo"));
-	g_assert_cmpstr("foo", ==, purple_text_strip_mnemonic("_foo"));
+	char *result = NULL;
+
+	result = purple_text_strip_mnemonic("");
+	g_assert_cmpstr("", ==, result);
+	g_free(result);
 
+	result = purple_text_strip_mnemonic("foo");
+	g_assert_cmpstr("foo", ==, result);
+	g_free(result);
+
+	result = purple_text_strip_mnemonic("_foo");
+	g_assert_cmpstr("foo", ==, result);
+	g_free(result);
 }
 
 /******************************************************************************
diff --git a/libpurple/tests/test_whiteboard_manager.c b/libpurple/tests/test_whiteboard_manager.c
--- a/libpurple/tests/test_whiteboard_manager.c
+++ b/libpurple/tests/test_whiteboard_manager.c
@@ -43,6 +43,8 @@ test_purple_whiteboard_manager_get_defau
  *****************************************************************************/
 gint
 main(gint argc, gchar *argv[]) {
+	gint ret = 0;
+
 	g_test_init(&argc, &argv, NULL);
 
 	test_ui_purple_init();
@@ -50,5 +52,9 @@ main(gint argc, gchar *argv[]) {
 	g_test_add_func("/whiteboard-manager/get-default",
 	                test_purple_whiteboard_manager_get_default);
 
-	return g_test_run();
+	ret = g_test_run();
+
+	test_ui_purple_uninit();
+
+	return ret;
 }
