// 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.input;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import org.dtangler.core.configuration.Arguments;
import org.dtangler.core.configuration.Group;
import org.dtangler.core.configuration.ParserConstants;
import org.junit.Test;
public class GroupArgumentParserTest {
private final String group1 = "foo";
private final String group1_member1 = "eg.foo.aa";
private final String group1_member2 = "eg.foo.bb";
private final String group1_member3 = "eg.foo.cc";
private final String group2 = "bar";
private final String group2_member1 = "eg.bar.*";
private final String group2_excluded1 = "eg.bar.aa";
private final String group2_excluded2 = "eg.bar.x";
@Test
public void testParseGroups() {
String value1 = group1 + " " + ParserConstants.CONTAINS + " "
+ group1_member1 + ParserConstants.SMALL_SEPARATOR
+ group1_member2 + ParserConstants.SMALL_SEPARATOR
+ group1_member3;
String value2 = group2 + " " + ParserConstants.CONTAINS + " "
+ group2_member1;
Arguments argument = parse(ParserConstants.GROUPS_KEY, value1
+ ParserConstants.BIG_SEPARATOR + value2);
assertEquals(2, argument.getGroups().size());
testGroup(group1, 3, argument, new HashSet(Arrays.asList(
group1_member1, group1_member2, group1_member3)),
Collections.EMPTY_SET);
testGroup(group2, 1, argument, new HashSet(Arrays
.asList(group2_member1)), Collections.EMPTY_SET);
}
@Test
public void testParseGroupsWithExcludedItems() {
String value1 = group2 + " " + ParserConstants.CONTAINS + " "
+ group2_member1 + " " + ParserConstants.DOES_NOT_CONTAIN + " "
+ group2_excluded1;
String value2 = group2 + " " + ParserConstants.CONTAINS + " "
+ group2_member1 + " " + ParserConstants.DOES_NOT_CONTAIN + " "
+ group2_excluded1 + ParserConstants.SMALL_SEPARATOR
+ group2_excluded2;
Arguments argument = parse(ParserConstants.GROUPS_KEY, value1);
assertEquals(1, argument.getGroups().size());
testGroup(group2, 1, argument, new HashSet(Arrays
.asList(group2_member1)), new HashSet(Arrays
.asList(group2_excluded1)));
argument = parse(ParserConstants.GROUPS_KEY, value2);
assertEquals(1, argument.getGroups().size());
testGroup(group2, 1, argument, new HashSet(Arrays
.asList(group2_member1)), new HashSet(Arrays.asList(
group2_excluded1, group2_excluded2)));
}
// TODO simplify
private void testGroup(String groupName, int numberOfGroupItems,
Arguments argument, Set<String> included, Set<String> excluded) {
Group group = argument.getGroups().get(groupName);
assertTrue(argument.getGroups().containsKey(groupName));
assertEquals(numberOfGroupItems, group.getGroupItems().size());
for (String item : included) {
assertTrue(group.getGroupItems().contains(item));
}
for (String item : excluded) {
assertTrue(group.getExcludedItems().contains(item));
}
}
private ArgumentParser parser = new ArgumentParser();
private Arguments parse(String key, String value) {
parser.parseArguments(createValues(key, value));
return parser.getArguments();
}
private Map<String, String> createValues(String key, String value) {
Map<String, String> values = new Hashtable();
values.put(key, value);
return values;
}
}