return targetFiles;
}
- private static final int OPTS_LEN = 19;
+ private static final int OPTS_LEN = 13;
/**
* Parse command line and set preferences.
*
String arg;
LongOpt[] longOpts = new LongOpt[OPTS_LEN];
- StringBuffer debugLevelVal = new StringBuffer();
StringBuffer startVal = new StringBuffer();
StringBuffer sizeVal = new StringBuffer();
- StringBuffer preFilterName = new StringBuffer();
- StringBuffer postFilterName = new StringBuffer();
longOpts[0] = new LongOpt("stdout", LongOpt.NO_ARGUMENT, null, 'c');
longOpts[1] = new LongOpt("decompress", LongOpt.NO_ARGUMENT, null, 'd');
longOpts[2] = new LongOpt("force", LongOpt.NO_ARGUMENT, null, 'f');
longOpts[5] = new LongOpt("list", LongOpt.NO_ARGUMENT, null, 'l');
longOpts[6] = new LongOpt("license", LongOpt.NO_ARGUMENT, null, 'L');
longOpts[7] = new LongOpt("test", LongOpt.NO_ARGUMENT, null, 't');
- longOpts[8] = new LongOpt("verbose", LongOpt.NO_ARGUMENT, null, 'v');
- longOpts[9] = new LongOpt("version", LongOpt.NO_ARGUMENT, null, 'V');
- longOpts[10] = new LongOpt("debug", LongOpt.REQUIRED_ARGUMENT, debugLevelVal, 'D');
- longOpts[11] = new LongOpt("start", LongOpt.REQUIRED_ARGUMENT, startVal, 's');
- longOpts[12] = new LongOpt("size", LongOpt.REQUIRED_ARGUMENT, sizeVal, 'e');
- longOpts[15] = new LongOpt("pre", LongOpt.REQUIRED_ARGUMENT, preFilterName, 'p');
- longOpts[16] = new LongOpt("post", LongOpt.REQUIRED_ARGUMENT, postFilterName, 'P');
- longOpts[17] = new LongOpt("fast", LongOpt.NO_ARGUMENT, null, '1');
- longOpts[18] = new LongOpt("best", LongOpt.NO_ARGUMENT, null, '9');
+ longOpts[8] = new LongOpt("version", LongOpt.NO_ARGUMENT, null, 'v');
+ longOpts[9] = new LongOpt("start", LongOpt.REQUIRED_ARGUMENT, startVal, 's');
+ longOpts[10] = new LongOpt("size", LongOpt.REQUIRED_ARGUMENT, sizeVal, 'e');
+ longOpts[11] = new LongOpt("fast", LongOpt.NO_ARGUMENT, null, '1');
+ longOpts[12] = new LongOpt("best", LongOpt.NO_ARGUMENT, null, '9');
assert(longOpts.length == OPTS_LEN);
Getopt g = new Getopt("dictzip", argv, "cdfhklLe:E:s:S:tvVD:p:P:169", longOpts);
g.setOpterr(false); // We'll do our own error handling
break;
case 'h':
System.out.println(AppConsts.getNameAndVersion());
- System.out.println(MessageFormat.format(getString("help.copyright.template"),
- AppConsts.YEAR, AppConsts.AUTHORS));
+ showCopyright();
System.out.println();
- System.out.println(MessageFormat.format(getString("help.message"),
- AppConsts.NAME));
- break;
+ showHelp();
+ return 1;
case 'k':
options.setKeep(true);
break;
break;
case 'L':
System.out.println(AppConsts.getNameAndVersion());
- System.out.println(MessageFormat.format(getString("help.copyright.template"),
- AppConsts.YEAR, AppConsts.AUTHORS));
+ showCopyright();
System.out.println();
System.out.println(getString("help.license"));
- break;
+ return 1;
case 'e':
arg = g.getOptarg();
- options.setSize(Integer.getInteger(arg));
+ try {
+ options.setSize(parseNumber(arg.trim()));
+ } catch (NumberFormatException nfe) {
+ System.err.println(getString("commandline.error.num_format"));
+ showHelp();
+ return 2;
+ }
break;
case 's':
arg = g.getOptarg();
- options.setStart(Integer.getInteger(arg));
+ try {
+ options.setStart(parseNumber(arg.trim()));
+ } catch (NumberFormatException nfe) {
+ System.err.println(getString("commandline.error.num_format"));
+ showHelp();
+ return 2;
+ }
break;
case 't':
options.setTest(true);
break;
case 'v':
System.out.println(AppConsts.getNameAndVersion());
- System.out.println(MessageFormat.format(getString("help.copyright.template"),
- AppConsts.YEAR, AppConsts.AUTHORS));
- System.out.println();
- break;
+ showCopyright();
+ return 1;
case ':':
- System.out.println("Doh! You need an argument for option "
+ System.err.println("Doh! You need an argument for option "
+ (char) g.getOptopt());
- break;
+ showHelp();
+ return 2;
case '?':
System.out.println("The option '" + (char) g.getOptopt()
+ "' is not valid");
- return 1;
+ showHelp();
+ return 2;
default:
System.out.println("getopt() returned " + c);
break;
targetFiles.addAll(Arrays.asList(argv).subList(g.getOptind(), argv.length));
return 0;
}
+
+ private static void showCopyright() {
+ System.out.println(MessageFormat.format(getString("help.copyright.template"),
+ AppConsts.YEAR, AppConsts.AUTHORS));
+ }
+ private static void showHelp() {
+ System.out.println(MessageFormat.format(getString("help.message"),
+ AppConsts.NAME));
+ }
+
+ private static Integer parseNumber(final String arg) throws NumberFormatException {
+ if (arg.startsWith("0x")) {
+ System.err.println(arg.substring(2));
+ return Integer.parseInt(arg.substring(2), 16);
+ } else if (arg.startsWith("0")) {
+ return Integer.parseInt(arg, 8);
+ } else {
+ return Integer.parseInt(arg);
+ }
+ }
}
final String[] argv = new String[1];
argv[0] = "-h";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 1);
}
@Test
final String[] argv = new String[1];
argv[0] = "--help";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 1);
}
@Test
final String[] argv = new String[1];
argv[0] = "-v";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 1);
}
@Test
final String[] argv = new String[1];
argv[0] = "--version";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 1);
}
@Test
final String[] argv = new String[1];
argv[0] = "-L";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 1);
}
@Test
final String[] argv = new String[1];
argv[0] = "--license";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 1);
}
@Test
final String[] argv = new String[1];
argv[0] = "-k";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isKeep());
}
final String[] argv = new String[1];
argv[0] = "--keep";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isKeep());
}
final String[] argv = new String[1];
argv[0] = "-c";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isStdout());
}
final String[] argv = new String[1];
argv[0] = "--stdout";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isStdout());
}
final String[] argv = new String[1];
argv[0] = "-f";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isForce());
}
final String[] argv = new String[1];
argv[0] = "--force";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isForce());
}
final String[] argv = new String[1];
argv[0] = "-d";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isDecompress());
}
final String[] argv = new String[1];
argv[0] = "--decompress";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isDecompress());
}
final String[] argv = new String[1];
argv[0] = "-l";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isList());
}
final String[] argv = new String[1];
argv[0] = "--list";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.options.isList());
}
final String[] argv = new String[1];
argv[0] = "-1";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertEquals(commandLine.options.getLevel(), DictZipHeader.CompressionLevel.BEST_SPEED);
}
final String[] argv = new String[1];
argv[0] = "--fast";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertEquals(commandLine.options.getLevel(), DictZipHeader.CompressionLevel.BEST_SPEED);
}
final String[] argv = new String[1];
argv[0] = "-9";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertEquals(commandLine.options.getLevel(), DictZipHeader.CompressionLevel.BEST_COMPRESSION);
}
final String[] argv = new String[1];
argv[0] = "--best";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertEquals(commandLine.options.getLevel(), DictZipHeader.CompressionLevel.BEST_COMPRESSION);
}
final String[] argv = new String[1];
argv[0] = "-6";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertEquals(commandLine.options.getLevel(), DictZipHeader.CompressionLevel.DEFAULT_COMPRESSION);
}
final String[] argv = new String[1];
argv[0] = "target_filename";
CommandLine commandLine = new CommandLine();
- commandLine.parse(argv);
+ assertEquals(commandLine.parse(argv), 0);
assertTrue(commandLine.getTargetFiles().equals(new ArrayList<String> (){{add("target_filename");}}));
}
+ @Test
+ public void testParseNumber_hex() throws NumberFormatException {
+ final String[] argv = new String[1];
+ argv[0] = "-s 0x123A";
+ CommandLine commandLine = new CommandLine();
+ assertEquals(commandLine.parse(argv), 0);
+ assertEquals(commandLine.options.getStart(), 0x123A);
+ }
+
+ @Test
+ public void testParseNumber_oct() throws NumberFormatException {
+ final String[] argv = new String[1];
+ argv[0] = "-s 01237";
+ CommandLine commandLine = new CommandLine();
+ assertEquals(commandLine.parse(argv), 0);
+ assertEquals(commandLine.options.getStart(), 671);
+ }
+
+ @Test
+ public void testParseNumber_dec() throws NumberFormatException {
+ final String[] argv = new String[1];
+ argv[0] = "-s 1239";
+ CommandLine commandLine = new CommandLine();
+ assertEquals(commandLine.parse(argv), 0);
+ assertEquals(commandLine.options.getStart(), 1239);
+ }
+
+ @Test
+ public void testParse_size() throws NumberFormatException {
+ final String[] argv = new String[1];
+ argv[0] = "-e 1239";
+ CommandLine commandLine = new CommandLine();
+ assertEquals(commandLine.parse(argv), 0);
+ assertEquals(commandLine.options.getSize(), 1239);
+ }
+
+
+ @Test
+ public void testParse_start_badnum() throws NumberFormatException {
+ final String[] argv = new String[1];
+ argv[0] = "-s 123A";
+ CommandLine commandLine = new CommandLine();
+ assertEquals(commandLine.parse(argv), 2);
+ }
+
+ @Test
+ public void testParse_start_badnumOct() throws NumberFormatException {
+ final String[] argv = new String[1];
+ argv[0] = "-s 0Q23A";
+ CommandLine commandLine = new CommandLine();
+ assertEquals(commandLine.parse(argv), 2);
+ }
+
+ @Test
+ public void testParse_start_badnumHex() throws NumberFormatException {
+ final String[] argv = new String[1];
+ argv[0] = "-s 0xQ23A";
+ CommandLine commandLine = new CommandLine();
+ assertEquals(commandLine.parse(argv), 2);
+ }
}
\ No newline at end of file