package org.freehep.util.commandline.test;
import java.util.Vector;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.freehep.util.commandline.CommandLine;
import org.freehep.util.commandline.CommandLineException;
import org.freehep.util.commandline.MissingArgumentException;
import org.freehep.util.commandline.NoSuchOptionException;
/**
* Some simple tests.
*
*/
public class CommandLineUnitTest extends TestCase {
private CommandLine cl;
public CommandLineUnitTest(String name) {
super(name);
}
protected void setUp() {
String cmd = "Fake Java Virtual Machine (version 0.9)";
cl = new CommandLine("java", cmd, 3);
cl.addOption("classpath","cp", "path", "set search path for application classes");
cl.addBailOutOption("help", "h", "show help on command");
cl.addOption("notSetFlag", "nsf", "never used");
cl.addOption("notSetOption", "nso", "dummy", "not used");
cl.addOption("notSetQualifiedFlag", null, new String[] {"dummy"},"not used");
cl.addOption("startup", "st", "startup time", "specify startup time");
cl.addOption("verbose", "v", new String[] {"class","gc","jni"}, "enable verbose output");
cl.addBailOutOption("version", null, "print product version");
cl.addOption("x", null, "option x");
cl.addOption("y", null, "option y");
cl.addMultiOption("I", "includedir", "add includedir to search path");
cl.addMultiOption("D", "key=value", "define a property");
cl.addParameter("class1", "first classfile");
cl.addParameter("class2", "second classfile");
cl.addParameter("class3", "third classfile");
cl.addParameter("optionalfile", "optional classfile");
cl.addParameter("args...", "further arguments");
}
public void testVersion() throws CommandLineException {
assertTrue(!cl.parse(new String[] {"-version"}));
assertTrue(cl.hasOption("version"));
}
public void testDoubleVersion() throws CommandLineException {
assertTrue(!cl.parse(new String[] {"--version"}));
assertTrue(cl.hasOption("version"));
}
public void testHelp() throws CommandLineException {
assertTrue(!cl.parse(new String[] {"-help"}));
assertTrue(cl.hasOption("help"));
}
public void testH() throws CommandLineException {
assertTrue(!cl.parse(new String[] {"-h"}));
assertTrue(cl.hasOption("h"));
}
public void testOptionParameters() throws CommandLineException {
assertTrue(cl.parse(new String[] {"-verbose","parameter1","parameter2","parameter3"}));
assertTrue(cl.hasOption("verbose"));
assertTrue(cl.hasOption("v"));
String[] args = cl.getArguments();
assertEquals("parameter1", args[0]);
assertEquals("parameter2", args[1]);
assertEquals("parameter3", args[2]);
}
public void testDoubleOptionParameters() throws CommandLineException {
assertTrue(cl.parse(new String[] {"-x-y","parameter1","parameter2","parameter3"}));
assertTrue(cl.hasOption("x"));
assertTrue(cl.hasOption("y"));
String[] args = cl.getArguments();
assertEquals("parameter1", args[0]);
assertEquals("parameter2", args[1]);
assertEquals("parameter3", args[2]);
}
public void testValueOptionParametersOptional() throws CommandLineException {
assertTrue(cl.parse(new String[] {"-cp","classpath","parameter1","parameter2","parameter3","optional1","optional2"}));
assertEquals("classpath", cl.getOption("classpath"));
assertEquals("classpath", cl.getOption("cp"));
String[] args = cl.getArguments();
assertEquals("parameter1", args[0]);
assertEquals("parameter2", args[1]);
assertEquals("parameter3", args[2]);
assertEquals("optional1", args[3]);
assertEquals("optional2", args[4]);
}
public void testQualifiedOptionParametersOptional() throws CommandLineException {
assertTrue(cl.parse(new String[] {"-verbose:gc","parameter1","parameter2","parameter3","optional1"}));
assertEquals("gc", cl.getOption("verbose"));
assertEquals("gc", cl.getOption("v"));
String[] args = cl.getArguments();
assertEquals("parameter1", args[0]);
assertEquals("parameter2", args[1]);
assertEquals("parameter3", args[2]);
assertEquals("optional1", args[3]);
}
public void testMultiOptionSingle() throws CommandLineException {
assertTrue(cl.parse(new String[] {"-Iincludedir1", "par1", "par2", "par3"}));
Vector multi = cl.getMultiOption("I");
assertEquals("includedir1", multi.get(0));
String[] args = cl.getArguments();
assertEquals("par1", args[0]);
assertEquals("par2", args[1]);
assertEquals("par3", args[2]);
}
public void testMultiOptionMulti() throws CommandLineException {
assertTrue(cl.parse(new String[] {"-Iincludedir1", "-Iincludedir2", "par1", "par2", "par3"}));
Vector multi = cl.getMultiOption("I");
assertEquals("includedir1", multi.get(0));
assertEquals("includedir2", multi.get(1));
String[] args = cl.getArguments();
assertEquals("par1", args[0]);
assertEquals("par2", args[1]);
assertEquals("par3", args[2]);
}
public void testKeyValuePairs() throws CommandLineException {
assertTrue(cl.parse(new String[] {"-Dvar1=value1","-Dvar2=value2","par1","par2","par3"}));
Vector key = cl.getMultiOption("D");
assertEquals("var1=value1", key.get(0));
assertEquals("var2=value2", key.get(1));
String[] args = cl.getArguments();
assertEquals("par1", args[0]);
assertEquals("par2", args[1]);
assertEquals("par3", args[2]);
}
public void testUnknownKeyValueOption() throws CommandLineException {
try {
assertTrue(cl.parse(new String[] {"-startup=now","classpath","parameter1","parameter2","parameter3"}));
} catch (NoSuchOptionException nsoe) {
return;
}
fail("Expected NoSuchOptionException");
}
public void testUnknownFlag() throws CommandLineException {
try {
assertTrue(cl.parse(new String[] {"-unknownflag","parameter1","parameter2","parameter3"}));
} catch (NoSuchOptionException nsoe) {
return;
}
fail("Expected NoSuchOptionException");
}
public void testUnknownOption() throws CommandLineException {
try {
assertTrue(cl.parse(new String[] {"-unknownoption","somevalue","parameter1","parameter2","parameter3"}));
} catch (NoSuchOptionException nsoe) {
return;
}
fail("Expected NoSuchOptionException");
}
public void testMissingArgument() throws CommandLineException {
try {
assertTrue(cl.parse(new String[] {"-verbose","too","few parameters"}));
} catch (MissingArgumentException mae) {
return;
}
fail("Expected MissingArgumentException");
}
/*
public void testTooManyArguments() throws CommandLineException {
try {
assertTrue(cl.parse(new String[] {"-verbose","too","few parameters"}));
} catch (TooManyArgumentsException tmae) {
return;
}
fail("Expected TooManyArgumentsException");
}
*/
public void testMissingValue() throws CommandLineException {
try {
assertTrue(cl.parse(new String[] {"-cp"}));
} catch (MissingArgumentException mae) {
return;
}
fail("Expected MissingArgumentException");
}
public static Test suite() {
return new TestSuite(CommandLineUnitTest.class);
}
public static void main (String[] args) {
junit.textui.TestRunner.run (suite());
}
}