Index: lutincommandline/src/test/org/codelutin/option/ParserUtilForTest.java diff -u lutincommandline/src/test/org/codelutin/option/ParserUtilForTest.java:1.1.1.1 lutincommandline/src/test/org/codelutin/option/ParserUtilForTest.java:1.2 --- lutincommandline/src/test/org/codelutin/option/ParserUtilForTest.java:1.1.1.1 Sat Feb 9 15:05:38 2008 +++ lutincommandline/src/test/org/codelutin/option/ParserUtilForTest.java Sun Mar 16 11:08:27 2008 @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.StringWriter; import java.io.Writer; +import java.io.PrintWriter; import java.util.Arrays; /** @@ -56,20 +57,22 @@ assertEquals(nbErrors, parser.getErrors().length); } - public static void assertError(OptionParser parser, int nbOptions, int nbErrors, int nbUnused) throws IOException { + public static void assertError(OptionParser parser, int nbOptions, int nbErrors, int nbUnused, ParserFailedException e) throws IOException { Writer writer = new StringWriter(); writer.append("\n=============================================== nbOptions:"); writer.append(String.valueOf(nbOptions)); writer.append(", nbErrors:").append(String.valueOf(nbErrors)); writer.append(", nbUnused:").append(String.valueOf(nbUnused)).append(", args:").append(Arrays.toString(parser.getArguments())).append("\n"); - parser.printErrors(writer); - System.out.println(writer.toString()); + if (e != null) { + e.printStackTrace(new PrintWriter(writer)); + } writer.flush(); + System.out.println(writer.toString()); writer.close(); - assertEquals(nbErrors != 0, parser.hasFailed()); + assertEquals(nbOptions, parser.getNbOptions()); - assertEquals(nbUnused, parser.getUnusedArguments().length); - assertEquals(nbErrors, parser.getErrors().length); + assertEquals(nbErrors , e == null?0:e.getNbErrors()); + assertEquals(nbUnused, e==null?0:e.getNbUnsued()); } Index: lutincommandline/src/test/org/codelutin/option/ParserTest.java diff -u lutincommandline/src/test/org/codelutin/option/ParserTest.java:1.3 lutincommandline/src/test/org/codelutin/option/ParserTest.java:1.4 --- lutincommandline/src/test/org/codelutin/option/ParserTest.java:1.3 Sat Mar 15 22:59:29 2008 +++ lutincommandline/src/test/org/codelutin/option/ParserTest.java Sun Mar 16 11:08:27 2008 @@ -3,10 +3,6 @@ import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import static org.codelutin.option.def.ArgumentType.constant; -import static org.codelutin.option.def.ArgumentValueType.STRING; -import org.codelutin.option.def.OptionDefinition; -import org.codelutin.option.def.OptionDefinitionBuilder; import java.io.IOException; import java.io.StringWriter; @@ -119,171 +115,41 @@ } - public static class MyContext extends AbstractContext { - - protected MyContext(String... args) throws IOException, ParserException { - super(args); - } - - public void initI18n() { - } - - public MyParser getParser() { - if (parser == null) { - parser = new MyParser(); - } - return parser; - } - - public Config getConfig() { - return null; - } - } - - public static class MyContext1 extends AbstractContext { - - protected MyContext1(String... args) throws IOException, ParserException { - super(args); - } - - public void initI18n() { - - } - - public MyParser1 getParser() { - if (parser == null) { - parser = new MyParser1(); - } - return parser; - } - - public Config getConfig() { - return null; - } - } - - public static class MyParser extends OptionParser { - - /** - * Les actions concretes implantées dans le parseur. - */ - static public final Class[] ACTION_IMPLEMENTATIONS = new Class[]{ - }; - - /** - * Les configs concretes implantées dans le parseur. - */ - static public final Class[] CONFIG_IMPLEMENTATIONS = new Class[]{ - }; - - static public final OptionKey HELP_OPTION_KEY; - - static { - OptionDefinition[] definitions = buildDefinitions(MyParser.class); - HELP_OPTION_KEY = new OptionKey("help", OptionHelp.class, AbstractHelpAction.class, "", definitions[0]); - } - - protected static void buildDefinitions(OptionDefinitionBuilder builder) { - builder.beginBuilder(1); - builder.beginOption(0); - builder.endOption("help", 0, 1, "--help", "-h"); - } - } - - public static class MyParser1 extends OptionParser { - /** - * Les actions concretes implantées dans le parseur. - */ - static public final Class[] ACTION_IMPLEMENTATIONS = new Class[]{ - }; - - /** - * Les configs concretes implantées dans le parseur. - */ - static public final Class[] CONFIG_IMPLEMENTATIONS = new Class[]{ - }; - static public final OptionKey HELP_OPTION_KEY; - static public final OptionKey MANDATORY1_OPTION_KEY; - static public final OptionKey MANDATORY2_OPTION_KEY; - static public final OptionKey OPTIONAL1_OPTION_KEY; - static public final OptionKey OPTIONAL2_OPTION_KEY; - - static { - OptionDefinition[] definitions = buildDefinitions(MyParser1.class); - - HELP_OPTION_KEY = new OptionKey("help", OptionHelp1.class, AbstractHelp1Action.class, "", definitions[0]); - MANDATORY1_OPTION_KEY = new OptionKey("mandatory1", Option.class, AbstractMandatory1Action.class, "", definitions[1]); - MANDATORY2_OPTION_KEY = new OptionKey("mandatory2", Option.class, AbstractMandatory2Action.class, "", definitions[2]); - OPTIONAL1_OPTION_KEY = new OptionKey("optional1", Option.class, AbstractOptional1Action.class, "", definitions[3]); - OPTIONAL2_OPTION_KEY = new OptionKey("optional2", Option.class, AbstractOptional2Action.class, "", definitions[4]); - } - - protected static void buildDefinitions(OptionDefinitionBuilder builder) { - builder.beginBuilder(5); - builder.beginOption(0); - builder.endOption("help", 0, 1, "--help", "-h"); - - builder.beginOption(1); - builder.beginGroup(1); - builder.addArgument(constant, STRING, "mconstant1", 1, 1); - builder.endGroup(0); - builder.endOption("mandatory1", 1, 1, "--mandatory1", "-m1"); - - builder.beginOption(1); - builder.beginGroup(1); - builder.addArgument(constant, STRING, "mconstant2", 0, 1); - builder.endGroup(-1); - builder.endOption("mandatory2", 1, 1, "--mandatory2", "-m2"); - - builder.beginOption(1); - builder.beginGroup(1); - builder.addArgument(constant, STRING, "oconstant1", 1, 1); - builder.endGroup(0); - builder.endOption("optional1", 0, 1, "--optional1", "-o1"); - - builder.beginOption(1); - builder.beginGroup(1); - builder.addArgument(constant, STRING, "oconstant2", 0, 1); - builder.endGroup(-1); - builder.endOption("optional2", 0, 1, "--optional2", "-o2"); - } - } - protected static OptionParser parser; public void testArgumentsBeforeFirstOption() throws Exception { initParser(MyParser.class); - parser.doParse("first", "help"); - ParserUtilForTest.assertError(parser, 0, 0, 2); - parser.doParse("first", "--help"); - ParserUtilForTest.assertError(parser, 1, 0, 1); + doFailedParse(parser, 0, 0, 2,"first", "help"); + //ParserUtilForTest.assertError(parser, 0, 0, 2, null); + + doFailedParse(parser, 1, 0, 1,"first", "--help"); - parser.doParse("first", "second", "-h"); - ParserUtilForTest.assertError(parser, 1, 0, 2); + doFailedParse(parser, 1, 0, 2,"first","second", "--help"); + + //parser.doParse("first", "--help"); + //ParserUtilForTest.assertError(parser, 1, 0, 1, null); + + //parser.doParse("first", "second", "-h"); + //ParserUtilForTest.assertError(parser, 1, 0, 2, null); } public void testMandatoryGroup() throws Exception { initParser(MyParser1.class); MyParser1 parser = (MyParser1) ParserTest.parser; - parser.doParse("--mandatory1"); - ParserUtilForTest.assertError(parser, 0, 3, 0); + doFailedParse(parser, 0, 3, 0,"--mandatory1"); - parser.doParse("-m1", "-m2"); - ParserUtilForTest.assertError(parser, 1, 2, 0); + doFailedParse(parser, 1, 2, 0,"-m1", "-m2"); - parser.doParse("-m1", "-m2", "--mandatory2"); - ParserUtilForTest.assertError(parser, 1, 3, 0); + doFailedParse(parser, 1, 3, 0,"-m1", "-m2","--mandatory"); - parser.doParse("-m1", "mconstant1"); - ParserUtilForTest.assertError(parser, 1, 1, 0); + doFailedParse(parser, 1, 1, 0,"-m1", "mconstant1"); - parser.doParse("-m1", "mconstant1", "mconstant1", "-m2"); - ParserUtilForTest.assertError(parser, 1, 2, 0); + doFailedParse(parser, 1, 2, 0,"-m1", "mconstant1", "mconstant1", "-m2"); parser.doParse("-m1", "mconstant1", "-m2", "-h"); - ParserUtilForTest.assertError(parser, 3, 0, 0); + ParserUtilForTest.assertError(parser, 3, 0, 0, null); OptionHelp1[] ops = parser.getOptions(MyParser1.HELP_OPTION_KEY); assertEquals(1, ops.length); @@ -298,16 +164,14 @@ public void testTooMuchOptionFound() throws Exception { initParser(MyParser.class); - parser.doParse("-h", "--help"); - ParserUtilForTest.assertError(parser, 1, 1, 0); + doFailedParse(parser, 1, 1, 0,"-h", "--help"); + + doFailedParse(parser, 1, 1, 0,"--help", "--help"); - parser.doParse("--help", "--help"); - ParserUtilForTest.assertError(parser, 1, 1, 0); + doFailedParse(parser, 1, 1, 0,"-h", "-h"); + + doFailedParse(parser, 1, 2, 0,"-h", "-h","-h"); - parser.doParse("-h", "-h"); - ParserUtilForTest.assertError(parser, 1, 1, 0); - parser.doParse("-h", "-h", "-h"); - ParserUtilForTest.assertError(parser, 1, 2, 0); } protected void initParser(Class parserClass) throws IllegalAccessException, InstantiationException { @@ -323,4 +187,14 @@ } } + private void doFailedParse(OptionParser parser, int i, int i1, int i2, String... s) throws IOException { + try { + parser.doParse(s); + fail(); + } catch (ParserFailedException e) { + + ParserUtilForTest.assertError(parser, i, i1, i2,e); + } + } + } Index: lutincommandline/src/test/org/codelutin/option/MyContext.java diff -u /dev/null lutincommandline/src/test/org/codelutin/option/MyContext.java:1.1 --- /dev/null Sun Mar 16 11:08:33 2008 +++ lutincommandline/src/test/org/codelutin/option/MyContext.java Sun Mar 16 11:08:27 2008 @@ -0,0 +1,25 @@ +package org.codelutin.option; + +import java.io.IOException; + +/** @author chemit */ +public class MyContext extends AbstractContext { + + protected MyContext(String... args) throws IOException, ParserFailedException { + super(args); + } + + public void initI18n() { + } + + public MyParser getParser() { + if (parser == null) { + parser = new MyParser(); + } + return parser; + } + + public Config getConfig() { + return null; + } +} Index: lutincommandline/src/test/org/codelutin/option/MyParser.java diff -u /dev/null lutincommandline/src/test/org/codelutin/option/MyParser.java:1.1 --- /dev/null Sun Mar 16 11:08:33 2008 +++ lutincommandline/src/test/org/codelutin/option/MyParser.java Sun Mar 16 11:08:27 2008 @@ -0,0 +1,31 @@ +package org.codelutin.option; + +import org.codelutin.option.ParserTest.AbstractHelpAction; +import org.codelutin.option.ParserTest.OptionHelp; +import org.codelutin.option.def.OptionDefinition; +import org.codelutin.option.def.OptionDefinitionBuilder; + +/** @author chemit */ +public class MyParser extends OptionParser { + + /** Les actions concretes implantées dans le parseur. */ + static public final Class[] ACTION_IMPLEMENTATIONS = new Class[]{ + }; + + /** Les configs concretes implantées dans le parseur. */ + static public final Class[] CONFIG_IMPLEMENTATIONS = new Class[]{ + }; + + static public final OptionKey HELP_OPTION_KEY; + + static { + OptionDefinition[] definitions = buildDefinitions(MyParser.class); + HELP_OPTION_KEY = new OptionKey("help", OptionHelp.class, AbstractHelpAction.class, "", definitions[0]); + } + + protected static void buildDefinitions(OptionDefinitionBuilder builder) { + builder.beginBuilder(1); + builder.beginOption(0); + builder.endOption("help", 0, 1, "--help", "-h"); + } +} Index: lutincommandline/src/test/org/codelutin/option/MyParser1.java diff -u /dev/null lutincommandline/src/test/org/codelutin/option/MyParser1.java:1.1 --- /dev/null Sun Mar 16 11:08:33 2008 +++ lutincommandline/src/test/org/codelutin/option/MyParser1.java Sun Mar 16 11:08:27 2008 @@ -0,0 +1,66 @@ +package org.codelutin.option; + +import org.codelutin.option.ParserTest.AbstractHelp1Action; +import org.codelutin.option.ParserTest.AbstractMandatory1Action; +import org.codelutin.option.ParserTest.AbstractMandatory2Action; +import org.codelutin.option.ParserTest.AbstractOptional1Action; +import org.codelutin.option.ParserTest.AbstractOptional2Action; +import org.codelutin.option.ParserTest.OptionHelp1; +import org.codelutin.option.def.OptionDefinition; +import org.codelutin.option.def.OptionDefinitionBuilder; + +/** @author chemit */ +public class MyParser1 extends OptionParser { + /** Les actions concretes implantées dans le parseur. */ + static public final Class[] ACTION_IMPLEMENTATIONS = new Class[]{ + }; + + /** Les configs concretes implantées dans le parseur. */ + static public final Class[] CONFIG_IMPLEMENTATIONS = new Class[]{ + }; + static public final OptionKey HELP_OPTION_KEY; + static public final OptionKey MANDATORY1_OPTION_KEY; + static public final OptionKey MANDATORY2_OPTION_KEY; + static public final OptionKey OPTIONAL1_OPTION_KEY; + static public final OptionKey OPTIONAL2_OPTION_KEY; + + static { + OptionDefinition[] definitions = buildDefinitions(MyParser1.class); + + HELP_OPTION_KEY = new OptionKey("help", OptionHelp1.class, AbstractHelp1Action.class, "", definitions[0]); + MANDATORY1_OPTION_KEY = new OptionKey("mandatory1", Option.class, AbstractMandatory1Action.class, "", definitions[1]); + MANDATORY2_OPTION_KEY = new OptionKey("mandatory2", Option.class, AbstractMandatory2Action.class, "", definitions[2]); + OPTIONAL1_OPTION_KEY = new OptionKey("optional1", Option.class, AbstractOptional1Action.class, "", definitions[3]); + OPTIONAL2_OPTION_KEY = new OptionKey("optional2", Option.class, AbstractOptional2Action.class, "", definitions[4]); + } + + protected static void buildDefinitions(OptionDefinitionBuilder builder) { + builder.beginBuilder(5); + builder.beginOption(0); + builder.endOption("help", 0, 1, "--help", "-h"); + + builder.beginOption(1); + builder.beginGroup(1); + builder.addArgument(org.codelutin.option.def.ArgumentType.constant, org.codelutin.option.def.ArgumentValueType.STRING, "mconstant1", 1, 1); + builder.endGroup(0); + builder.endOption("mandatory1", 1, 1, "--mandatory1", "-m1"); + + builder.beginOption(1); + builder.beginGroup(1); + builder.addArgument(org.codelutin.option.def.ArgumentType.constant, org.codelutin.option.def.ArgumentValueType.STRING, "mconstant2", 0, 1); + builder.endGroup(-1); + builder.endOption("mandatory2", 1, 1, "--mandatory2", "-m2"); + + builder.beginOption(1); + builder.beginGroup(1); + builder.addArgument(org.codelutin.option.def.ArgumentType.constant, org.codelutin.option.def.ArgumentValueType.STRING, "oconstant1", 1, 1); + builder.endGroup(0); + builder.endOption("optional1", 0, 1, "--optional1", "-o1"); + + builder.beginOption(1); + builder.beginGroup(1); + builder.addArgument(org.codelutin.option.def.ArgumentType.constant, org.codelutin.option.def.ArgumentValueType.STRING, "oconstant2", 0, 1); + builder.endGroup(-1); + builder.endOption("optional2", 0, 1, "--optional2", "-o2"); + } +} Index: lutincommandline/src/test/org/codelutin/option/MyContext1.java diff -u /dev/null lutincommandline/src/test/org/codelutin/option/MyContext1.java:1.1 --- /dev/null Sun Mar 16 11:08:33 2008 +++ lutincommandline/src/test/org/codelutin/option/MyContext1.java Sun Mar 16 11:08:27 2008 @@ -0,0 +1,28 @@ +package org.codelutin.option; + +import org.codelutin.option.MyParser1; + +import java.io.IOException; + +/** @author chemit */ +public class MyContext1 extends AbstractContext { + + protected MyContext1(String... args) throws IOException, ParserFailedException { + super(args); + } + + public void initI18n() { + + } + + public MyParser1 getParser() { + if (parser == null) { + parser = new MyParser1(); + } + return parser; + } + + public Config getConfig() { + return null; + } +}