JAMES-2167 Correct MailAdress equals
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/09b5cb56 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/09b5cb56 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/09b5cb56 Branch: refs/heads/master Commit: 09b5cb567e3292b1739993559bc93d37bd99a478 Parents: ec911c1 Author: Benoit Tellier <[email protected]> Authored: Tue Aug 21 10:31:02 2018 +0700 Committer: Antoine Duprat <[email protected]> Committed: Thu Aug 23 13:59:17 2018 +0200 ---------------------------------------------------------------------- .../java/org/apache/james/core/MailAddress.java | 30 +++++++++++++++----- .../org/apache/james/core/MailAddressTest.java | 16 +++++++++++ 2 files changed, 39 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/09b5cb56/core/src/main/java/org/apache/james/core/MailAddress.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/james/core/MailAddress.java b/core/src/main/java/org/apache/james/core/MailAddress.java index e53f5bc..cd206ef 100644 --- a/core/src/main/java/org/apache/james/core/MailAddress.java +++ b/core/src/main/java/org/apache/james/core/MailAddress.java @@ -20,6 +20,8 @@ package org.apache.james.core; import java.util.Locale; +import java.util.Objects; +import java.util.Optional; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; @@ -108,11 +110,12 @@ public class MailAddress implements java.io.Serializable { return NULL_SENDER; } - private String localPart = null; - private Domain domain = null; + private final String localPart; + private final Domain domain; private MailAddress() { - + localPart = null; + domain = null; } /** @@ -317,7 +320,9 @@ public class MailAddress implements java.io.Serializable { @Override public String toString() { - return localPart + "@" + domain.asString(); + return localPart + "@" + Optional.ofNullable(domain) + .map(Domain::asString) + .orElse(""); } public String asPrettyString() { @@ -350,7 +355,7 @@ public class MailAddress implements java.io.Serializable { * @returns true if the given object is equal to this one, false otherwise */ @Override - public boolean equals(Object obj) { + public final boolean equals(Object obj) { if (obj == null) { return false; } else if (obj instanceof String) { @@ -361,11 +366,22 @@ public class MailAddress implements java.io.Serializable { if (isNullSender() && addr.isNullSender()) { return true; } - return getLocalPart().equalsIgnoreCase(addr.getLocalPart()) && getDomain().equals(addr.getDomain()); + return equalsIgnoreCase(getLocalPart(), addr.getLocalPart()) + && Objects.equals(getDomain(), addr.getDomain()); } return false; } + private boolean equalsIgnoreCase(String a, String b) { + if (a == null ^ b == null) { + return false; + } + if (a == null) { + return true; + } + return a.equalsIgnoreCase(b); + } + /** * Returns a hash code value for this object. * <p/> @@ -376,7 +392,7 @@ public class MailAddress implements java.io.Serializable { * @return the hashcode. */ @Override - public int hashCode() { + public final int hashCode() { return toString().toLowerCase(Locale.US).hashCode(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/09b5cb56/core/src/test/java/org/apache/james/core/MailAddressTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/james/core/MailAddressTest.java b/core/src/test/java/org/apache/james/core/MailAddressTest.java index edb1cfa..f7cfc02 100644 --- a/core/src/test/java/org/apache/james/core/MailAddressTest.java +++ b/core/src/test/java/org/apache/james/core/MailAddressTest.java @@ -19,6 +19,8 @@ package org.apache.james.core; +import static org.assertj.core.api.Assertions.assertThat; + import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; @@ -26,6 +28,8 @@ import org.assertj.core.api.Assertions; import org.junit.Assert; import org.junit.Test; +import nl.jqno.equalsverifier.EqualsVerifier; + public class MailAddressTest { private static final String GOOD_LOCAL_PART = "\"quoted@local part\""; @@ -222,4 +226,16 @@ public class MailAddressTest { Assert.assertTrue(a.toString() + " != " + b.toString(), a.equals(b)); Assert.assertFalse(a.toString() + " != " + null, a.equals(null)); } + + @Test + public void equalsShouldReturnTrueWhenBothNullSender() { + assertThat(MailAddress.nullSender()) + .isEqualTo(MailAddress.nullSender()); + } + + @Test + public void shouldMatchBeanContract() { + EqualsVerifier.forClass(MailAddress.class) + .verify(); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
