// 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.assertNull; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.dtangler.core.analysisresult.Violation; import org.dtangler.core.dependencies.Dependable; import org.dtangler.core.dependencies.Dependencies; import org.dtangler.core.dependencies.Dependency; import org.dtangler.core.dependencies.TestDependable; import org.junit.Before; import org.junit.Test; public class CycleValidatorTest { private static final Dependable C1 = new TestDependable("c1"); private static final Dependable C2 = new TestDependable("c2"); private static final Dependable L1 = new TestDependable("l1"); private static final Dependable L2 = new TestDependable("l2"); private static final Dependable L3 = new TestDependable("l3"); private static final Dependable INNOCENT = new TestDependable("not me"); private CycleValidator cycleFinder; @Before public void setUp() { Dependencies dependencies = new Dependencies(); dependencies.addDependencies(INNOCENT, createMap(C1)); dependencies.addDependencies(C1, createMap(C2)); dependencies.addDependencies(C2, createMap(C1)); dependencies.addDependencies(INNOCENT, createMap(L1)); dependencies.addDependencies(L1, createMap(L2)); dependencies.addDependencies(L2, createMap(L3)); dependencies.addDependencies(L3, createMap(L1)); cycleFinder = new CycleValidator(false); cycleFinder.analyze(dependencies); } // TODO split @Test public void testGetCycles() { assertNull(cycleFinder.getViolations() .get(new Dependency(INNOCENT, C1))); Set<Violation> c1cycles = cycleFinder.getViolations().get( new Dependency(C1, C2)); assertEquals(1, c1cycles.size()); DependencyCycle cycle = (DependencyCycle) c1cycles.iterator().next(); assertEquals(3, cycle.getStringElements().size()); assertCycle(cycle, C1, C2, C1); Set<Violation> l2cycles = cycleFinder.getViolations().get( new Dependency(L2, L3)); assertEquals(1, l2cycles.size()); cycle = (DependencyCycle) l2cycles.iterator().next(); assertCycle(cycle, L2, L3, L1, L2); } void assertCycle(DependencyCycle actual, Dependable... expected) { assertEquals(expected.length, actual.getElements().size()); for (int i = 0; i < expected.length; i++) assertEquals(expected[i], actual.getElements().get(i)); } protected Map<Dependable, Integer> createMap(Dependable... items) { Map<Dependable, Integer> result = new HashMap(); for (Dependable item : items) { result.put(item, 1); } return result; } }