package mil.nga.giat.geowave.core.cli.parser;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParametersDelegate;
import junit.framework.Assert;
import mil.nga.giat.geowave.core.cli.annotations.GeowaveOperation;
import mil.nga.giat.geowave.core.cli.api.Command;
import mil.nga.giat.geowave.core.cli.api.DefaultOperation;
import mil.nga.giat.geowave.core.cli.api.OperationParams;
import mil.nga.giat.geowave.core.cli.spi.OperationEntry;
import mil.nga.giat.geowave.core.cli.spi.OperationRegistry;
public class OperationParserTest
{
@Test
public void testParseTopLevel() {
OperationEntry op1Entry = new OperationEntry(
Op1.class);
OperationEntry op2Entry = new OperationEntry(
Op2.class);
op1Entry.addChild(op2Entry);
List<OperationEntry> entries = new ArrayList<OperationEntry>();
entries.add(op1Entry);
entries.add(op2Entry);
OperationParser parser = new OperationParser(
new OperationRegistry(
entries));
CommandLineOperationParams params = parser.parse(
Op1.class,
new String[] {
"op",
"--username",
"user",
"--password",
"blah"
});
Op2 op2 = (Op2) params.getOperationMap().get(
"op");
Assert.assertEquals(
"blah",
op2.args.passWord);
Assert.assertEquals(
"user",
op2.args.userName);
}
@Test
public void testParseArgs() {
OperationParser parser = new OperationParser();
Args args = new Args();
parser.addAdditionalObject(args);
parser.parse(new String[] {
"--username",
"user",
"--password",
"blah"
});
Assert.assertEquals(
"blah",
args.passWord);
Assert.assertEquals(
"user",
args.userName);
}
@Test
public void testParseOperation() {
OperationEntry op1Entry = new OperationEntry(
Op1.class);
OperationEntry op2Entry = new OperationEntry(
Op2.class);
op1Entry.addChild(op2Entry);
List<OperationEntry> entries = new ArrayList<OperationEntry>();
entries.add(op1Entry);
entries.add(op2Entry);
OperationParser parser = new OperationParser(
new OperationRegistry(
entries));
Op2 op2 = new Op2();
parser.parse(
op2,
new String[] {
"--username",
"user",
"--password",
"blah"
});
Assert.assertEquals(
"blah",
op2.args.passWord);
Assert.assertEquals(
"user",
op2.args.userName);
}
public static class Args
{
@Parameter(names = "--username")
private String userName;
@Parameter(names = "--password")
private String passWord;
}
@GeowaveOperation(name = "toplevel")
public static class Op1 extends
DefaultOperation
{
}
@GeowaveOperation(name = "op", parentOperation = Op1.class)
public static class Op2 extends
DefaultOperation implements
Command
{
@ParametersDelegate
private Args args = new Args();
@Override
public void execute(
OperationParams params )
throws Exception {
}
}
}