blob: 6601193164701e1712d920900db4a47fc8362f5d [file] [log] [blame]
package com.beust.jcommander;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class CmdTest {
@Parameters(commandNames = "--cmd-one")
public static class CmdOne {
}
@Parameters(commandNames = "--cmd-two")
class CmdTwo {
@Parameter
List<String> params = new java.util.LinkedList<String>();
}
public String parseArgs(boolean withDefault, String[] args) {
JCommander jc = new JCommander();
jc.addCommand(new CmdOne());
jc.addCommand(new CmdTwo());
if (withDefault) {
// First check if a command was given, when not prepend default
// command (--cmd-two")
// In version up to 1.23 JCommander throws an Exception in this
// line,
// which might be incorrect, at least its not reasonable if the
// method
// is named "WithoutValidation".
jc.parseWithoutValidation(args);
if (jc.getParsedCommand() == null) {
LinkedList<String> newArgs = new LinkedList<String>();
newArgs.add("--cmd-two");
newArgs.addAll(Arrays.asList(args));
jc.parse(newArgs.toArray(new String[0]));
}
} else {
jc.parse(args);
}
return jc.getParsedCommand();
}
@DataProvider
public Object[][] testData() {
return new Object[][] {
new Object[] { "--cmd-one", false, new String[] { "--cmd-one" } },
new Object[] { "--cmd-two", false, new String[] { "--cmd-two" } },
new Object[] { "--cmd-two", false,
new String[] { "--cmd-two", "param1", "param2" } },
// This is the relevant test case to test default commands
new Object[] { "--cmd-two", true,
new String[] { "param1", "param2" } } };
}
@Test(dataProvider = "testData")
public void testArgsWithoutDefaultCmd(String expected,
boolean requireDefault, String[] args) {
if (!requireDefault) {
Assert.assertEquals(parseArgs(false, args), expected);
}
}
@Test(dataProvider = "testData", expectedExceptions = MissingCommandException.class)
public void testArgsWithoutDefaultCmdFail(String expected,
boolean requireDefault, String[] args) {
if (requireDefault) {
parseArgs(false, args);
} else {
throw new MissingCommandException("irrelevant test case");
}
}
// We do not expect a MissingCommandException!
@Test(dataProvider = "testData")
public void testArgsWithDefaultCmd(String expected, boolean requireDefault,
String[] args) {
Assert.assertEquals(parseArgs(true, args), expected);
}
}