package org.yajul.util; import org.junit.Test; import org.yajul.serialization.SerializationHelper; import static org.junit.Assert.*; import java.util.Date; /** * Tests CompoundKey. * <hr> * User: jdavis<br> * Date: May 27, 2004<br> * Time: 8:18:48 PM<br> * * @author jdavis */ public class CompoundKeyTest { @Test public void testEquality() { CompoundKey a = new CompoundKey("foo", 33, new Date(0)); CompoundKey b = new CompoundKey("foo", 33, new Date(0)); checkEquality(a, b); } @Test public void testArrayConstructor() { Object[] array = new Object[] {"foo", 33, new Date(0) }; CompoundKey a = new CompoundKey(array); CompoundKey b = new CompoundKey(array); checkEquality(a,b); } @Test public void testSerialization() throws Exception { CompoundKey a = new CompoundKey("foo", new Integer(33), new Date(0)); CompoundKey b = SerializationHelper.serialClone(a); checkEquality(a,b); } private void checkEquality(CompoundKey a, CompoundKey b) { assertNotSame(a,b); assertEquals("foo", a.getComponent(0)); assertEquals(33, a.getComponent(1)); assertEquals(new Date(0), a.getComponent(2)); assertEquals("foo", b.getComponent(0)); assertEquals(b.getComponent(1), 33); assertEquals(new Date(0), b.getComponent(2)); assertEquals(3, a.size()); assertEquals(3, b.size()); String s = a.toString(); assertNotNull(s); assertTrue(s.length() > 0); assertCompoundKeyEquals(a, b); } @Test public void testEquality2() { CompoundKey a = new CompoundKey("foo", new Integer(33), new Date(0), new Double(0.0)); CompoundKey b = new CompoundKey("foo", new Integer(33), new Date(0), new Double(0.0)); assertEquals("foo", a.getComponent(0)); assertEquals(new Integer(33), a.getComponent(1)); assertEquals(new Date(0), a.getComponent(2)); assertEquals("foo", b.getComponent(0)); assertEquals(new Integer(33), b.getComponent(1)); assertEquals(new Date(0), b.getComponent(2)); assertEquals(4, a.size()); assertEquals(4, b.size()); assertCompoundKeyEquals(a, b); } private void assertCompoundKeyEquals(CompoundKey a, CompoundKey b) { assertTrue(a.equals(b)); assertTrue(b.equals(a)); assertEquals(a.hashCode(), b.hashCode()); assertEquals(0, a.compareTo(b)); assertEquals(0, b.compareTo(a)); } @Test public void testInequality() { CompoundKey a = new CompoundKey("foo", new Integer(33), new Date(0)); CompoundKey b = new CompoundKey("foob", new Integer(33), new Date(0)); assertTrue(!a.equals(b)); assertTrue(!b.equals(a)); assertTrue(a.compareTo(b) != 0); assertTrue(b.compareTo(a) != 0); } @Test public void testInequality2() { CompoundKey a = new CompoundKey("foo", new Integer(33), new Date(0)); CompoundKey b = new CompoundKey("foo", new Integer(34), new Date(0)); assertTrue(!a.equals(b)); assertTrue(!b.equals(a)); assertTrue(a.compareTo(b) != 0); assertTrue(b.compareTo(a) != 0); } @Test public void testInequality3() { CompoundKey a = new CompoundKey("foo", new Integer(33), new Date(0)); CompoundKey b = new CompoundKey("foo", new Integer(33), new Date(12)); assertTrue(!a.equals(b)); assertTrue(!b.equals(a)); assertTrue(a.compareTo(b) != 0); assertTrue(b.compareTo(a) != 0); } @Test public void testDifferingLengths() { CompoundKey a = new CompoundKey("foo", new Integer(33), new Date(0)); CompoundKey b = new CompoundKey("foo", new Integer(33)); assertTrue(!a.equals(b)); assertTrue(!b.equals(a)); assertTrue(a.compareTo(b) != 0); assertTrue(b.compareTo(a) != 0); } @Test public void testClone() throws Exception { CompoundKey a = new CompoundKey("foo", new Integer(33), new Date(0)); CompoundKey b = (CompoundKey) a.clone(); assertCompoundKeyEquals(a, b); assertTrue(a != b); // These should be different objects! } @Test public void testExceptions() throws Exception { IllegalArgumentException iae = null; try { new CompoundKey(new Object[]{"foo", new Integer(33), new Date(0), null}); } catch (IllegalArgumentException e) { iae = e; } assertNotNull(iae); iae = null; try { new CompoundKey(null); } catch (IllegalArgumentException e) { iae = e; } assertNotNull(iae); iae = null; try { new CompoundKey(); } catch (IllegalArgumentException e) { iae = e; } assertNotNull(iae); iae = null; try { new CompoundKey(new Object[0]); } catch (IllegalArgumentException e) { iae = e; } assertNotNull(iae); } }