Index: lutinutil/src/test/org/codelutin/util/OptionDefinitionParserTest.java
diff -u /dev/null lutinutil/src/test/org/codelutin/util/OptionDefinitionParserTest.java:1.1
--- /dev/null Mon Nov 19 19:56:52 2007
+++ lutinutil/src/test/org/codelutin/util/OptionDefinitionParserTest.java Mon Nov 19 19:56:47 2007
@@ -0,0 +1,203 @@
+package org.codelutin.util;
+
+import junit.framework.TestCase;
+import org.codelutin.i18n.I18n;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+
+/**
+ * OptionDefinitionParser Tester.
+ *
+ * @author chemit
+ * @version 1.0
+ * @since
11/18/2007
+ */
+@SuppressWarnings({"DuplicateStringLiteralInspection", "HardCodedStringLiteral"})
+public class OptionDefinitionParserTest extends TestCase {
+
+ private static final String HERE = new File("").getAbsolutePath();
+ private static final String PROPERTIES_FILE_PATH = HERE + "/target/test-classes/";
+
+ static boolean first = false;
+
+ static {
+ initI18n();
+ }
+
+ @SuppressWarnings({"HardCodedStringLiteral"})
+ static void initI18n() {
+ if (!first) {
+ String language = System.getProperty("user.language");
+ I18n.setRecordFilePath("/tmp/language.properties");
+ I18n.init(language, "fr");
+ first = true;
+ }
+ }
+
+ OptionDefinitionParser parser;
+ File file;
+ String optionName;
+
+ public void testNoOptions() throws Exception {
+ file = initFileMock("testNoOptions.properties", "");
+ parser = OptionDefinitionParser.doParse(file);
+ assertEquals(0, parser.getDefinitions().length);
+ }
+
+ public void testOneOption() throws Exception {
+
+ String optionName;
+ optionName = "testOneOptions0";
+ file = initFileMock(optionName, "--testOneOptions0", "with no args and one alias");
+ parser = OptionDefinitionParser.doParse(file);
+ assertEquals(1, parser.getDefinitions().length);
+ assertEquals(1, parser.getDefinitions()[0].getAlias().length);
+ assertEquals("--" + optionName, parser.getDefinitions()[0].getAlias()[0]);
+ assertEquals(0, parser.getDefinitions()[0].getArguments().length);
+
+ optionName = "testOneOptions00";
+ file = initFileMock(optionName, "--testOneOptions00|-one0", "with no args and two alias");
+ parser = OptionDefinitionParser.doParse(file);
+ assertEquals(1, parser.getDefinitions().length);
+ assertEquals(2, parser.getDefinitions()[0].getAlias().length);
+ assertEquals("--" + optionName, parser.getDefinitions()[0].getAlias()[0]);
+ assertEquals("-one0", parser.getDefinitions()[0].getAlias()[1]);
+ assertEquals(0, parser.getDefinitions()[0].getArguments().length);
+
+ optionName = "testOneOptions000";
+ file = initFileMock(optionName, "--testOneOptions000|-one0|-o0", "with no args and three alias");
+ parser = OptionDefinitionParser.doParse(file);
+ assertEquals(1, parser.getDefinitions().length);
+ assertEquals(3, parser.getDefinitions()[0].getAlias().length);
+ assertEquals("--" + optionName, parser.getDefinitions()[0].getAlias()[0]);
+ assertEquals("-one0", parser.getDefinitions()[0].getAlias()[1]);
+ assertEquals("-o0", parser.getDefinitions()[0].getAlias()[2]);
+ assertEquals(0, parser.getDefinitions()[0].getArguments().length);
+
+ optionName = "testOneOptions1";
+ file = initFileMock(optionName, "--testOneOptions1|-one1 ", "with one group of three constant and two alias");
+ parser = OptionDefinitionParser.doParse(file);
+ assertEquals(1, parser.getDefinitions().length);
+ assertEquals(2, parser.getDefinitions()[0].getAlias().length);
+ assertEquals("--" + optionName, parser.getDefinitions()[0].getAlias()[0]);
+ assertEquals("-one1", parser.getDefinitions()[0].getAlias()[1]);
+ assertEquals(3, parser.getDefinitions()[0].getArguments().length);
+
+
+ optionName = "testOneOptions2";
+ file = initFileMock(optionName, "--testOneOptions2|-one2 ", "with one group of 5 valued args and two alias");
+ parser = OptionDefinitionParser.doParse(file);
+ assertEquals(1, parser.getDefinitions().length);
+ assertEquals(2, parser.getDefinitions()[0].getAlias().length);
+ assertEquals("--" + optionName, parser.getDefinitions()[0].getAlias()[0]);
+ assertEquals("-one2", parser.getDefinitions()[0].getAlias()[1]);
+ assertEquals(5, parser.getDefinitions()[0].getArguments().length);
+
+ optionName = "testOneOptions3";
+ file = initFileMock(optionName, "--testOneOptions3|-one3 ", "with one group of 6 namedAndValued args and two alias");
+ parser = OptionDefinitionParser.doParse(file);
+ assertEquals(1, parser.getDefinitions().length);
+ assertEquals(2, parser.getDefinitions()[0].getAlias().length);
+ assertEquals("--" + optionName, parser.getDefinitions()[0].getAlias()[0]);
+ assertEquals("-one3", parser.getDefinitions()[0].getAlias()[1]);
+ assertEquals(6, parser.getDefinitions()[0].getArguments().length);
+
+ optionName = "testOneOptions4";
+ file = initFileMock(optionName, "--testOneOptions4|-one4 ", "with one group of 14 args (3 constants, 5 valued, 6 namedAndValued) and two alias");
+ parser = OptionDefinitionParser.doParse(file);
+ printParserDetails();
+
+ assertEquals(1, parser.getDefinitions().length);
+ assertEquals(2, parser.getDefinitions()[0].getAlias().length);
+ assertEquals("--" + optionName, parser.getDefinitions()[0].getAlias()[0]);
+ assertEquals("-one4", parser.getDefinitions()[0].getAlias()[1]);
+ assertEquals(14, parser.getDefinitions()[0].getArguments().length);
+ }
+
+ private void printParserDetails() throws IOException {
+ Writer writer = new StringWriter();
+ parser.printDetails(writer);
+ System.out.println(writer.toString());
+ writer.flush();
+ writer.close();
+ }
+
+ public void testOneOptionArgumentCardinalite() throws Exception {
+
+ optionName = "testArgumentConstantCardinalite00005";
+ file = initFileMock(optionName, "-testArgumentConstantCardinalite00005 ", "ok with 1 mandatory constant argument cardinalite : 1,1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(1, 0);
+
+ optionName = "testArgumentConstantCardinalite00015";
+ file = initFileMock(optionName, "-testArgumentConstantCardinalite00015 [constant]", "ok with 1 optional constant argument cardinalite : 0,1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(1, 0);
+
+ optionName = "testArgumentValuedCardinalite00003";
+ file = initFileMock(optionName, "-testArgumentValuedCardinalite00003 ", "ok with a 1,+ mandatory valued argument cardinalite : +");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(1, 0);
+
+ optionName = "testArgumentValuedCardinalite00004";
+ file = initFileMock(optionName, "-testArgumentValuedCardinalite00004 ", "ok with a 0,+ mandatory valued argument cardinalite : 1,-1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(1, 0);
+
+ optionName = "testArgumentValuedCardinalite00010";
+ file = initFileMock(optionName, "-testArgumentValuedCardinalite00010 [string:string{0,5}]", "ok with 0,* optional valued argument cardinalite 0,5");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(1, 0);
+
+ optionName = "testArgumentValuedCardinalite00011";
+ file = initFileMock(optionName, "-testArgumentValuedCardinalite00011 [string:string*]", "ok with a 0,* optional valued argument cardinalite *");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(1, 0);
+ }
+
+ protected void assertError(int nbOptions, int nbErrors) throws IOException {
+ Writer writer = new StringWriter();
+ parser.printErrors(writer);
+ System.out.println(writer.toString());
+ writer.flush();
+ writer.close();
+ assertEquals(nbErrors != 0, parser.hasFailed());
+ assertEquals(nbOptions, parser.getDefinitions().length);
+ assertEquals(nbErrors, parser.getErrors().size());
+ }
+
+ @SuppressWarnings({"HardCodedStringLiteral"})
+ protected static File initFileMock(String optionName, String def, String description) throws IOException {
+ StringBuilder builder = new StringBuilder();
+ builder.append(optionName).append(".definition=").append(def).append("\n");
+ builder.append(optionName).append(".description=").append(description).append("\n");
+ String content = builder.toString();
+ return initFileMock(optionName + ".properties", content);
+ }
+
+ @SuppressWarnings({"HardCodedStringLiteral"})
+ protected static File initFileMock(String optionName, String def, String description, String def2, String description2) throws IOException {
+ StringBuilder builder = new StringBuilder();
+ builder.append(optionName).append(".definition=").append(def).append("\n");
+ builder.append(optionName).append(".description=").append(description).append("\n");
+ builder.append(optionName).append("2.definition=").append(def2).append("\n");
+ builder.append(optionName).append("2.description=").append(description2).append("\n");
+ String content = builder.toString();
+ return initFileMock(optionName + ".properties", content);
+ }
+
+ protected static File initFileMock(String s, String content) throws IOException {
+ File file = new File(PROPERTIES_FILE_PATH + s);
+ if (!file.getParentFile().exists()) {
+ file.getParentFile().mkdirs();
+ }
+ file.createNewFile();
+ FileUtil.writeString(file, content);
+ file.deleteOnExit();
+ return file;
+ }
+
+}
Index: lutinutil/src/test/org/codelutin/util/OptionDefinitionParserBadTest.java
diff -u /dev/null lutinutil/src/test/org/codelutin/util/OptionDefinitionParserBadTest.java:1.1
--- /dev/null Mon Nov 19 19:56:52 2007
+++ lutinutil/src/test/org/codelutin/util/OptionDefinitionParserBadTest.java Mon Nov 19 19:56:47 2007
@@ -0,0 +1,237 @@
+package org.codelutin.util;
+
+import junit.framework.TestCase;
+import static org.codelutin.util.OptionDefinitionParserTest.initFileMock;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+
+/**
+ * OptionDefinitionParser Tester.
+ *
+ * @author chemit
+ * @version 1.0
+ * @since 11/18/2007
+ */
+@SuppressWarnings({"DuplicateStringLiteralInspection", "HardCodedStringLiteral"})
+public class OptionDefinitionParserBadTest extends TestCase {
+
+
+ static {
+ OptionDefinitionParserTest.initI18n();
+ }
+
+ OptionDefinitionParser parser;
+ File file;
+ String optionName;
+
+ public void testOneOptionNoDescription() throws Exception {
+
+ optionName = "testOneOptionsNoDescription";
+ file = initFileMock(optionName, "-testNoDescription", "");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testOneOptionsNoDefinition";
+ file = initFileMock(optionName, "", "no definition!");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ }
+
+ public void testOneOptionBadAlias() throws Exception {
+
+ optionName = "testOneOptionsBad0";
+ file = initFileMock(optionName, "testOneOption", "with no alias (unvalid one)");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testOneOptionsBad00";
+ file = initFileMock(optionName, "-testOneOptionsBad00|t", "bad alias (no - at prefix)");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testOneOptionsBad000";
+ file = initFileMock(optionName, "-testOneOptionsBad00|-t|-t2|-t3|-t4", "too much alias");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testOneOptionsBad0000";
+ file = initFileMock(optionName, "-testOneOptionsBad00|-t|-t2|t3|-t4|-t5|t55", "too much alias and bad one");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testOneOptionsBad00000";
+ file = initFileMock(optionName, "-testOneOptionsBad000 {0,2}", "ok with no args ", "-testOneOptionsBad000 {0,4}", "duplicated alias -testOneOptionsBad000");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(1, 1);
+
+ optionName = "testOneOptionsBad000000";
+ file = initFileMock(optionName, "-testOneOptionsBad000|-t0", "ok with no args ", "-testOneOptionsBad001|-t0", "duplicated alias -t0");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(1, 1);
+ }
+
+ public void testOneOptionBadCardinalite() throws Exception {
+
+ optionName = "testBadCardinalite0";
+ file = initFileMock(optionName, "-testBadCardinalite0 {-1,1}", "with a bad min card -1 ");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadCardinalite1";
+ file = initFileMock(optionName, "-testBadCardinalite1 {1,-2}", "with a bad max card -2 ");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadCardinalite2";
+ file = initFileMock(optionName, "-testBadCardinalite2 {1,0}", "with a bad max card 0 < min 1 ");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadCardinalite3";
+ file = initFileMock(optionName, "-testBadCardinalite3 {5,3}", "with a bad max < min ");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ }
+
+ public void testOneOptionBadConstantArgumentCardinalite() throws Exception {
+ optionName = "testBadArgumentConstantCardinalite0";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite0 ", "with a max cardinalite of an argument to zero");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00 ", "with a min cardinalite of an argument < 0");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite000";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite000 ", "with a max cardinalite of an argument < -1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite0000";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite0000 ", "with a max cardinalite of an argument < min");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00000";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00000 ", "with a none mandatory constant argument cardinalite 0,1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00001";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00001 ", "with a none mandatory constant argument cardinalite *");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00002";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00002 ", "with a none 1,1 mandatory constant argument cardinalite : 1,2");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00003";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00003 ", "with a none 1,1 mandatory constant argument cardinalite : +");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00004";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00004 ", "with a none 1,1 mandatory constant argument cardinalite : 1,-1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00010";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00010 [constant{0,5}]", "with a none 0,1 optional constant argument cardinalite 0,5");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00011";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00011 [constant*]", "with a none 0,1 optional constant argument cardinalite *");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00012";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00012 [constant{1,2}]", "with a none 0,1 optional constant argument cardinalite : 1,2");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00013";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00013 [constant+]", "with a none 0,1 optional constant argument cardinalite : +");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentConstantCardinalite00014";
+ file = initFileMock(optionName, "-testBadArgumentConstantCardinalite00014 [constant{1,-1}]", "with a none 0,1 optional constant argument cardinalite : 1,-1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+ }
+
+ public void testOneOptionBadValuedArgumentCardinalite() throws Exception {
+ optionName = "testBadArgumentValuedCardinalite0";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalite0 ", "with a max valued cardinalite of an argument to zero");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentValuedCardinalite00";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalite00 ", "with a min valued cardinalite of an argument < 0");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentValuedCardinalite000";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalit000 ","with a none 1,+ mandatory valued argument cardinalite cardinalite 0,-1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentValuedCardinalite0000";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalite0000 ", "with a max valued cardinalite of an argument < min");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentValuedCardinalite00000";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalite00000 ", "with a none 1,+ mandatory valued argument cardinalite 0,1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentValuedCardinalite00001";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalite00001 ", "with a none 1,+ mandatory valued argument cardinalite *");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentValuedCardinalite00002";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalite00002 ", "with a none 1,+ mandatory valued argument cardinalite : 1,2");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testArgumentValuedCardinalite00012";
+ file = initFileMock(optionName, "-testArgumentValuedCardinalite00012 [string:string{1,2}]", "with a none 0,* optional valued argument cardinalite : 1,2");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentValuedCardinalite00013";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalite00013 [string:string+]", "with a none 0,* optional valued argument cardinalite : +");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ optionName = "testBadArgumentValuedCardinalite00014";
+ file = initFileMock(optionName, "-testBadArgumentValuedCardinalite00014 [string:string{1,-1}]", "with a none 0,* optional valued argument cardinalite : 1,-1");
+ parser = OptionDefinitionParser.doParse(file);
+ assertError(0, 1);
+
+ }
+
+ protected void assertError(int nbOptions, int nbErrors) throws IOException {
+ Writer writer = new StringWriter();
+ parser.printErrors(writer);
+ System.out.println(writer.toString());
+ writer.flush();
+ writer.close();
+ assertEquals(nbErrors != 0, parser.hasFailed());
+ assertEquals(nbOptions, parser.getDefinitions().length);
+ assertEquals(nbErrors, parser.getErrors().size());
+ }
+
+}
\ No newline at end of file