]> git.mxchange.org Git - jcountry-core.git/commitdiff
Continued:
authorRoland Häder <roland@mxchange.org>
Thu, 3 Nov 2022 05:53:07 +0000 (06:53 +0100)
committerRoland Häder <roland@mxchange.org>
Thu, 3 Nov 2022 05:53:07 +0000 (06:53 +0100)
- added TestNG 6.8.1
- added unit tests for CountryUtils utilities class
- added unit tests for CountryData being treated as a normal object (no entity)

lib/nblibraries.properties
lib/testng/testng-6.8.1-dist.jar [new file with mode: 0644]
nbproject/project.properties
test/org/mxchange/jcountrycore/CountryCoreTestSuite.xml [new file with mode: 0644]
test/org/mxchange/jcountrycore/test/model/data/CountryDataObjectTest.java [new file with mode: 0644]
test/org/mxchange/jcountrycore/test/model/utils/CountryUtilsTest.java [new file with mode: 0644]

index 7bb190c9fdb2f747f41268f43fb51cea3dca70d4..0687514d4e311d34073a162854f4e92186e96d92 100644 (file)
@@ -13,3 +13,7 @@ libs.jpa20-persistence.displayName=Persistence (JPA 2.1)
 libs.jpa20-persistence.javadoc=\
     https://docs.oracle.com/javaee/7/api/
 libs.jpa20-persistence.prop-maven-dependencies=org.eclipse.persistence:javax.persistence:2.1.0:jar
+libs.testng.classpath=\
+    ${base}/testng/testng-6.8.1-dist.jar
+libs.testng.displayName=TestNG 6.8.1
+libs.testng.prop-maven-dependencies=org.testng:testng:6.8.1:jar
diff --git a/lib/testng/testng-6.8.1-dist.jar b/lib/testng/testng-6.8.1-dist.jar
new file mode 100644 (file)
index 0000000..11f1304
Binary files /dev/null and b/lib/testng/testng-6.8.1-dist.jar differ
index 062c35fa46fede97828899723feb665ea95735e4..3bf093626cef78f8f9547bfc38c65a8882222cb8 100644 (file)
@@ -46,7 +46,8 @@ javac.source=1.7
 javac.target=1.7
 javac.test.classpath=\
     ${javac.classpath}:\
-    ${build.classes.dir}
+    ${build.classes.dir}:\
+    ${libs.testng.classpath}
 javac.test.processorpath=\
     ${javac.test.classpath}
 javadoc.additionalparam=
diff --git a/test/org/mxchange/jcountrycore/CountryCoreTestSuite.xml b/test/org/mxchange/jcountrycore/CountryCoreTestSuite.xml
new file mode 100644 (file)
index 0000000..d5a28b5
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
+<suite name="jcore-utils">
+       <!--
+       see examples at http://testng.org/doc/documentation-main.html#testng-xml
+
+       <suite-files>
+               <suite-file path="./junit-suite.xml" />
+       </suite-files>
+
+       <test name="TimeOut">
+               <classes>
+                       <class name="test.timeout.TimeOutTest" />
+                       <class name="test.timeout.TimeOutFromXmlTest"/>
+                       <class name="test.timeout.TimeOutThreadLocalSampleTest"/>
+               </classes>
+       </test>
+       -->
+       <test name="org.mxchange.jcountrycore.test suite">
+               <packages>
+                       <package name="org.mxchange.jcountrycore.test"/>
+               </packages>
+       </test>
+</suite>
diff --git a/test/org/mxchange/jcountrycore/test/model/data/CountryDataObjectTest.java b/test/org/mxchange/jcountrycore/test/model/data/CountryDataObjectTest.java
new file mode 100644 (file)
index 0000000..f8a8fc6
--- /dev/null
@@ -0,0 +1,371 @@
+/*
+ * Copyright (C) 2022 Roland Häder<roland@mxchange.org>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.jcountrycore.test.model.data;
+
+import java.util.Date;
+import org.mxchange.jcountry.model.data.Country;
+import org.mxchange.jcountry.model.data.CountryData;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Test cases for CountryData class as an object (no entity-related tests)
+ * <p>
+ * @author Roland Häder<roland@mxchange.org>
+ */
+public class CountryDataObjectTest {
+
+       private static final String ABROAD_DIAL_PREFIX = "+"; //NOI18N
+
+       private static final String COUNTRY_CODE = "DE"; //NOI18N
+
+       private static final String COUNTRY_I18N_KEY = "COUNTRY_GERMANY"; //NOI18N
+
+       private static final Short COUNTRY_PHONE_CODE0 = 0;
+
+       private static final Short COUNTRY_PHONE_CODE1 = 49;
+
+       private static final String EXTERNAL_DIAL_PREFIX = "0"; //NOI18N
+
+       /**
+        * Default constructor
+        */
+       public CountryDataObjectTest () {
+       }
+
+       @DataProvider (name = "same-country-provider")
+       public Object[][] createSameCountryObjectses () {
+               return new Object[][]{
+                       {new CountryData(), new CountryData()},
+                       {new CountryData(
+                               ABROAD_DIAL_PREFIX,
+                               COUNTRY_CODE,
+                               EXTERNAL_DIAL_PREFIX,
+                               COUNTRY_I18N_KEY,
+                               Boolean.TRUE,
+                               COUNTRY_PHONE_CODE1
+                               ), new CountryData(
+                        ABROAD_DIAL_PREFIX,
+                        COUNTRY_CODE,
+                        EXTERNAL_DIAL_PREFIX,
+                        COUNTRY_I18N_KEY,
+                        Boolean.TRUE,
+                        COUNTRY_PHONE_CODE1
+                        )}
+               };
+       }
+
+       @Test (description = "Tests method Country.compareTo() responding to a null reference", expectedExceptions = NullPointerException.class)
+       public void testCompareToNullReference () {
+               // Just a dummy ...
+               final Country country = new CountryData();
+
+               // This should cause a NPE with a non-empty message
+               country.compareTo(null);
+       }
+
+       @Test (description = "Tests method Country.compareTo() responding to same country data", dataProvider = "same-country-provider")
+       public void testCompareToSameCountryData (final Country country1, final Country country2) {
+               // Should always be 0
+               Assert.assertEquals(country1.compareTo(country2), 0);
+       }
+
+       @Test (description = "Tests method Country.compareTo() responding to same instance ")
+       public void testCompareToSameInstance () {
+               final Country country1 = new CountryData();
+               Assert.assertEquals(country1.compareTo(country1), 0);
+       }
+
+       @Test (description = "Tests constructor with abroadDialPrefix being empty", expectedExceptions = IllegalArgumentException.class)
+       public void testConstructorEmptyAbroadDialPrefix () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         "", //NOI18N
+                                         COUNTRY_CODE,
+                                         EXTERNAL_DIAL_PREFIX,
+                                         COUNTRY_I18N_KEY,
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be empty and if so must cause an IAE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with countryCodde being empty", expectedExceptions = IllegalArgumentException.class)
+       public void testConstructorEmptyCountryCode () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         "", //NOI18N
+                                         EXTERNAL_DIAL_PREFIX,
+                                         COUNTRY_I18N_KEY,
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be empty and if so must cause an IAE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with countryI18nKey being empty", expectedExceptions = IllegalArgumentException.class)
+       public void testConstructorEmptyCountryI18nKey () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         COUNTRY_CODE,
+                                         EXTERNAL_DIAL_PREFIX,
+                                         "", //NOI18N
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be empty and if so must cause an IAE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with countryExternalDialPrefix being empty", expectedExceptions = IllegalArgumentException.class)
+       public void testConstructorEmptyExternalDialPrefix () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         COUNTRY_CODE,
+                                         "", //NOI18N
+                                         COUNTRY_I18N_KEY,
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be invalid and if so must cause an IAE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with invalid countryPhoneCode", expectedExceptions = IllegalArgumentException.class)
+       public void testConstructorInvalidCountryPhoneCode () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         COUNTRY_CODE,
+                                         EXTERNAL_DIAL_PREFIX,
+                                         COUNTRY_I18N_KEY, //NOI18N
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE0
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be invalid or else an E being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with abroadDialPrefix being null", expectedExceptions = NullPointerException.class)
+       public void testConstructorNullAbroadDialPrefix () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         null,
+                                         COUNTRY_CODE,
+                                         EXTERNAL_DIAL_PREFIX,
+                                         COUNTRY_I18N_KEY,
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be null and if so must cause a NPE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with countryCodde being null", expectedExceptions = NullPointerException.class)
+       public void testConstructorNullCountryCode () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         null,
+                                         EXTERNAL_DIAL_PREFIX,
+                                         COUNTRY_I18N_KEY,
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be null and if so must cause a NPE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with countryI18nKey being null", expectedExceptions = NullPointerException.class)
+       public void testConstructorNullCountryI18nKey () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         COUNTRY_CODE,
+                                         EXTERNAL_DIAL_PREFIX,
+                                         null,
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be null and if so must cause a NPE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with countryIsLocalPrefixRequired being null", expectedExceptions = NullPointerException.class)
+       public void testConstructorNullCountryIsLocalPrefixRequired () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         COUNTRY_CODE,
+                                         EXTERNAL_DIAL_PREFIX,
+                                         COUNTRY_I18N_KEY,
+                                         null,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be null and if so must cause a NPE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with countryPhoneCode being null", expectedExceptions = NullPointerException.class)
+       public void testConstructorNullCountryPhoneCode () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         COUNTRY_CODE,
+                                         EXTERNAL_DIAL_PREFIX,
+                                         COUNTRY_I18N_KEY,
+                                         Boolean.TRUE,
+                                         null
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be null and if so must cause a NPE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests constructor with countryExternalDialPrefix being null", expectedExceptions = NullPointerException.class)
+       public void testConstructorNullExternalDialPrefix () {
+               // Should throw a NPE
+               final Country country = new CountryData(
+                                         ABROAD_DIAL_PREFIX,
+                                         COUNTRY_CODE,
+                                         null,
+                                         COUNTRY_I18N_KEY,
+                                         Boolean.TRUE,
+                                         COUNTRY_PHONE_CODE1
+                         );
+
+               // NEVER REACHED!
+               Assert.fail("The required parameter must never be null and if so must cause a NPE being thrown: country=" + country); //NOI18N
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when a null reference is provided")
+       @SuppressWarnings ("ObjectEqualsNull")
+       public void testEqualsNullReference () {
+               final Country country = new CountryData();
+               Assert.assertFalse(country.equals(null));
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when an other object is provided")
+       public void testEqualsOtherObject () {
+               final Country country = new CountryData();
+               Assert.assertFalse(country.equals(new Object()));
+       }
+
+       @Test (description = "Tests if Country.equals() returns true when same instance is provided")
+       public void testEqualsSameInstance () {
+               final Country country = new CountryData();
+               Assert.assertTrue(country.equals(country));
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when a field has been changed to an other value", dataProvider = "same-country-provider")
+       public void testEqualsDifferentAbroadDialPrefix (final Country country1, final Country country2) {
+               // First change countryAbroadDialPrefix to something else
+               country1.setCountryAbroadDialPrefix("++"); //NOI18N
+               Assert.assertFalse(country1.equals(country2));
+               country1.setCountryAbroadDialPrefix(ABROAD_DIAL_PREFIX);
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when a field has been changed to an other value", dataProvider = "same-country-provider")
+       public void testEqualsDifferentCountryCode (final Country country1, final Country country2) {
+               // Next is countryCode
+               country1.setCountryCode("XX"); //NOI18N
+               Assert.assertFalse(country1.equals(country2));
+               country1.setCountryCode(COUNTRY_CODE);
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when a field has been changed to an other value", dataProvider = "same-country-provider")
+       public void testEqualsDifferentExternalDialPrefix (final Country country1, final Country country2) {
+               // Next is countryExternalDialPrefix
+               country1.setCountryExternalDialPrefix("00"); //NOI18N
+               Assert.assertFalse(country1.equals(country2));
+               country1.setCountryCode(EXTERNAL_DIAL_PREFIX);
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when a field has been changed to an other value", dataProvider = "same-country-provider")
+       public void testEqualsDifferentI18nKey (final Country country1, final Country country2) {
+               // Next is countryI18nKey
+               country1.setCountryI18nKey("COUNTRY_XX"); //NOI18N
+               Assert.assertFalse(country1.equals(country2));
+               country1.setCountryI18nKey(COUNTRY_I18N_KEY);
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when a field has been changed to an other value", dataProvider = "same-country-provider")
+       public void testEqualsDifferentCountryId (final Country country1, final Country country2) {
+               // Next is countryId
+               country1.setCountryId(1l); //NOI18N
+               Assert.assertFalse(country1.equals(country2));
+               country1.setCountryId(null);
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when a field has been changed to an other value", dataProvider = "same-country-provider")
+       public void testEqualsDifferentIsLocalDialPrefixRequired (final Country country1, final Country country2) {
+               // Next is countryId
+               country1.setCountryIsLocalPrefixRequired(Boolean.FALSE);
+               Assert.assertFalse(country1.equals(country2));
+               country1.setCountryIsLocalPrefixRequired(Boolean.TRUE);
+       }
+
+       @Test (description = "Tests if Country.equals() returns false when a field has been changed to an other value", dataProvider = "same-country-provider")
+       public void testEqualsDifferentPhoneCode (final Country country1, final Country country2) {
+               // Next is countryId
+               country1.setCountryPhoneCode(COUNTRY_PHONE_CODE0);
+               Assert.assertFalse(country1.equals(country2));
+               country1.setCountryPhoneCode(COUNTRY_PHONE_CODE1);
+       }
+
+       @Test (description = "Tests Country.countryEntryCreated getter/setter")
+       public void testCountryEntryCreated () {
+               // Empty instance
+               final Country country = new CountryData();
+               final Date date = new Date();
+
+               // Set it
+               country.setCountryEntryCreated(date);
+
+               // Should be the same!
+               Assert.assertEquals(country.getCountryEntryCreated(), date);
+       }
+
+       @Test (description = "Tests Country.countryEntryUpdated getter/setter")
+       public void testCountryEntryUpdated () {
+               // Empty instance
+               final Country country = new CountryData();
+               final Date date = new Date();
+
+               // Set it
+               country.setCountryEntryUpdated(date);
+
+               // Should be the same!
+               Assert.assertEquals(country.getCountryEntryUpdated(), date);
+       }
+
+}
diff --git a/test/org/mxchange/jcountrycore/test/model/utils/CountryUtilsTest.java b/test/org/mxchange/jcountrycore/test/model/utils/CountryUtilsTest.java
new file mode 100644 (file)
index 0000000..65bd817
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2022 Roland Häder<roland@mxchange.org>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.jcountrycore.test.model.utils;
+
+import org.mxchange.jcountry.model.data.Country;
+import org.mxchange.jcountry.model.data.CountryData;
+import org.mxchange.jcountry.model.utils.CountryUtils;
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Test cases for CountryUtils class
+ * <p>
+ * @author Roland Häder<roland@mxchange.org>
+ */
+public class CountryUtilsTest {
+
+       private static final String ABROAD_DIAL_PREFIX = "+"; //NOI18N
+
+       private static final String COUNTRY_CODE = "DE"; //NOI18N
+
+       private static final String COUNTRY_I18N_KEY = "COUNTRY_GERMANY"; //NOI18N
+
+       private static final Short COUNTRY_PHONE_CODE1 = 49;
+
+       private static final Short COUNTRY_PHONE_CODE2 = 1;
+
+       private static final String EXTERNAL_DIAL_PREFIX = "0"; //NOI18N
+
+       /**
+        * Default constructor
+        */
+       public CountryUtilsTest () {
+       }
+
+       @DataProvider (name = "different-country-provider")
+       public Object[][] createDifferentCountryObjectses () {
+               return new Object[][]{
+                       {new CountryData(
+                               ABROAD_DIAL_PREFIX,
+                               "US", //NOI18N
+                               EXTERNAL_DIAL_PREFIX,
+                               "COUNTRY_USA", //NOI18N
+                               Boolean.TRUE,
+                               COUNTRY_PHONE_CODE2
+                               ), new CountryData(
+                        ABROAD_DIAL_PREFIX,
+                        COUNTRY_CODE,
+                        EXTERNAL_DIAL_PREFIX,
+                        COUNTRY_I18N_KEY,
+                        Boolean.TRUE,
+                        COUNTRY_PHONE_CODE1
+                        )}
+               };
+       }
+
+       @DataProvider (name = "left-null-country-provider")
+       public Object[][] createLeftNullCountryObjectses () {
+               return new Object[][]{
+                       {null, new CountryData()},
+                       {null, new CountryData(
+                        ABROAD_DIAL_PREFIX,
+                        COUNTRY_CODE,
+                        EXTERNAL_DIAL_PREFIX,
+                        COUNTRY_I18N_KEY,
+                        Boolean.TRUE,
+                        COUNTRY_PHONE_CODE1
+                        )}
+               };
+       }
+
+       @DataProvider (name = "right-null-country-provider")
+       public Object[][] createRightNullCountryObjectses () {
+               return new Object[][]{
+                       {new CountryData(), null},
+                       {new CountryData(
+                               ABROAD_DIAL_PREFIX,
+                               COUNTRY_CODE,
+                               EXTERNAL_DIAL_PREFIX,
+                               COUNTRY_I18N_KEY,
+                               Boolean.TRUE,
+                               COUNTRY_PHONE_CODE1
+                               ), null}
+               };
+       }
+
+       @DataProvider (name = "same-country-provider")
+       public Object[][] createSameCountryObjectses () {
+               return new Object[][]{
+                       {new CountryData(), new CountryData()},
+                       {new CountryData(
+                               ABROAD_DIAL_PREFIX,
+                               COUNTRY_CODE,
+                               EXTERNAL_DIAL_PREFIX,
+                               COUNTRY_I18N_KEY,
+                               Boolean.TRUE,
+                               COUNTRY_PHONE_CODE1
+                               ), new CountryData(
+                        ABROAD_DIAL_PREFIX,
+                        COUNTRY_CODE,
+                        EXTERNAL_DIAL_PREFIX,
+                        COUNTRY_I18N_KEY,
+                        Boolean.TRUE,
+                        COUNTRY_PHONE_CODE1
+                        )}
+               };
+       }
+
+       @Test (description = "Tests the CountryUtils.compare() method with different country data", dataProvider = "different-country-provider")
+       public void testCompareDifferent (final Country country1, final Country country2) {
+               // Expect 1 always, as right side is higher
+               Assert.assertEquals(CountryUtils.compare(country1, country2), 1);
+       }
+
+       @Test (description = "Tests the CountryUtils.compare() method with left-side being null and other country data", dataProvider = "left-null-country-provider")
+       public void testCompareLeftNull (final Country country1, final Country country2) {
+               // Expect -1 always
+               Assert.assertEquals(CountryUtils.compare(country1, country2), -1);
+       }
+
+       @Test (description = "Tests the CountryUtils.compare() method with right-side being null and other country data", dataProvider = "right-null-country-provider")
+       public void testCompareRightNull (final Country country1, final Country country2) {
+               // Expect 1 always
+               Assert.assertEquals(CountryUtils.compare(country1, country2), 1);
+       }
+
+       @Test (description = "Tests the CountryUtils.compare() method with same country data", dataProvider = "same-country-provider")
+       public void testCompareSame (final Country country1, final Country country2) {
+               // Expect 0 always
+               Assert.assertEquals(CountryUtils.compare(country1, country2), 0);
+       }
+
+       @Test (description = "Tests the CountryUtils.copyCountryData() method with different instances", dataProvider = "different-country-provider")
+       public void testCopyCountryDifferentInstances (final Country country1, final Country country2) {
+               CountryUtils.copyCountryData(country1, country2);
+       }
+
+       @Test (description = "Tests the CountryUtils.copyCountryData() method with same instances", dataProvider = "same-country-provider", expectedExceptions = IllegalArgumentException.class)
+       public void testCopyCountrySameInstances (final Country country1, final Country country2) {
+               CountryUtils.copyCountryData(country1, country2);
+       }
+
+       @Test (description = "Tests the CountryUtils.copyCountryData() method with source null reference", dataProvider = "left-null-country-provider", expectedExceptions = NullPointerException.class)
+       public void testCopyCountrySourceNull (final Country country1, final Country country2) {
+               CountryUtils.copyCountryData(country1, country2);
+       }
+
+       @Test (description = "Tests the CountryUtils.copyCountryData() method with target null reference", dataProvider = "right-null-country-provider", expectedExceptions = NullPointerException.class)
+       public void testCopyCountryTargetNull (final Country country1, final Country country2) {
+               CountryUtils.copyCountryData(country1, country2);
+       }
+
+}