From f1c03378119df64cbc66b4a0954160e0af4e48ed Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sat, 12 Nov 2022 01:42:06 +0100 Subject: [PATCH] Continued: - moved PersonalTitleUtils to proper package - added unit test for method PersonalTitleUtils.compare() - used own BooleanUtils class for null-safe comparison, Boolean.compare() seems to be not null-safe --- .../jcontacts/model/contact/UserContact.java | 6 +- .../title => utils}/PersonalTitleUtils.java | 31 ++++- .../contact/title/PersonalTitleUtilsTest.java | 121 ++++++++++++++++++ 3 files changed, 153 insertions(+), 5 deletions(-) rename src/org/mxchange/jcontacts/model/{contact/title => utils}/PersonalTitleUtils.java (76%) create mode 100644 test/org/mxchange/jcontacts/model/contact/title/PersonalTitleUtilsTest.java diff --git a/src/org/mxchange/jcontacts/model/contact/UserContact.java b/src/org/mxchange/jcontacts/model/contact/UserContact.java index a34c684..69bbe97 100644 --- a/src/org/mxchange/jcontacts/model/contact/UserContact.java +++ b/src/org/mxchange/jcontacts/model/contact/UserContact.java @@ -40,6 +40,8 @@ import javax.persistence.TemporalType; import javax.persistence.Transient; import org.apache.commons.lang3.StringUtils; import org.mxchange.jcontacts.model.contact.title.PersonalTitle; +import org.mxchange.jcontacts.model.utils.PersonalTitleUtils; +import org.mxchange.jcoreutils.bool.BooleanUtils; import org.mxchange.jcoreutils.comparable.ComparableUtils; import org.mxchange.jcoreutils.dates.DateUtils; import org.mxchange.jcoreutils.number.SafeNumberUtils; @@ -365,7 +367,7 @@ public class UserContact implements Contact { // ... extension StringUtils.compareIgnoreCase(this.getContactHouseNumberExtension(), contact.getContactHouseNumberExtension()), // ... now it is sure that address is different/same, continue with personal title - this.getContactPersonalTitle().compareTo(contact.getContactPersonalTitle()), + PersonalTitleUtils.compare(this.getContactPersonalTitle(), contact.getContactPersonalTitle()), // ... academical title StringUtils.compareIgnoreCase(this.getContactTitle(), contact.getContactTitle()), // .. family name ... @@ -377,7 +379,7 @@ public class UserContact implements Contact { // ... next birthday - year DateUtils.compareYearMonthDay(this.getContactBirthday(), contact.getContactBirthday()), // ... next "is own" flag - Boolean.compare(this.isOwnContact(), contact.isOwnContact()), + BooleanUtils.compare(this.isOwnContact(), contact.isOwnContact()), // ... next comment StringUtils.compare(this.getContactComment(), contact.getContactComment()) }; diff --git a/src/org/mxchange/jcontacts/model/contact/title/PersonalTitleUtils.java b/src/org/mxchange/jcontacts/model/utils/PersonalTitleUtils.java similarity index 76% rename from src/org/mxchange/jcontacts/model/contact/title/PersonalTitleUtils.java rename to src/org/mxchange/jcontacts/model/utils/PersonalTitleUtils.java index 419fb2a..eac8094 100644 --- a/src/org/mxchange/jcontacts/model/contact/title/PersonalTitleUtils.java +++ b/src/org/mxchange/jcontacts/model/utils/PersonalTitleUtils.java @@ -14,12 +14,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.mxchange.jcontacts.model.contact.title; +package org.mxchange.jcontacts.model.utils; import java.io.Serializable; import java.text.MessageFormat; -import java.util.LinkedList; -import java.util.List; +import java.util.Objects; +import org.mxchange.jcontacts.model.contact.title.PersonalTitle; /** * Title utilities class @@ -38,6 +38,31 @@ public class PersonalTitleUtils implements Serializable { */ private static char[] validChars; + /** + * Compares two PersonalTitle instances + *

+ * @param personalTitle1 PersonalTitle instance 1 + * @param personalTitle2 PersonalTitle instance 2 + *

+ * @return Comparison value + */ + public static int compare (final PersonalTitle personalTitle1, final PersonalTitle personalTitle2) { + // Check conditions + if (Objects.equals(personalTitle1, personalTitle2)) { + // Same instance + return 0; + } else if (null == personalTitle1) { + // Left side null + return -1; + } else if (null == personalTitle2) { + // Right side null + return 1; + } + + // Compare + return personalTitle1.compareTo(personalTitle2); + } + /** * Getter for personal title enumeration from given character *

diff --git a/test/org/mxchange/jcontacts/model/contact/title/PersonalTitleUtilsTest.java b/test/org/mxchange/jcontacts/model/contact/title/PersonalTitleUtilsTest.java new file mode 100644 index 0000000..aca2600 --- /dev/null +++ b/test/org/mxchange/jcontacts/model/contact/title/PersonalTitleUtilsTest.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2022 Roland Häder + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.mxchange.jcontacts.model.contact.title; + +import org.mxchange.jcontacts.model.utils.PersonalTitleUtils; +import org.testng.Assert; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +/** + * Test cases for PersonalTitleUtilsTest class + *

+ * @author Roland Häder + */ +public class PersonalTitleUtilsTest { + + private static final PersonalTitle PERSONAL_TITLE1 = PersonalTitle.MR; + + private static final PersonalTitle PERSONAL_TITLE2 = PersonalTitle.MRS; + + /** + * Default constructor + */ + public PersonalTitleUtilsTest () { + } + + @DataProvider (name = "different-personal-title-provider") + public PersonalTitle[][] createDifferentPersonalTitles () { + // Same instances + return new PersonalTitle[][]{ + { + PERSONAL_TITLE1, + PERSONAL_TITLE2 + }, { + PERSONAL_TITLE2, + PERSONAL_TITLE1 + } + }; + } + + @DataProvider (name = "left-null-personal-title-provider") + public PersonalTitle[][] createLeftNullPersonalTitles () { + // Same instances + return new PersonalTitle[][]{ + { + null, + PERSONAL_TITLE1 + }, { + null, + PERSONAL_TITLE2 + } + }; + } + + @DataProvider (name = "right-null-personal-title-provider") + public PersonalTitle[][] createRightNullPersonalTitles () { + // Same instances + return new PersonalTitle[][]{ + { + PERSONAL_TITLE1, + null + }, { + PERSONAL_TITLE2, + null + } + }; + } + + @DataProvider (name = "same-personal-title-provider") + public PersonalTitle[][] createSamePersonalTitles () { + // Same instances + return new PersonalTitle[][]{ + { + PERSONAL_TITLE1, + PERSONAL_TITLE1 + }, { + PERSONAL_TITLE2, + PERSONAL_TITLE2 + } + }; + } + + @Test (description = "Tests method PersonalTitleUtils.compare() with different instances", dataProvider = "different-personal-title-provider") + public void testDifferentPersonalTitle (final PersonalTitle personalTitle1, final PersonalTitle personalTitle2) { + // Should always return not zero + Assert.assertNotEquals(PersonalTitleUtils.compare(personalTitle1, personalTitle2), 0); + } + + @Test (description = "Tests method PersonalTitleUtils.compare() with left-null instances", dataProvider = "left-null-personal-title-provider") + public void testLeftNullPersonalTitle (final PersonalTitle personalTitle1, final PersonalTitle personalTitle2) { + // Should never return -1 + Assert.assertEquals(PersonalTitleUtils.compare(personalTitle1, personalTitle2), -1); + } + + @Test (description = "Tests method PersonalTitleUtils.compare() with right-null instances", dataProvider = "right-null-personal-title-provider") + public void testRightNullPersonalTitle (final PersonalTitle personalTitle1, final PersonalTitle personalTitle2) { + // Should never return 1 + Assert.assertEquals(PersonalTitleUtils.compare(personalTitle1, personalTitle2), 1); + } + + @Test (description = "Tests method PersonalTitleUtils.compare() with same instances", dataProvider = "same-personal-title-provider") + public void testSamePersonalTitle (final PersonalTitle personalTitle1, final PersonalTitle personalTitle2) { + // Should never return zero + Assert.assertEquals(PersonalTitleUtils.compare(personalTitle1, personalTitle2), 0); + } + +} -- 2.39.5