Skip to content

Commit

Permalink
Added PathOptionHandler for automatic parsing of Path objects in java 7
Browse files Browse the repository at this point in the history
  • Loading branch information
madkrupt committed Jun 7, 2013
1 parent ad5e572 commit b972e18
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 0 deletions.
3 changes: 3 additions & 0 deletions args4j/src/org/kohsuke/args4j/CmdLineParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.net.URL;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
Expand All @@ -28,6 +29,7 @@
import org.kohsuke.args4j.spi.DoubleOptionHandler;
import org.kohsuke.args4j.spi.EnumOptionHandler;
import org.kohsuke.args4j.spi.FileOptionHandler;
import org.kohsuke.args4j.spi.PathOptionHandler;
import org.kohsuke.args4j.spi.FloatOptionHandler;
import org.kohsuke.args4j.spi.IntOptionHandler;
import org.kohsuke.args4j.spi.LongOptionHandler;
Expand Down Expand Up @@ -551,6 +553,7 @@ private static Constructor<? extends OptionHandler> getConstructor(Class<? exten
registerHandler(Boolean.class,BooleanOptionHandler.class);
registerHandler(boolean.class,BooleanOptionHandler.class);
registerHandler(File.class,FileOptionHandler.class);
registerHandler(Path.class, PathOptionHandler.class);
registerHandler(URL.class, URLOptionHandler.class);
registerHandler(URI.class, URIOptionHandler.class);
registerHandler(Integer.class,IntOptionHandler.class);
Expand Down
35 changes: 35 additions & 0 deletions args4j/src/org/kohsuke/args4j/spi/PathOptionHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.kohsuke.args4j.spi;

import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.OptionDef;

import java.nio.file.Path;
import java.nio.file.Paths;

/**
* Created with IntelliJ IDEA.
* User: kmahoney
* Date: 6/6/13
* Time: 8:17 AM
*/
public class PathOptionHandler extends OneArgumentOptionHandler<Path> {
public PathOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super Path> setter) {
super(parser, option, setter);
}

@Override
protected Path parse(String argument) throws NumberFormatException, CmdLineException {
try {
return Paths.get(argument);
}
catch (Exception e) {
throw new CmdLineException(owner, "Failed to Parse Path: " + argument, e);
}
}

@Override
public String getDefaultMetaVariable() {
return "PATH";
}
}
54 changes: 54 additions & 0 deletions args4j/test/org/kohsuke/args4j/spi/PathOptionHandlerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package org.kohsuke.args4j.spi;

import junit.framework.TestCase;
import org.kohsuke.args4j.CmdLineException;

import java.nio.file.Path;
import java.nio.file.Paths;

/**
* Created with IntelliJ IDEA.
* User: kmahoney
* Date: 6/7/13
* Time: 6:09 AM
*/

public class PathOptionHandlerTest extends TestCase {
static final String TEST_1 = "/path/test";
static final String TEST_2 = "bad/path/\0";

private PathOptionHandler handler;

@Override
public void setUp() {
handler = new PathOptionHandler(null, null, null);
}

public void testParseSuccess() throws Exception {
Path expectedIp = Paths.get(TEST_1);
Path ip = handler.parse(TEST_1);

assertEquals(expectedIp, ip);
}

public void testParseFailure() throws Exception {
try {
handler.parse(TEST_2);
}
catch (CmdLineException e) {
//assertEquals("\"a.b.c.d\" must be an IP address", e.getMessage());
return;
}
fail("Invalid Path Should Have Thrown Exception");
}
public void testNullParseFailure() throws Exception {
try {
handler.parse(null);
}
catch (CmdLineException e) {
//assertEquals("\"a.b.c.d\" must be an IP address", e.getMessage());
return;
}
fail("Null Path Should Have Thrown Exception");
}
}

0 comments on commit b972e18

Please sign in to comment.