libpurple/tests/test_contact.c

changeset 43101
085f4a5b74fe
parent 42866
4b201e18638f
child 43241
e41969a43e42
--- a/libpurple/tests/test_contact.c	Thu Dec 05 21:31:16 2024 -0600
+++ b/libpurple/tests/test_contact.c	Fri Dec 06 15:14:18 2024 -0600
@@ -77,6 +77,212 @@
 }
 
 /******************************************************************************
+ * Compare
+ *****************************************************************************/
+static void
+test_purple_contact_compare_not_null__null(void) {
+	PurpleAccount *account = NULL;
+	PurpleContact *contact = NULL;
+
+	account = purple_account_new("test", "test");
+	contact = g_object_new(
+		PURPLE_TYPE_CONTACT,
+		"account", account,
+		"id", "id1",
+		NULL);
+
+	g_assert_cmpint(purple_contact_compare(contact, NULL), <, 0);
+
+	g_assert_finalize_object(contact);
+	g_assert_finalize_object(account);
+}
+
+static void
+test_purple_contact_compare_null__not_null(void) {
+	PurpleAccount *account = NULL;
+	PurpleContact *contact = NULL;
+
+	account = purple_account_new("test", "test");
+	contact = g_object_new(
+		PURPLE_TYPE_CONTACT,
+		"account", account,
+		"id", "id1",
+		NULL);
+
+	g_assert_cmpint(purple_contact_compare(NULL, contact), >, 0);
+
+	g_assert_finalize_object(contact);
+	g_assert_finalize_object(account);
+}
+
+static void
+test_purple_contact_compare_null__null(void) {
+	g_assert_cmpint(purple_contact_compare(NULL, NULL), ==, 0);
+}
+
+static void
+test_purple_contact_compare_not_null__not_null(void) {
+	PurpleAccount *account_a = NULL;
+	PurpleAccount *account_b = NULL;
+	PurpleContact *contact_a = NULL;
+	PurpleContact *contact_b = NULL;
+
+	account_a = g_object_new(
+		PURPLE_TYPE_ACCOUNT,
+		"username", "test_a",
+		"protocol-id", "test",
+		"enabled", FALSE,
+		NULL);
+	account_b = g_object_new(
+		PURPLE_TYPE_ACCOUNT,
+		"username", "test_b",
+		"protocol-id", "test",
+		"enabled", FALSE,
+		NULL);
+	contact_a = g_object_new(
+		PURPLE_TYPE_CONTACT,
+		"account", account_a,
+		NULL);
+	contact_b = g_object_new(
+		PURPLE_TYPE_CONTACT,
+		"account", account_b,
+		NULL);
+
+	/* Account a and b have no id and should compare equal. */
+	g_assert_cmpint(purple_contact_compare(contact_a, contact_b), ==, 0);
+
+	/* Change display_name so the contact_info objects will be different. */
+	purple_contact_info_set_display_name(PURPLE_CONTACT_INFO(contact_a), "name_a");
+	purple_contact_info_set_display_name(PURPLE_CONTACT_INFO(contact_b), "name_b");
+	g_assert_cmpint(purple_contact_compare(contact_a, contact_b), <, 0);
+
+	/* Set the account ids so the account member will be different too. */
+	g_object_set(account_a, "id", "account_id_a", NULL);
+	g_object_set(account_b, "id", "account_id_b", NULL);
+	g_assert_cmpint(purple_contact_compare(contact_b, contact_a), >, 0);
+
+	/* Set the display name of contact_b to that of contact_a. The contact info
+	 * is equal now, but account is still different.
+	 */
+	purple_contact_info_set_display_name(PURPLE_CONTACT_INFO(contact_b), "name_a");
+	g_assert_cmpint(purple_contact_compare(contact_b, contact_a), >, 0);
+
+	/* Set the account id of account_b to that of account_a. Both contact info and
+	 * account are equal now.
+	 */
+	g_object_set(account_b, "id", "account_id_a", NULL);
+	g_assert_cmpint(purple_contact_compare(contact_a, contact_b), ==, 0);
+
+	g_assert_finalize_object(contact_a);
+	g_assert_finalize_object(contact_b);
+	g_assert_finalize_object(account_a);
+	g_assert_finalize_object(account_b);
+}
+
+/******************************************************************************
+ * Equal
+ *****************************************************************************/
+static void
+test_purple_contact_equal_not_null__null(void) {
+	PurpleAccount *account = NULL;
+	PurpleContact *contact = NULL;
+
+	account = purple_account_new("test", "test");
+	contact = g_object_new(
+		PURPLE_TYPE_CONTACT,
+		"account", account,
+		"id", "id1",
+		NULL);
+
+	g_assert_false(purple_contact_equal(contact, NULL));
+
+	g_assert_finalize_object(contact);
+	g_assert_finalize_object(account);
+}
+
+static void
+test_purple_contact_equal_null__not_null(void) {
+	PurpleAccount *account = NULL;
+	PurpleContact *contact = NULL;
+
+	account = purple_account_new("test", "test");
+	contact = g_object_new(
+		PURPLE_TYPE_CONTACT,
+		"account", account,
+		"id", "id1",
+		NULL);
+
+	g_assert_false(purple_contact_equal(NULL, contact));
+
+	g_assert_finalize_object(contact);
+	g_assert_finalize_object(account);
+}
+
+static void
+test_purple_contact_equal_null__null(void) {
+	g_assert_true(purple_contact_equal(NULL, NULL));
+}
+
+static void
+test_purple_contact_equal_not_null__not_null(void) {
+	PurpleAccount *account_a = NULL;
+	PurpleAccount *account_b = NULL;
+	PurpleContact *contact_a = NULL;
+	PurpleContact *contact_b = NULL;
+
+	account_a = g_object_new(
+		PURPLE_TYPE_ACCOUNT,
+		"username", "test_a",
+		"protocol-id", "test",
+		"enabled", FALSE,
+		NULL);
+	account_b = g_object_new(
+		PURPLE_TYPE_ACCOUNT,
+		"username", "test_b",
+		"protocol-id", "test",
+		"enabled", FALSE,
+		NULL);
+	contact_a = g_object_new(
+		PURPLE_TYPE_CONTACT,
+		"account", account_a,
+		NULL);
+	contact_b = g_object_new(
+		PURPLE_TYPE_CONTACT,
+		"account", account_b,
+		NULL);
+
+	/* Account a and b have no id and should compare equal. */
+	g_assert_true(purple_contact_equal(contact_a, contact_b));
+
+	/* Change display_name so the contact_info objects will be different. */
+	purple_contact_info_set_display_name(PURPLE_CONTACT_INFO(contact_a), "name_a");
+	purple_contact_info_set_display_name(PURPLE_CONTACT_INFO(contact_b), "name_b");
+	g_assert_false(purple_contact_equal(contact_a, contact_b));
+
+	/* Set the account ids so the account members will be different too. */
+	g_object_set(account_a, "id", "account_id_a", NULL);
+	g_object_set(account_b, "id", "account_id_b", NULL);
+	g_assert_false(purple_contact_equal(contact_a, contact_b));
+
+	/* Set the display name of contact_b to that of contact_a. The contact info
+	 * is equal now, but account is still different.
+	 */
+	purple_contact_info_set_display_name(PURPLE_CONTACT_INFO(contact_b), "name_a");
+	g_assert_false(purple_contact_equal(contact_a, contact_b));
+
+	/* Set the account id of account_b to that of account_a. Both contact info and
+	 * account are equal now.
+	 */
+	g_object_set(account_b, "id", "account_id_a", NULL);
+	g_assert_true(purple_contact_equal(contact_a, contact_b));
+
+	g_assert_finalize_object(contact_a);
+	g_assert_finalize_object(contact_b);
+	g_assert_finalize_object(account_a);
+	g_assert_finalize_object(account_b);
+}
+
+/******************************************************************************
  * Main
  *****************************************************************************/
 int
@@ -89,5 +295,24 @@
 	g_test_add_func("/contact/properties",
 	                test_purple_contact_properties);
 
+	g_test_add_func("/contact/compare/not_null__null",
+	                test_purple_contact_compare_not_null__null);
+	g_test_add_func("/contact/compare/null__not_null",
+	                test_purple_contact_compare_null__not_null);
+	g_test_add_func("/contact/compare/null__null",
+	                test_purple_contact_compare_null__null);
+	g_test_add_func("/contact/compare/not_null__not_null",
+	                test_purple_contact_compare_not_null__not_null);
+
+	g_test_add_func("/contact/equal/not_null__null",
+	                test_purple_contact_equal_not_null__null);
+	g_test_add_func("/contact/equal/null__not_null",
+	                test_purple_contact_equal_null__not_null);
+	g_test_add_func("/contact/equal/null__null",
+	                test_purple_contact_equal_null__null);
+	g_test_add_func("/contact/equal/not_null__not_null",
+	                test_purple_contact_equal_not_null__not_null);
+
+
 	return g_test_run();
 }

mercurial