diff options
author | pascalschumacher <pascalschumacher@gmx.net> | 2018-02-11 20:43:05 +0100 |
---|---|---|
committer | pascalschumacher <pascalschumacher@gmx.net> | 2018-02-11 20:43:05 +0100 |
commit | 2e9f3a80146262511ca7bcdd3411f095dff4951d (patch) | |
tree | 24b7f69be9c598e463634846a32425ebb6a28fbc /src/test/java/org/apache/commons | |
parent | 2ce40494073aa4e9bdcba4c39d24727b7141d227 (diff) | |
download | apache-commons-lang-2e9f3a80146262511ca7bcdd3411f095dff4951d.tar.gz |
LANG-1356: Add bypass option for classes to recursive and reflective EqualsBuilder
Patch supplied by Yathos UG
Diffstat (limited to 'src/test/java/org/apache/commons')
-rw-r--r-- | src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java b/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java index 23651f612..05f1da9a8 100644 --- a/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java +++ b/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java @@ -168,6 +168,19 @@ public class EqualsBuilderTest { } } + static class TestRecursiveGenericObject<T> { + + private final T a; + + TestRecursiveGenericObject(final T a) { + this.a = a; + } + + public T getA() { + return a; + } + } + static class TestRecursiveObject { private final TestRecursiveInnerObject a; private final TestRecursiveInnerObject b; @@ -419,6 +432,35 @@ public class EqualsBuilderTest { } @Test + public void testObjectRecursiveGenericInteger() { + final TestRecursiveGenericObject<Integer> o1_a = new TestRecursiveGenericObject<Integer>(1); + final TestRecursiveGenericObject<Integer> o1_b = new TestRecursiveGenericObject<Integer>(1); + final TestRecursiveGenericObject<Integer> o2 = new TestRecursiveGenericObject<Integer>(2); + + assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1_a, o1_b).isEquals()); + assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1_b, o1_a).isEquals()); + + assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1_b, o2).isEquals()); + } + + @Test + public void testObjectRecursiveGenericString() { + // Note: Do not use literals, because string literals are always mapped by same object (internal() of String))! + String s1_a = String.valueOf(1); + final TestRecursiveGenericObject<String> o1_a = new TestRecursiveGenericObject<String>(s1_a); + final TestRecursiveGenericObject<String> o1_b = new TestRecursiveGenericObject<String>(String.valueOf(1)); + final TestRecursiveGenericObject<String> o2 = new TestRecursiveGenericObject<String>(String.valueOf(2)); + + // To trigger bug reported in LANG-1356, call hashCode only on string in instance o1_a + s1_a.hashCode(); + + assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1_a, o1_b).isEquals()); + assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1_b, o1_a).isEquals()); + + assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1_b, o2).isEquals()); + } + + @Test public void testObjectRecursive() { final TestRecursiveInnerObject i1_1 = new TestRecursiveInnerObject(1); final TestRecursiveInnerObject i1_2 = new TestRecursiveInnerObject(1); |