libpurple/tests/test_contact_info.c

changeset 43302
e7b0bbfec5d5
parent 43301
0e43dc8462e8
--- a/libpurple/tests/test_contact_info.c	Thu Aug 07 21:34:33 2025 -0500
+++ b/libpurple/tests/test_contact_info.c	Thu Aug 07 21:40:13 2025 -0500
@@ -42,6 +42,7 @@
 	PurpleContactInfoPermission permission;
 	PurpleImage *avatar = NULL;
 	PurpleImage *avatar1 = NULL;
+	PurpleImage *avatar_for_display = NULL;
 	PurplePerson *person = NULL;
 	PurplePerson *person1 = NULL;
 	PurplePresence *presence1 = NULL;
@@ -91,69 +92,135 @@
 
 	/* Now use g_object_get to read all of the properties. */
 	g_object_get(info,
-		"id", &id,
-		"username", &username,
+		"alias", &alias,
+		"avatar", &avatar1,
+		"avatar-for-display", &avatar_for_display,
+		"color", &color,
 		"display-name", &display_name,
-		"alias", &alias,
-		"color", &color,
 		"email", &email,
-		"phone-number", &phone_number,
-		"time-zone", &time_zone1,
+		"external", &external,
+		"favorite", &favorite,
+		"id", &id,
+		"name-for-display", &name_for_display,
 		"note", &note,
-		"avatar", &avatar1,
-		"presence", &presence1,
-		"tags", &tags,
+		"permission", &permission,
 		"person", &person1,
-		"permission", &permission,
+		"phone-number", &phone_number,
+		"presence", &presence1,
 		"sid", &sid,
-		"name-for-display", &name_for_display,
-		"favorite", &favorite,
-		"external", &external,
+		"tags", &tags,
+		"time-zone", &time_zone1,
+		"username", &username,
 		NULL);
 
-	/* Compare all the things. */
-	g_assert_cmpstr(id, ==, "id1");
-	g_assert_cmpstr(username, ==, "username");
+	g_assert_cmpstr(alias, ==, "alias");
+	g_clear_pointer(&alias, g_free);
+
+	g_assert_true(avatar1 == avatar);
+	g_clear_object(&avatar1);
+
+	g_assert_true(avatar_for_display == avatar);
+	g_clear_object(&avatar_for_display);
+
+	g_assert_cmpstr(color, ==, "#e9c636");
+	g_clear_pointer(&color, g_free);
+
 	g_assert_cmpstr(display_name, ==, "display-name");
-	g_assert_cmpstr(alias, ==, "alias");
-	g_assert_cmpstr(color, ==, "#e9c636");
+	g_clear_pointer(&display_name, g_free);
+
 	g_assert_cmpstr(email, ==, "pidgin@example.com");
+	g_clear_pointer(&email, g_free);
+
+	g_assert_true(external);
+
+	g_assert_true(favorite);
+
+	g_assert_cmpstr(id, ==, "id1");
+	g_clear_pointer(&id, g_free);
+
+	g_assert_cmpstr(name_for_display, ==, "alias");
+	g_clear_pointer(&name_for_display, g_free);
+
+	g_assert_cmpstr(note, ==, "message in a bottle");
+	g_clear_pointer(&note, g_free);
+
 	g_assert_cmpstr(phone_number, ==, "+10123456789");
+	g_clear_pointer(&phone_number, g_free);
+
+	g_assert_true(permission == PURPLE_CONTACT_INFO_PERMISSION_ALLOW);
+
+	g_assert_true(person1 == person);
+	g_clear_object(&person1);
+
+	g_assert_nonnull(presence1);
+	g_clear_object(&presence1);
+
+	g_assert_cmpstr(sid, ==, "sid");
+	g_clear_pointer(&sid, g_free);
+
+	g_assert_nonnull(tags);
+	g_clear_object(&tags);
+
 	g_assert_cmpstr(g_time_zone_get_identifier(time_zone1), ==,
 	                g_time_zone_get_identifier(time_zone));
-	g_assert_cmpstr(note, ==, "message in a bottle");
-	g_assert_cmpstr(name_for_display, ==, "alias");
-	g_assert_true(avatar1 == avatar);
-	g_assert_nonnull(presence1);
-	g_assert_nonnull(tags);
-	g_assert_true(person1 == person);
-	g_assert_true(permission == PURPLE_CONTACT_INFO_PERMISSION_ALLOW);
-	g_assert_cmpstr(sid, ==, "sid");
-	g_assert_true(favorite);
-	g_assert_true(external);
+	g_clear_pointer(&time_zone, g_time_zone_unref);
 
-	/* Free/unref all the things. */
-	g_clear_pointer(&id, g_free);
+	g_assert_cmpstr(username, ==, "username");
 	g_clear_pointer(&username, g_free);
-	g_clear_pointer(&display_name, g_free);
-	g_clear_pointer(&alias, g_free);
-	g_clear_pointer(&color, g_free);
-	g_clear_pointer(&email, g_free);
-	g_clear_pointer(&phone_number, g_free);
-	g_clear_pointer(&time_zone, g_time_zone_unref);
-	g_clear_pointer(&note, g_free);
-	g_clear_pointer(&name_for_display, g_free);
-	g_clear_pointer(&sid, g_free);
-	g_clear_object(&avatar1);
-	g_clear_object(&presence1);
-	g_clear_object(&tags);
+
 	g_clear_object(&person);
-	g_clear_object(&person1);
-
 	g_clear_object(&avatar);
 	g_clear_object(&info);
 }
 
+static void
+test_purple_contact_info_get_avatar_for_display(void) {
+	PurpleContactInfo *info = NULL;
+	PurpleImage *avatar1 = NULL;
+	PurpleImage *contact_avatar = NULL;
+	PurpleImage *person_avatar = NULL;
+	PurplePerson *person = NULL;
+
+	contact_avatar = g_object_new(PURPLE_TYPE_IMAGE, NULL);
+
+	info = purple_contact_info_new(NULL);
+	purple_contact_info_set_avatar(info, contact_avatar);
+
+	/* Make sure the contact info's avatar gets returned if there is no
+	 * associated person.
+	 */
+	avatar1 = purple_contact_info_get_avatar_for_display(info);
+	g_assert_true(avatar1 == contact_avatar);
+
+	/* Create a person and make sure we get the contact's avatar back. */
+	person = purple_person_new();
+	purple_person_add_contact_info(person, info);
+
+	avatar1 = purple_contact_info_get_avatar_for_display(info);
+	g_assert_true(avatar1 == contact_avatar);
+
+	/* Now set an avatar on the person and verify that it gets returned. */
+	person_avatar = g_object_new(PURPLE_TYPE_IMAGE, NULL);
+	purple_person_set_avatar(person, person_avatar);
+
+	avatar1 = purple_contact_info_get_avatar_for_display(info);
+	g_assert_true(avatar1 == person_avatar);
+
+	/* Remove the contact info from the person and verify that the contact
+	 * avatar gets returned again.
+	 */
+	purple_contact_info_set_person(info, NULL);
+
+	avatar1 = purple_contact_info_get_avatar_for_display(info);
+	g_assert_true(avatar1 == contact_avatar);
+
+	/* Cleanup */
+	g_assert_finalize_object(person);
+	g_assert_finalize_object(info);
+	g_assert_finalize_object(contact_avatar);
+	g_assert_finalize_object(person_avatar);
+}
+
 /******************************************************************************
  * get_name_for_display tests
  *****************************************************************************/
@@ -587,6 +654,9 @@
 	g_test_add_func("/contact-info/properties",
 	                test_purple_contact_info_properties);
 
+	g_test_add_func("/contact-info/get-avatar-for-display",
+	                test_purple_contact_info_get_avatar_for_display);
+
 	g_test_add_func("/contact-info/get_name_for_display/person_with_alias",
 	                test_purple_contact_info_get_name_for_display_person_with_alias);
 	g_test_add_func("/contact-info/get_name_for_display/contact_with_alias",

mercurial