/*
* ====================
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License("CDDL") (the "License"). You may not use this file
* except in compliance with the License.
*
* You can obtain a copy of the License at
* http://opensource.org/licenses/cddl1.php
* See the License for the specific language governing permissions and limitations
* under the License.
*
* When distributing the Covered Code, include this CDDL Header Notice in each file
* and include the License file at http://opensource.org/licenses/cddl1.php.
* If applicable, add the following below this CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
* ====================
*/
package org.identityconnectors.common;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import org.testng.Assert;
import org.testng.annotations.Test;
public class EqualsHashCodeBuilderTests {
@Test
public void testObject() {
TestObject o1 = new TestObject(2);
TestObject o2 = new TestObject(2);
TestObject o3 = new TestObject(3);
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testLong() {
long o1 = 1L;
long o2 = 1L;
long o3 = 2L;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testInt() {
int o1 = 1;
int o2 = 1;
int o3 = 3;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testShort() {
short o1 = 1;
short o2 = 1;
short o3 = 3;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testChar() {
char o1 = 'a';
char o2 = 'a';
char o3 = 'c';
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testByte() {
byte o1 = 1;
byte o2 = 1;
byte o3 = 3;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testDouble() {
double o1 = 1;
double o2 = 1;
double o3 = 2;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testFloat() {
float o1 = 1;
float o2 = 1;
float o3 = 2;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testBoolean() {
boolean o1 = true;
boolean o2 = true;
boolean o3 = false;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testObjectArray() {
TestObject[] o1 = new TestObject[3];
o1[0] = new TestObject(4);
o1[1] = new TestObject(5);
o1[2] = null;
TestObject[] o2 = new TestObject[3];
o2[0] = new TestObject(4);
o2[1] = new TestObject(5);
o2[2] = null;
TestObject[] o3 = new TestObject[3];
o3[0] = new TestObject(5);
o3[1] = new TestObject(5);
o3[2] = null;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testLongArray() {
long[] o1 = new long[2];
o1[0] = 5L;
o1[1] = 6L;
long[] o2 = new long[2];
o2[0] = 5L;
o2[1] = 6L;
long[] o3 = new long[2];
o3[0] = 6L;
o3[1] = 6L;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testIntArray() {
int[] o1 = new int[2];
o1[0] = 5;
o1[1] = 6;
int[] o2 = new int[2];
o2[0] = 5;
o2[1] = 6;
int[] o3 = new int[2];
o3[0] = 6;
o3[1] = 6;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testShortArray() {
short[] o1 = new short[2];
o1[0] = 5;
o1[1] = 6;
short[] o2 = new short[2];
o2[0] = 5;
o2[1] = 6;
short[] o3 = new short[2];
o3[0] = 6;
o3[1] = 6;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testCharArray() {
char[] o1 = new char[2];
o1[0] = 5;
o1[1] = 6;
char[] o2 = new char[2];
o2[0] = 5;
o2[1] = 6;
char[] o3 = new char[2];
o3[0] = 6;
o3[1] = 6;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testByteArray() {
byte[] o1 = new byte[2];
o1[0] = 5;
o1[1] = 6;
byte[] o2 = new byte[2];
o2[0] = 5;
o2[1] = 6;
byte[] o3 = new byte[2];
o3[0] = 6;
o3[1] = 6;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testDoubleArray() {
double[] o1 = new double[2];
o1[0] = 5;
o1[1] = 6;
double[] o2 = new double[2];
o2[0] = 5;
o2[1] = 6;
double[] o3 = new double[2];
o3[0] = 6;
o3[1] = 6;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testFloatArray() {
float[] o1 = new float[2];
o1[0] = 5;
o1[1] = 6;
float[] o2 = new float[2];
o2[0] = 5;
o2[1] = 6;
float[] o3 = new float[2];
o3[0] = 6;
o3[1] = 6;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testBooleanArray() {
boolean[] o1 = new boolean[2];
o1[0] = true;
o1[1] = false;
boolean[] o2 = new boolean[2];
o2[0] = true;
o2[1] = false;
boolean[] o3 = new boolean[2];
o3[0] = false;
o3[1] = false;
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testObjectArrayHiddenByObject() {
TestObject[] array1 = new TestObject[2];
array1[0] = new TestObject(4);
array1[1] = new TestObject(5);
TestObject[] array2 = new TestObject[2];
array2[0] = new TestObject(4);
array2[1] = new TestObject(5);
TestObject[] array3 = new TestObject[2];
array3[0] = new TestObject(5);
array3[1] = new TestObject(5);
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testLongArrayHiddenByObject() {
long[] array1 = new long[2];
array1[0] = 5L;
array1[1] = 6L;
long[] array2 = new long[2];
array2[0] = 5L;
array2[1] = 6L;
long[] array3 = new long[2];
array3[0] = 6L;
array3[1] = 6L;
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testIntArrayHiddenByObject() {
int[] array1 = new int[2];
array1[0] = 5;
array1[1] = 6;
int[] array2 = new int[2];
array2[0] = 5;
array2[1] = 6;
int[] array3 = new int[2];
array3[0] = 6;
array3[1] = 6;
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testShortArrayHiddenByObject() {
short[] array1 = new short[2];
array1[0] = 5;
array1[1] = 6;
short[] array2 = new short[2];
array2[0] = 5;
array2[1] = 6;
short[] array3 = new short[2];
array3[0] = 6;
array3[1] = 6;
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testCharArrayHiddenByObject() {
char[] array1 = new char[2];
array1[0] = 5;
array1[1] = 6;
char[] array2 = new char[2];
array2[0] = 5;
array2[1] = 6;
char[] array3 = new char[2];
array3[0] = 6;
array3[1] = 6;
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testByteArrayHiddenByObject() {
byte[] array1 = new byte[2];
array1[0] = 5;
array1[1] = 6;
byte[] array2 = new byte[2];
array2[0] = 5;
array2[1] = 6;
byte[] array3 = new byte[2];
array3[0] = 6;
array3[1] = 6;
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testDoubleArrayHiddenByObject() {
double[] array1 = new double[2];
array1[0] = 5;
array1[1] = 6;
double[] array2 = new double[2];
array2[0] = 5;
array2[1] = 6;
double[] array3 = new double[2];
array3[0] = 6;
array3[1] = 6;
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testFloatArrayHiddenByObject() {
float[] array1 = new float[2];
array1[0] = 5;
array1[1] = 6;
float[] array2 = new float[2];
array2[0] = 5;
array2[1] = 6;
float[] array3 = new float[2];
array3[0] = 6;
array3[1] = 6;
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testBooleanArrayHiddenByObject() {
boolean[] array1 = new boolean[2];
array1[0] = true;
array1[1] = false;
boolean[] array2 = new boolean[2];
array2[0] = true;
array2[1] = false;
boolean[] array3 = new boolean[2];
array3[0] = false;
array3[1] = false;
Object o1 = array1;
Object o2 = array2;
Object o3 = array3;
xtestHiddenByObject(o1, o2, o3);
}
@Test
public void testUnrelatedClasses() {
Object[] x = new Object[] { new TestACanEqualB(1) };
Object[] y = new Object[] { new TestBCanEqualA(1) };
Object[] z = new Object[] { new TestBCanEqualA(2) };
// sanity checks:
assertTrue(Arrays.equals(x, x));
assertTrue(Arrays.equals(y, y));
assertTrue(Arrays.equals(x, y));
assertTrue(Arrays.equals(y, x));
// real tests:
assertTrue(x[0].equals(x[0]));
assertTrue(y[0].equals(y[0]));
assertTrue(x[0].equals(y[0]));
assertTrue(y[0].equals(x[0]));
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(x);
eq2.append(y);
eq3.append(z);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
}
@Test
public void testList() {
List<String> o1 = new ArrayList<String>();
List<String> o2 = new ArrayList<String>();
List<String> o3 = new ArrayList<String>();
o1.add("something");
o2.add("something");
o3.add("somethingelse");
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testSet() {
Set<String> o1 = new HashSet<String>();
Set<String> o2 = new HashSet<String>();
Set<String> o3 = new HashSet<String>();
o1.add("something");
o2.add("something");
o3.add("somethingelse");
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testNonCollectionSupport() {
EqualsHashCodeBuilder eq = new EqualsHashCodeBuilder();
try {
eq.append(Collections.unmodifiableCollection(new ArrayList<String>()));
Assert.fail("Should fail because Collections are not supported!");
} catch (IllegalArgumentException e) {
// success
}
}
// =======================================================================
// Added 'x' to helper methods to prevent eclipse from warning..
// =======================================================================
//
// Helper Methods
//
void xtestHiddenByObject(Object o1, Object o2, Object o3) {
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
void xtestHashCode(EqualsHashCodeBuilder eq1, EqualsHashCodeBuilder eq2,
EqualsHashCodeBuilder eq3) {
// test hash code part...
Set<EqualsHashCodeBuilder> set = new HashSet<EqualsHashCodeBuilder>();
set.add(eq1);
set.add(eq2);
set.add(eq3);
assertTrue(set.size() == 2);
}
void xtestEqualsBuilderHashCode() {
Map<String, String> o1 = new HashMap<String, String>();
Map<String, String> o2 = new HashMap<String, String>();
Map<String, String> o3 = new HashMap<String, String>();
EqualsHashCodeBuilder eq1 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq2 = new EqualsHashCodeBuilder();
EqualsHashCodeBuilder eq3 = new EqualsHashCodeBuilder();
eq1.append(o1);
eq2.append(o2);
eq3.append(o3);
assertTrue(eq1.equals(eq1));
assertTrue(eq1.equals(eq2));
assertTrue(eq2.equals(eq1));
assertFalse(eq1.equals(null));
assertFalse(eq1.equals(eq3));
assertFalse(eq3.equals(eq1));
xtestHashCode(eq1, eq2, eq3);
}
@Test
public void testBeanComparison() throws Exception {
TestBean b1 = new TestBean(new Random());
TestBean b2 = (TestBean) b1.clone();
TestBean b3 = new TestBean(new Random());
EqualsHashCodeBuilder bld1 = new EqualsHashCodeBuilder();
bld1.appendBean(b1);
EqualsHashCodeBuilder bld2 = new EqualsHashCodeBuilder();
bld2.appendBean(b2);
assertTrue(bld1.equals(bld1));
assertTrue(bld1.equals(bld2));
EqualsHashCodeBuilder bld3 = new EqualsHashCodeBuilder();
bld3.appendBean(b3);
assertFalse(bld2.equals(bld3));
}
// ========================================================================
// Helper Classes
// ========================================================================
public static class TestBean implements Cloneable {
private String arg1;
private int arg2;
private long arg3;
private double arg4;
private byte arg5;
public TestBean(Random r) {
if (r != null) {
arg1 = StringUtil.randomString(r, 25);
arg2 = r.nextInt();
arg3 = r.nextLong();
arg4 = r.nextDouble();
arg5 = (byte) r.nextInt();
}
}
public String getArg1() {
return arg1;
}
public void setArg1(String arg1) {
this.arg1 = arg1;
}
public int getArg2() {
return arg2;
}
public void setArg2(int arg2) {
this.arg2 = arg2;
}
public long getArg3() {
return arg3;
}
public void setArg3(long arg3) {
this.arg3 = arg3;
}
public double getArg4() {
return arg4;
}
public void setArg4(double arg4) {
this.arg4 = arg4;
}
public byte getArg5() {
return arg5;
}
public void setArg5(byte arg5) {
this.arg5 = arg5;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
static class TestObject {
static final int SEED = 19;
private int a;
public TestObject() {
}
public TestObject(int a) {
this.a = a;
}
@Override
public boolean equals(Object o) {
boolean ret = false;
if (o instanceof TestObject) {
if (o == this) { // identity check..
ret = true;
} else { // value check..
TestObject rhs = (TestObject) o;
ret = (a == rhs.a);
}
}
return ret;
}
public void setA(int a) {
this.a = a;
}
public int getA() {
return a;
}
@Override
public int hashCode() {
return a * SEED;
}
}
static class TestSubObject extends TestObject {
private int b;
public TestSubObject() {
super(0);
}
public TestSubObject(int a, int b) {
super(a);
this.b = b;
}
@Override
public boolean equals(Object o) {
boolean ret = false;
if (o instanceof TestSubObject) {
if (o == this) { // identity check..
ret = true;
} else { // value check..
TestSubObject rhs = (TestSubObject) o;
ret = super.equals(o) && (b == rhs.b);
}
}
return ret;
}
public void setB(int b) {
this.b = b;
}
public int getB() {
return b;
}
@Override
public int hashCode() {
return super.hashCode() + SEED * b;
}
}
static class TestEmptySubObject extends TestObject {
public TestEmptySubObject(int a) {
super(a);
}
}
public static class TestACanEqualB {
private int a;
public TestACanEqualB(int a) {
this.a = a;
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (o instanceof TestACanEqualB) {
return this.a == ((TestACanEqualB) o).getA();
}
if (o instanceof TestBCanEqualA) {
return this.a == ((TestBCanEqualA) o).getB();
}
return false;
}
public int getA() {
return this.a;
}
}
public static class TestBCanEqualA {
private int b;
public TestBCanEqualA(int b) {
this.b = b;
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (o instanceof TestACanEqualB) {
return this.b == ((TestACanEqualB) o).getA();
}
if (o instanceof TestBCanEqualA) {
return this.b == ((TestBCanEqualA) o).getB();
}
return false;
}
public int getB() {
return this.b;
}
}
}