package picocli; import org.junit.Rule; import org.junit.Test; import org.junit.contrib.java.lang.system.ProvideSystemProperty; import picocli.CommandLine.Command; import picocli.CommandLine.Parameters; import java.io.PrintWriter; import java.io.StringWriter; import java.util.concurrent.Callable; import static org.junit.Assert.*; public class Issue1225UnmatchedArgBadIndex { @Rule public final ProvideSystemProperty ansiOFF = new ProvideSystemProperty("picocli.ansi", "false"); @Command(name = "app", mixinStandardHelpOptions = true, version = "app 1.0", description = "....") static class App implements Callable { @Parameters(index = "0", description = "...") private String arg1; @Parameters(index = "1", description = "...", defaultValue="") private String arg2; public Integer call() { return 0; } public static void main(String[] args) { args = new String[] {"sdf", "sf", "sdf" }; CommandLine cmd = new CommandLine(new App()); cmd.execute(args); args = new String[] {"a", "b", "a" }; cmd.execute(args); } } @Test public void testIssue1225() { //TestUtil.setTraceLevel("DEBUG"); CommandLine cmd = new CommandLine(new App()); StringWriter sw = new StringWriter(); cmd.setErr(new PrintWriter(sw)); assertEquals(2, cmd.execute("x", "y", "x")); assertTrue(sw.toString(), sw.toString().startsWith("Unmatched argument at index 2: 'x'")); sw = new StringWriter(); cmd.setErr(new PrintWriter(sw)); assertEquals(2, cmd.execute("a", "b", "c")); assertTrue(sw.toString(), sw.toString().startsWith("Unmatched argument at index 2: 'c'")); } @Test public void testIssue1225Longer() { CommandLine cmd = new CommandLine(new App()); StringWriter sw = new StringWriter(); cmd.setErr(new PrintWriter(sw)); assertEquals(2, cmd.execute("x", "y", "x", "x")); assertTrue(sw.toString(), sw.toString().startsWith("Unmatched arguments from index 2: 'x', 'x'")); } }