// 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.configuration;
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.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
public class ArgumentsTest {
private Arguments args;
@Test
public void testForbiddenDependencies() {
args = new Arguments();
Map<String, Set<String>> expected = createMap("foo", "bay", "bar");
args.setForbiddenDependencies(expected);
assertEquals(expected, args.getForbiddenDependencies());
}
@Test
public void testAllowedDepednencies() {
args = new Arguments();
Map<String, Set<String>> expected = createMap("foo", "bay", "bar");
args.setAllowedDependencies(expected);
assertEquals(expected, args.getAllowedDependencies());
}
@Test
public void testInputConfiguration() {
String path1 = "d:/temp";
String path2 = "test/folder";
List<String> paths = new ArrayList();
paths.add(path1);
paths.add(path2);
args = new Arguments();
args.setInput(paths);
assertEquals(paths, args.getInput());
}
@Test
public void testCyclesAllowedTrue() {
args = new Arguments();
args.setCyclesAllowed(true);
assertTrue(args.getCyclesAllowed());
}
@Test
public void testCyclesAllowedFalse() {
args = new Arguments();
args.setCyclesAllowed(false);
assertFalse(args.getCyclesAllowed());
}
@Test
public void testEqualsHashCodeAndDeepCopy() {
Arguments a1 = new Arguments();
Arguments a2 = new Arguments();
Arguments b1 = new Arguments();
a1.setInput(Arrays.asList("foo", "bar"));
a2.setInput(Arrays.asList("foo", "bar"));
b1.setInput(Arrays.asList("foo", "oof"));
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
b1.setInput(Arrays.asList("foo", "bar"));
a1.setConfigFileName("myprops.properties");
a2.setConfigFileName("myprops.properties");
b1.setConfigFileName("yourprops.properties");
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
b1.setConfigFileName("myprops.properties");
a1.setCyclesAllowed(true);
a2.setCyclesAllowed(true);
b1.setCyclesAllowed(false);
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
b1.setCyclesAllowed(true);
a1.setForbiddenDependencies(createMap("foo", "bar"));
a2.setForbiddenDependencies(createMap("foo", "bar"));
b1.setForbiddenDependencies(createMap("foo", "oof"));
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
b1.setForbiddenDependencies(createMap("foo", "bar"));
a1.setGroups(createGroup("foo", "bar"));
a2.setGroups(createGroup("foo", "bar"));
b1.setGroups(createGroup("foo", "oof"));
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
b1.setGroups(createGroup("foo", "bar"));
a1.setGroups(createGroupWithExclusion("foo", "bar"));
a2.setGroups(createGroupWithExclusion("foo", "bar"));
b1.setGroups(createGroupWithExclusion("foo", "oof"));
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
b1.setGroups(createGroupWithExclusion("foo", "bar"));
a1.setIgnoredFileMasks(Arrays.asList("foo", "bar"));
a2.setIgnoredFileMasks(Arrays.asList("foo", "bar"));
b1.setIgnoredFileMasks(Arrays.asList("foo", "oof"));
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
b1.setIgnoredFileMasks(Arrays.asList("foo", "bar"));
a1.setScope("packages");
a2.setScope("packages");
b1.setScope("classes");
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
b1.setScope("packages");
b1.setAllowedDependencies(createMap("xx", "yy", "zz"));
a1.setAllowedDependencies(createMap("xxx", "yyy", "zzz"));
a2.setAllowedDependencies(createMap("xxx", "yyy", "zzz"));
assertEqualsHashCodeAndDeepCopy(a1, a2, b1);
}
private Map<String, Group> createGroup(String... deps) {
Map<String, Group> result = new HashMap();
result.put("foo", new Group("foo", new HashSet(Arrays.asList(deps))));
return result;
}
private Map<String, Group> createGroupWithExclusion(String... deps) {
Map<String, Group> result = new HashMap();
result.put("foo", new Group("foo", Collections.EMPTY_SET, new HashSet(
Arrays.asList(deps))));
return result;
}
private Map<String, Set<String>> createMap(String key, String... values) {
Map<String, Set<String>> result = new HashMap();
result.put(key, new HashSet(Arrays.asList(values)));
return result;
}
private void assertEqualsHashCodeAndDeepCopy(Arguments a1, Arguments a2,
Arguments b1) {
assertEquals(a1, a2);
assertEquals(a1.hashCode(), a2.hashCode());
assertFalse(a1.equals(b1));
assertFalse(a1.hashCode() == b1.hashCode());
assertEquals(a1, a1.createDeepCopy());
}
}