// This product is provided under the terms of EPL (Eclipse Public License) // version 1.0. // // The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php package org.dtangler.core.cycleanalysis; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import org.junit.Test; public class DependencyCycleDuplicateTest { @Test public void testEqualsAndHashcode3Nodes() { DependencyCycle same1 = makeCycle("foo", "bar"); DependencyCycle same2 = makeCycle("bar", "foo"); DependencyCycle dif1 = makeCycle("foo", "bar2"); DependencyCycle dif2 = makeCycle("bar", "foo2"); assertFalse(same1.equals(null)); assertFalse(same1.equals(Boolean.TRUE)); assertEquals(same1, same2); assertTrue(same1.hashCode() == same2.hashCode()); assertFalse(same1.equals(dif1)); assertFalse(same1.equals(dif2)); } @Test public void testEqualsAndHashcode4Nodes() { DependencyCycle same1 = makeCycle("foo", "bar", "cuu"); DependencyCycle same2 = makeCycle("bar", "cuu", "foo"); DependencyCycle same3 = makeCycle("cuu", "foo", "bar"); DependencyCycle dif1 = makeCycle("foo", "cuu", "bar"); DependencyCycle dif2 = makeCycle("bar", "foo", "cuu"); Set<DependencyCycle> two = makeSet(same1, dif1); assertEquals("cycle direction differs - not same cycle.", 2, two.size()); Set<DependencyCycle> one = makeSet(same1, same2, same3); assertEquals("these cycles are the same.", 1, one.size()); assertEquals(same1, same2); assertEquals(same1, same3); assertEquals(same2, same2); assertFalse(same1.equals(dif1)); assertFalse(same1.equals(dif2)); // These are not requirements but we know how our hashcode impl works... assertTrue(same1.hashCode() == same2.hashCode()); assertTrue(same1.hashCode() == same3.hashCode()); assertTrue(same2.hashCode() == same2.hashCode()); assertTrue(same1.hashCode() == dif1.hashCode()); assertTrue(same1.hashCode() == dif2.hashCode()); } private Set<DependencyCycle> makeSet(DependencyCycle... cycles) { return new HashSet(Arrays.asList(cycles)); } private DependencyCycle makeCycle(String... items) { List<String> list = new ArrayList(Arrays.asList(items)); list.add(items[0]); return new TestDependencyCycle(list); // FIXME: this ctor wants 1st and last element to be the same } }