libpurple/tests/test_history_adapter.c

changeset 41090
741992355ead
child 42089
083eae91c9a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/tests/test_history_adapter.c	Tue Oct 12 00:50:59 2021 -0500
@@ -0,0 +1,293 @@
+/*
+ * Purple - Internet Messaging Library
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <glib.h>
+
+#include <purple.h>
+
+#include "test_ui.h"
+
+#define PURPLE_GLOBAL_HEADER_INSIDE
+#include "../purpleprivate.h"
+#undef PURPLE_GLOBAL_HEADER_INSIDE
+
+/******************************************************************************
+ * TestPurpleHistoryAdapter
+ *****************************************************************************/
+#define TEST_PURPLE_TYPE_HISTORY_ADAPTER \
+	(test_purple_history_adapter_get_type())
+G_DECLARE_FINAL_TYPE(TestPurpleHistoryAdapter,
+                     test_purple_history_adapter,
+                     TEST_PURPLE, HISTORY_ADAPTER,
+                     PurpleHistoryAdapter)
+
+struct _TestPurpleHistoryAdapter {
+	PurpleHistoryAdapter parent;
+
+	gboolean activate;
+	gboolean deactivate;
+	gboolean query;
+	gboolean remove;
+	gboolean write;
+};
+
+G_DEFINE_TYPE(TestPurpleHistoryAdapter,
+              test_purple_history_adapter,
+              PURPLE_TYPE_HISTORY_ADAPTER)
+
+static gboolean
+test_purple_history_adapter_activate(PurpleHistoryAdapter *a, GError **error) {
+	TestPurpleHistoryAdapter *adapter = TEST_PURPLE_HISTORY_ADAPTER(a);
+
+	adapter->activate = TRUE;
+
+	return TRUE;
+}
+
+static gboolean
+test_purple_history_adapter_deactivate(PurpleHistoryAdapter *a,
+                                       GError **error)
+{
+	TestPurpleHistoryAdapter *adapter = TEST_PURPLE_HISTORY_ADAPTER(a);
+
+	adapter->deactivate = TRUE;
+
+	return TRUE;
+}
+
+static GList *
+test_purple_history_adapter_query(PurpleHistoryAdapter *a,
+                                  const gchar *query,
+                                  GError **error)
+{
+	TestPurpleHistoryAdapter *adapter = TEST_PURPLE_HISTORY_ADAPTER(a);
+	GList *list = NULL;
+
+	adapter->query = TRUE;
+
+	list = g_list_append(list, GINT_TO_POINTER(1));
+
+	return list;
+}
+
+static gboolean
+test_purple_history_adapter_remove(PurpleHistoryAdapter *a,
+                                   const gchar *query,
+                                   GError **error)
+{
+	TestPurpleHistoryAdapter *adapter = TEST_PURPLE_HISTORY_ADAPTER(a);
+
+	adapter->remove = TRUE;
+
+	return TRUE;
+}
+
+static gboolean
+test_purple_history_adapter_write(PurpleHistoryAdapter *a,
+                                  PurpleConversation *conversation,
+                                  PurpleMessage *message,
+                                  GError **error)
+{
+	TestPurpleHistoryAdapter *adapter = TEST_PURPLE_HISTORY_ADAPTER(a);
+
+	adapter->write = TRUE;
+
+	return TRUE;
+}
+
+static void
+test_purple_history_adapter_init(TestPurpleHistoryAdapter *adapter) {
+}
+
+static void
+test_purple_history_adapter_class_init(TestPurpleHistoryAdapterClass *klass) {
+	PurpleHistoryAdapterClass *adapter_class = NULL;
+
+	adapter_class = PURPLE_HISTORY_ADAPTER_CLASS(klass);
+
+	adapter_class->activate = test_purple_history_adapter_activate;
+	adapter_class->deactivate = test_purple_history_adapter_deactivate;
+	adapter_class->query = test_purple_history_adapter_query;
+	adapter_class->remove = test_purple_history_adapter_remove;
+	adapter_class->write = test_purple_history_adapter_write;
+}
+
+static PurpleHistoryAdapter *
+test_purple_history_adapter_new(void) {
+	return g_object_new(
+		TEST_PURPLE_TYPE_HISTORY_ADAPTER,
+		"id", "test-adapter",
+		"name", "Test Adapter",
+		NULL);
+}
+
+/******************************************************************************
+ * Tests
+ *****************************************************************************/
+
+static void
+test_purple_history_adapter_test_properties(void) {
+	PurpleHistoryAdapter *adapter = test_purple_history_adapter_new();
+
+	g_assert_cmpstr(purple_history_adapter_get_id(adapter),
+	                ==,
+	                "test-adapter");
+	g_assert_cmpstr(purple_history_adapter_get_name(adapter),
+	                ==,
+	                "Test Adapter");
+
+	g_clear_object(&adapter);
+}
+
+static void
+test_purple_history_adapter_test_activate(void) {
+	PurpleHistoryAdapter *adapter = test_purple_history_adapter_new();
+	TestPurpleHistoryAdapter *ta = TEST_PURPLE_HISTORY_ADAPTER(adapter);
+	GError *error = NULL;
+	gboolean result = FALSE;
+
+	result = purple_history_adapter_activate(adapter, &error);
+	g_assert_no_error(error);
+	g_assert_true(result);
+	g_assert_true(ta->activate);
+	g_assert_false(ta->deactivate);
+	g_assert_false(ta->query);
+	g_assert_false(ta->remove);
+	g_assert_false(ta->write);
+
+	g_clear_object(&adapter);
+}
+
+static void
+test_purple_history_adapter_test_deactivate(void) {
+	PurpleHistoryAdapter *adapter = test_purple_history_adapter_new();
+	TestPurpleHistoryAdapter *ta = TEST_PURPLE_HISTORY_ADAPTER(adapter);
+	GError *error = NULL;
+	gboolean result = FALSE;
+
+	result = purple_history_adapter_deactivate(adapter, &error);
+	g_assert_no_error(error);
+	g_assert_true(result);
+	g_assert_false(ta->activate);
+	g_assert_true(ta->deactivate);
+	g_assert_false(ta->query);
+	g_assert_false(ta->remove);
+	g_assert_false(ta->write);
+
+	g_clear_object(&adapter);
+}
+
+static void
+test_purple_history_adapter_test_query(void) {
+	PurpleHistoryAdapter *adapter = test_purple_history_adapter_new();
+	TestPurpleHistoryAdapter *ta = TEST_PURPLE_HISTORY_ADAPTER(adapter);
+	GError *error = NULL;
+	GList *result = NULL;
+
+	result = purple_history_adapter_query(adapter, "query", &error);
+	g_assert_no_error(error);
+	g_assert_nonnull(result);
+	g_assert_false(ta->activate);
+	g_assert_false(ta->deactivate);
+	g_assert_true(ta->query);
+	g_assert_false(ta->remove);
+	g_assert_false(ta->write);
+	g_list_free(result);
+	g_clear_object(&adapter);
+}
+
+static void
+test_purple_history_adapter_test_remove(void) {
+	PurpleHistoryAdapter *adapter = test_purple_history_adapter_new();
+	TestPurpleHistoryAdapter *ta = TEST_PURPLE_HISTORY_ADAPTER(adapter);
+	GError *error = NULL;
+	gboolean result = FALSE;
+
+	result = purple_history_adapter_remove(adapter, "query", &error);
+	g_assert_no_error(error);
+	g_assert_true(result);
+	g_assert_false(ta->activate);
+	g_assert_false(ta->deactivate);
+	g_assert_false(ta->query);
+	g_assert_true(ta->remove);
+	g_assert_false(ta->write);
+
+	g_clear_object(&adapter);
+}
+
+static void
+test_purple_history_adapter_test_write(void) {
+	PurpleAccount *account = NULL;
+	PurpleConversation *conversation = NULL;
+	PurpleHistoryAdapter *adapter = test_purple_history_adapter_new();
+	PurpleMessage *message = NULL;
+	TestPurpleHistoryAdapter *ta = TEST_PURPLE_HISTORY_ADAPTER(adapter);
+	GError *error = NULL;
+	gboolean result = FALSE;
+
+	message = g_object_new(PURPLE_TYPE_MESSAGE, NULL);
+	account = purple_account_new("test", "test");
+	conversation = g_object_new(PURPLE_TYPE_IM_CONVERSATION,
+	                            "account", account,
+	                            "name", "pidgy",
+	                            NULL);
+	result = purple_history_adapter_write(adapter, conversation, message,
+	                                      &error);
+
+	g_assert_no_error(error);
+	g_assert_true(result);
+	g_assert_false(ta->activate);
+	g_assert_false(ta->deactivate);
+	g_assert_false(ta->query);
+	g_assert_false(ta->remove);
+	g_assert_true(ta->write);
+
+	g_clear_object(&adapter);
+	g_clear_object(&message);
+
+	/* TODO: something is freeing our ref. */
+	/* g_clear_object(&account); */
+
+	g_clear_object(&conversation);
+}
+
+
+/******************************************************************************
+ * Main
+ *****************************************************************************/
+gint
+main(gint argc, gchar *argv[]) {
+	g_test_init(&argc, &argv, NULL);
+
+	test_ui_purple_init();
+
+	g_test_add_func("/history-adapter/properties",
+	                test_purple_history_adapter_test_properties);
+	g_test_add_func("/history-adapter/activate",
+	                test_purple_history_adapter_test_activate);
+	g_test_add_func("/history-adapter/deactivate",
+	                test_purple_history_adapter_test_deactivate);
+	g_test_add_func("/history-adapter/query",
+	                test_purple_history_adapter_test_query);
+	g_test_add_func("/history-adapter/remove",
+	                test_purple_history_adapter_test_remove);
+	g_test_add_func("/history-adapter/write",
+	                test_purple_history_adapter_test_write);
+
+	return g_test_run();
+}

mercurial