[Japi-cvs] SF.net SVN: japi: [554] libs/argparser/trunk/src
Status: Beta
Brought to you by:
christianhujer
|
From: <chr...@us...> - 2007-07-29 19:22:18
|
Revision: 554
http://japi.svn.sourceforge.net/japi/?rev=554&view=rev
Author: christianhujer
Date: 2007-07-29 12:22:12 -0700 (Sun, 29 Jul 2007)
Log Message:
-----------
[ 1758846 ] Multiple command file inclusion fails
Modified Paths:
--------------
libs/argparser/trunk/src/net/sf/japi/io/args/ArgParser.java
libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest.java
Added Paths:
-----------
libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileMaster
libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave1
libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave2
Modified: libs/argparser/trunk/src/net/sf/japi/io/args/ArgParser.java
===================================================================
--- libs/argparser/trunk/src/net/sf/japi/io/args/ArgParser.java 2007-07-15 10:32:03 UTC (rev 553)
+++ libs/argparser/trunk/src/net/sf/japi/io/args/ArgParser.java 2007-07-29 19:22:12 UTC (rev 554)
@@ -19,6 +19,7 @@
package net.sf.japi.io.args;
+import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.lang.reflect.InvocationTargetException;
@@ -77,7 +78,7 @@
this.command = command;
commandClass = command.getClass();
initMethods();
- final List<String> argList = getAllArguments(Arrays.asList(args));
+ final List<String> argList = getAllArguments(new File("."), Arrays.asList(args));
argIterator = argList.listIterator();
parse();
checkRequiredMethods();
@@ -95,10 +96,11 @@
/**
* Returns a list of all arguments after parsing arguments files.
+ * @param context File relative to which @-inclusions have to be resolved.
* @param args arguments before parsing argument files.
* @return all arguments after parsing argument files.
*/
- public List<String> getAllArguments(@NotNull final List<String> args) {
+ public List<String> getAllArguments(@NotNull final File context, @NotNull final List<String> args) {
final List<String> argList = new ArrayList<String>(args);
for (final ListIterator<String> iterator = argList.listIterator(); iterator.hasNext();) {
final String arg = iterator.next();
@@ -107,7 +109,9 @@
}
if (arg.startsWith("@")) {
iterator.remove();
- for (final String insertArg : getAllArguments(readFromFile(arg.substring(1)))) {
+ final String filename = arg.substring(1);
+ final File file = new File(context.getParentFile(), filename);
+ for (final String insertArg : getAllArguments(file, readFromFile(file))) {
iterator.add(insertArg);
}
}
@@ -117,14 +121,14 @@
/**
* Returns a tokenized unparsed list of arguments from an arguments file.
- * @param filename Argument file to read.
+ * @param file Argument file to read.
* @return all arguments from that argument file.
*/
- public List<String> readFromFile(@NotNull final String filename) {
+ public List<String> readFromFile(@NotNull final File file) {
final List<String> args = new ArrayList<String>();
final TokenReader in;
try {
- in = new TokenReader(new FileInputStream(filename));
+ in = new TokenReader(new FileInputStream(file));
} catch (final FileNotFoundException e) {
// TODO TODO TODO TODO TODO
return args;
Modified: libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest.java
===================================================================
--- libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest.java 2007-07-15 10:32:03 UTC (rev 553)
+++ libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest.java 2007-07-29 19:22:12 UTC (rev 554)
@@ -262,6 +262,26 @@
}
/**
+ * Tests that including multiple command files from a command file works.
+ * @throws RequiredOptionsMissingException (unexpected)
+ * @throws TerminalException (unexpected)
+ * @throws UnknownOptionException (unexpected)
+ * @throws MissingArgumentException (unexpected)
+ * @see <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1758846&group_id=149894&atid=776737">[ 1758846 ] Multiple command file inclusion fails</a>
+ */
+ @Test
+ public void testOptionsFromFileMultiple() throws RequiredOptionsMissingException, MissingArgumentException, TerminalException, UnknownOptionException {
+ final MockCommand command = new MockCommand();
+ ArgParser.parseAndRun(command, "@src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileMaster");
+ final List<String> args = command.getArgs();
+ Assert.assertEquals("Option value must be stored.", "fooInput", command.getInput());
+ Assert.assertTrue("Run must be called even with zero arguments.", command.isRunCalled());
+ Assert.assertEquals("Arguments must be stored.", 2, args.size());
+ Assert.assertEquals("Argument foo must be stored.", "foo", args.get(0));
+ Assert.assertEquals("Argument bar must be stored.", "bar", args.get(1));
+ }
+
+ /**
* Tests that single dash options also work.
* @throws RequiredOptionsMissingException (unexpected)
* @throws TerminalException (unexpected)
Added: libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileMaster
===================================================================
--- libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileMaster (rev 0)
+++ libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileMaster 2007-07-29 19:22:12 UTC (rev 554)
@@ -0,0 +1,3 @@
+@ArgParserTest_MultipleOptionsFileSlave1
+@ArgParserTest_MultipleOptionsFileSlave2
+-i fooInput
\ No newline at end of file
Property changes on: libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileMaster
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ LF
Added: libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave1
===================================================================
--- libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave1 (rev 0)
+++ libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave1 2007-07-29 19:22:12 UTC (rev 554)
@@ -0,0 +1 @@
+foo
\ No newline at end of file
Property changes on: libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave1
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ LF
Added: libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave2
===================================================================
--- libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave2 (rev 0)
+++ libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave2 2007-07-29 19:22:12 UTC (rev 554)
@@ -0,0 +1 @@
+bar
\ No newline at end of file
Property changes on: libs/argparser/trunk/src/test/net/sf/japi/io/args/ArgParserTest_MultipleOptionsFileSlave2
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ LF
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|