Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@www.apache.org Received: (qmail 12523 invoked from network); 1 Jun 2004 21:08:59 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 1 Jun 2004 21:08:59 -0000 Received: (qmail 50442 invoked by uid 500); 1 Jun 2004 21:09:09 -0000 Delivered-To: apmail-jakarta-commons-dev-archive@jakarta.apache.org Received: (qmail 50371 invoked by uid 500); 1 Jun 2004 21:09:08 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 50355 invoked by uid 500); 1 Jun 2004 21:09:08 -0000 Received: (qmail 50341 invoked by uid 99); 1 Jun 2004 21:09:07 -0000 Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.27.1) with SMTP; Tue, 01 Jun 2004 14:09:07 -0700 Received: (qmail 12469 invoked by uid 1529); 1 Jun 2004 21:08:48 -0000 Date: 1 Jun 2004 21:08:48 -0000 Message-ID: <20040601210848.12468.qmail@minotaur.apache.org> From: scolebourne@apache.org To: jakarta-commons-cvs@apache.org Subject: cvs commit: jakarta-commons/lang/src/test/org/apache/commons/lang ObjectUtilsTest.java X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N scolebourne 2004/06/01 14:08:48 Modified: lang/src/java/org/apache/commons/lang ObjectUtils.java lang/src/test/org/apache/commons/lang ObjectUtilsTest.java Log: Add ObjectUtils.hashCode() - a null safe hash code bug 28554, from Mario Winterer Revision Changes Path 1.24 +20 -2 jakarta-commons/lang/src/java/org/apache/commons/lang/ObjectUtils.java Index: ObjectUtils.java =================================================================== RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/ObjectUtils.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- ObjectUtils.java 18 Feb 2004 22:59:50 -0000 1.23 +++ ObjectUtils.java 1 Jun 2004 21:08:48 -0000 1.24 @@ -29,6 +29,7 @@ * @author Daniel Rall * @author Stephen Colebourne * @author Gary Gregory + * @author Mario Winterer * @since 1.0 * @version $Id$ */ @@ -113,7 +114,24 @@ } return object1.equals(object2); } - + + /** + *

Gets the hash code of an object returning zero when the + * object is null.

+ * + *
  +     * ObjectUtils.hashCode(null)   = 0
  +     * ObjectUtils.hashCode(obj)    = obj.hashCode()
  +     * 
+ * + * @param obj the object to obtain the hash code of, may be null + * @return the hash code of the object, or zero if null + * @since 2.1 + */ + public static int hashCode(Object obj) { + return ((obj == null) ? 0 : obj.hashCode()); + } + // Identity ToString //----------------------------------------------------------------------- /** 1.13 +46 -41 jakarta-commons/lang/src/test/org/apache/commons/lang/ObjectUtilsTest.java Index: ObjectUtilsTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/lang/src/test/org/apache/commons/lang/ObjectUtilsTest.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- ObjectUtilsTest.java 18 Feb 2004 23:06:19 -0000 1.12 +++ ObjectUtilsTest.java 1 Jun 2004 21:08:48 -0000 1.13 @@ -84,46 +84,51 @@ assertTrue("ObjectUtils.equals(\"foo\", \"foo\") returned false", ObjectUtils.equals(FOO, FOO)); } - /** - * Show that java.util.Date and java.sql.Timestamp are apples and oranges. - * Prompted by an email discussion. - * - * The behavior is different b/w Sun Java 1.3.1_10 and 1.4.2_03. - */ - public void testDateEqualsJava() { - long now = 1076957313284L; // Feb 16, 2004 10:49... PST - java.util.Date date = new java.util.Date(now); - java.sql.Timestamp realTimestamp = new java.sql.Timestamp(now); - java.util.Date timestamp = realTimestamp; - // sanity check 1: - assertEquals(284000000, realTimestamp.getNanos()); - assertEquals(1076957313284L, date.getTime()); - // - // On Sun 1.3.1_10: - //junit.framework.AssertionFailedError: expected:<1076957313284> but was:<1076957313000> - // - //assertEquals(1076957313284L, timestamp.getTime()); - // - //junit.framework.AssertionFailedError: expected:<1076957313284> but was:<1076957313000> - // - //assertEquals(1076957313284L, realTimestamp.getTime()); - // sanity check 2: - assertEquals(date.getDay(), realTimestamp.getDay()); - assertEquals(date.getHours(), realTimestamp.getHours()); - assertEquals(date.getMinutes(), realTimestamp.getMinutes()); - assertEquals(date.getMonth(), realTimestamp.getMonth()); - assertEquals(date.getSeconds(), realTimestamp.getSeconds()); - assertEquals(date.getTimezoneOffset(), realTimestamp.getTimezoneOffset()); - assertEquals(date.getYear(), realTimestamp.getYear()); - // - // Time values are == and equals() on Sun 1.4.2_03 but NOT on Sun 1.3.1_10: - // - //assertFalse("Sanity check failed: date.getTime() == timestamp.getTime()", date.getTime() == timestamp.getTime()); - //assertFalse("Sanity check failed: timestamp.equals(date)", timestamp.equals(date)); - //assertFalse("Sanity check failed: date.equals(timestamp)", date.equals(timestamp)); - // real test: - //assertFalse("java.util.Date and java.sql.Timestamp should be equal", ObjectUtils.equals(date, timestamp)); + public void testHashCode() { + assertEquals(0, ObjectUtils.hashCode(null)); + assertEquals("a".hashCode(), ObjectUtils.hashCode("a")); } + +// /** +// * Show that java.util.Date and java.sql.Timestamp are apples and oranges. +// * Prompted by an email discussion. +// * +// * The behavior is different b/w Sun Java 1.3.1_10 and 1.4.2_03. +// */ +// public void testDateEqualsJava() { +// long now = 1076957313284L; // Feb 16, 2004 10:49... PST +// java.util.Date date = new java.util.Date(now); +// java.sql.Timestamp realTimestamp = new java.sql.Timestamp(now); +// java.util.Date timestamp = realTimestamp; +// // sanity check 1: +// assertEquals(284000000, realTimestamp.getNanos()); +// assertEquals(1076957313284L, date.getTime()); +// // +// // On Sun 1.3.1_10: +// //junit.framework.AssertionFailedError: expected:<1076957313284> but was:<1076957313000> +// // +// //assertEquals(1076957313284L, timestamp.getTime()); +// // +// //junit.framework.AssertionFailedError: expected:<1076957313284> but was:<1076957313000> +// // +// //assertEquals(1076957313284L, realTimestamp.getTime()); +// // sanity check 2: +// assertEquals(date.getDay(), realTimestamp.getDay()); +// assertEquals(date.getHours(), realTimestamp.getHours()); +// assertEquals(date.getMinutes(), realTimestamp.getMinutes()); +// assertEquals(date.getMonth(), realTimestamp.getMonth()); +// assertEquals(date.getSeconds(), realTimestamp.getSeconds()); +// assertEquals(date.getTimezoneOffset(), realTimestamp.getTimezoneOffset()); +// assertEquals(date.getYear(), realTimestamp.getYear()); +// // +// // Time values are == and equals() on Sun 1.4.2_03 but NOT on Sun 1.3.1_10: +// // +// //assertFalse("Sanity check failed: date.getTime() == timestamp.getTime()", date.getTime() == timestamp.getTime()); +// //assertFalse("Sanity check failed: timestamp.equals(date)", timestamp.equals(date)); +// //assertFalse("Sanity check failed: date.equals(timestamp)", date.equals(timestamp)); +// // real test: +// //assertFalse("java.util.Date and java.sql.Timestamp should be equal", ObjectUtils.equals(date, timestamp)); +// } public void testIdentityToString() { assertEquals(null, ObjectUtils.identityToString(null)); --------------------------------------------------------------------- To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: commons-dev-help@jakarta.apache.org