001: package org.unitils.reflectionassert;
002:
003: import junit.framework.TestCase;
004: import org.unitils.reflectionassert.ReflectionComparator.Difference;
005:
006: /**
007: * @author Filip Neven
008: * @author Tim Ducheyne
009: */
010: public class ReflectionComparatorSharedReferencesTest extends TestCase {
011:
012: /* Class under test */
013: private ReflectionComparator reflectionComparator;
014:
015: private References leaf1 = new References("Leaf1", null, null);
016:
017: private References leaf1Copy = new References("Leaf1", null, null);
018:
019: private References leaf2 = new References("Leaf2", null, null);
020:
021: private References doubleReferenced = new References("Trunk",
022: leaf1, leaf1);
023:
024: private References equalToDoubleReferenced = new References(
025: "Trunk", leaf1, leaf1Copy);
026:
027: private References notEqualToDoubleReferenced = new References(
028: "Trunk", leaf1, leaf2);
029:
030: private References nestedDoubleReferenced = new References("Trunk",
031: leaf1, new References("Branch", leaf1, null));
032:
033: private References equalToNestedDoubleReferenced = new References(
034: "Trunk", leaf1Copy, new References("Branch", leaf1Copy,
035: null));
036:
037: private References notEqualToNestedDoubleReferenced1 = new References(
038: "Trunk", leaf1Copy, new References("Branch", leaf2, null));
039:
040: private References circularReferenced = new References("Trunk",
041: leaf1, null); // circular reference created in setUp
042:
043: private References equalToCircularReferenced = new References(
044: "Trunk", leaf1, new References("Trunk", leaf1Copy,
045: circularReferenced));
046:
047: protected void setUp() throws Exception {
048: super .setUp();
049:
050: reflectionComparator = ReflectionComparatorChainFactory.STRICT_COMPARATOR;
051:
052: // Create circular reference
053: circularReferenced.setRef2(circularReferenced);
054: }
055:
056: public void testDoubleReferenced_equal() {
057: Difference diff = reflectionComparator.getDifference(
058: doubleReferenced, equalToDoubleReferenced);
059: assertNull(diff);
060: }
061:
062: public void testDoubleReferenced_notEqual() {
063: Difference diff = reflectionComparator.getDifference(
064: doubleReferenced, notEqualToDoubleReferenced);
065: assertNotNull(diff);
066: }
067:
068: public void testNestedDoubleReferenced_equal() {
069: Difference diff = reflectionComparator.getDifference(
070: nestedDoubleReferenced, equalToNestedDoubleReferenced);
071: assertNull(diff);
072: }
073:
074: public void testNestedDoubleReferenced_notEqual() {
075: Difference diff = reflectionComparator.getDifference(
076: nestedDoubleReferenced,
077: notEqualToNestedDoubleReferenced1);
078: // todo failing test, failing statement commented out
079: assertNotNull(diff);
080: }
081:
082: public void testCircularReferenced_equal() {
083: Difference diff = reflectionComparator.getDifference(
084: circularReferenced, equalToCircularReferenced);
085: assertNull(diff);
086: }
087:
088: public void testCircularReferenced_notEqual() {
089: Difference diff = reflectionComparator.getDifference(
090: circularReferenced, nestedDoubleReferenced);
091: // todo failing test, failing statement commented out
092: assertNotNull(diff);
093: }
094:
095: @SuppressWarnings("unused")
096: private static class References {
097:
098: private String name;
099:
100: private References ref1;
101:
102: private References ref2;
103:
104: public References(String name, References ref1, References ref2) {
105: this .name = name;
106: this .ref1 = ref1;
107: this .ref2 = ref2;
108: }
109:
110: public void setRef1(References ref1) {
111: this .ref1 = ref1;
112: }
113:
114: public void setRef2(References ref2) {
115: this .ref2 = ref2;
116: }
117:
118: @Override
119: public boolean equals(Object o) {
120: if (this == o)
121: return true;
122: if (o == null || getClass() != o.getClass())
123: return false;
124:
125: final References that = (References) o;
126:
127: if (!name.equals(that.name))
128: return false;
129:
130: return true;
131: }
132:
133: @Override
134: public int hashCode() {
135: return name.hashCode();
136: }
137:
138: }
139: }
|