package mil.nga.giat.geowave.core.cli.prefix;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParametersDelegate;
import junit.framework.Assert;
import mil.nga.giat.geowave.core.cli.annotations.PrefixParameter;
import mil.nga.giat.geowave.core.cli.prefix.JCommanderPrefixTranslatorTest.ArgumentChildren;
import mil.nga.giat.geowave.core.cli.prefix.JCommanderPrefixTranslatorTest.ArgumentChildrenOther;
import mil.nga.giat.geowave.core.cli.prefix.JCommanderPrefixTranslatorTest.Arguments;
import mil.nga.giat.geowave.core.cli.prefix.JCommanderPrefixTranslatorTest.ArgumentsCollection;
import mil.nga.giat.geowave.core.cli.prefix.JCommanderPrefixTranslatorTest.NullDelegate;
import mil.nga.giat.geowave.core.cli.prefix.JCommanderPrefixTranslatorTest.PrefixedArguments;
import mil.nga.giat.geowave.core.cli.prefix.PrefixedJCommander.PrefixedJCommanderInitializer;
public class PrefixedJCommanderTest
{
@Test
public void testAddCommand() {
PrefixedJCommander prefixedJCommander = new PrefixedJCommander();
prefixedJCommander.addCommand(
"abc",
(Object) "hello, world",
"a");
prefixedJCommander.addCommand(
"def",
(Object) "goodbye, world",
"b");
prefixedJCommander.parse("abc");
Assert.assertEquals(
prefixedJCommander.getParsedCommand(),
"abc");
}
@Test
public void testNullDelegate() {
PrefixedJCommander commander = new PrefixedJCommander();
NullDelegate nullDelegate = new NullDelegate();
commander.addPrefixedObject(nullDelegate);
commander.parse();
}
@Test
public void testMapDelegatesPrefix() {
Arguments args = new Arguments();
args.argChildren.put(
"abc",
new ArgumentChildren());
args.argChildren.put(
"def",
new ArgumentChildren());
PrefixedJCommander commander = new PrefixedJCommander();
commander.addPrefixedObject(args);
commander.parse(
"--abc.arg",
"5",
"--def.arg",
"blah");
Assert.assertEquals(
"5",
args.argChildren.get("abc").arg);
Assert.assertEquals(
"blah",
args.argChildren.get("def").arg);
}
@Test
public void testCollectionDelegatesPrefix() {
ArgumentsCollection args = new ArgumentsCollection();
args.argChildren.add(new ArgumentChildren());
args.argChildren.add(new ArgumentChildrenOther());
PrefixedJCommander commander = new PrefixedJCommander();
commander.addPrefixedObject(args);
commander.parse(
"--arg",
"5",
"--arg2",
"blah");
Assert.assertEquals(
"5",
((ArgumentChildren) args.argChildren.get(0)).arg);
Assert.assertEquals(
"blah",
((ArgumentChildrenOther) args.argChildren.get(1)).arg2);
}
@Test
public void testPrefixParameter() {
PrefixedArguments args = new PrefixedArguments();
PrefixedJCommander commander = new PrefixedJCommander();
commander.addPrefixedObject(args);
commander.parse(
"--abc.arg",
"5",
"--arg",
"blah");
Assert.assertEquals(
"5",
args.child.arg);
Assert.assertEquals(
"blah",
args.blah);
}
@Test
public void testAddGetPrefixedObjects() {
PrefixedArguments args = new PrefixedArguments();
PrefixedJCommander commander = new PrefixedJCommander();
commander.addPrefixedObject(args);
Assert.assertTrue(commander.getPrefixedObjects().contains(
args) && commander.getPrefixedObjects().size() == 1);
}
private static class PrefixedArguments
{
@ParametersDelegate
@PrefixParameter(prefix = "abc")
private ArgumentChildren child = new ArgumentChildren();
@Parameter(names = "--arg")
private String blah;
}
private static class NullDelegate
{
@ParametersDelegate
private ArgumentChildren value = null;
}
private static class ArgumentsCollection
{
@ParametersDelegate
private List<Object> argChildren = new ArrayList<Object>();
}
private static class Arguments
{
@ParametersDelegate
private Map<String, ArgumentChildren> argChildren = new HashMap<String, ArgumentChildren>();
}
private static class ArgumentChildren
{
@Parameter(names = "--arg")
private String arg;
}
private static class ArgumentChildrenOther
{
@Parameter(names = "--arg2")
private String arg2;
}
}