summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2012-08-07 04:29:57 -0700
committerCedric Beust <cedric@beust.com>2012-08-07 04:29:57 -0700
commit5377e48b0f7b1b77aa9d546313b11767559068de (patch)
treead23494cbe105df2e422d40cb70bbef75f45abfa
parent3dd7558e2aee86e647b4530f536cbb1fa574b87a (diff)
downloadplatform_external_jcommander-5377e48b0f7b1b77aa9d546313b11767559068de.tar.gz
platform_external_jcommander-5377e48b0f7b1b77aa9d546313b11767559068de.tar.bz2
platform_external_jcommander-5377e48b0f7b1b77aa9d546313b11767559068de.zip
IParameterValidator2.
-rw-r--r--src/main/java/com/beust/jcommander/IParameterValidator2.java34
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java3
-rw-r--r--src/main/java/com/beust/jcommander/ParameterDescription.java9
-rw-r--r--src/test/java/com/beust/jcommander/JCommanderTest.java34
-rw-r--r--src/test/java/com/beust/jcommander/MyClass.java14
5 files changed, 85 insertions, 9 deletions
diff --git a/src/main/java/com/beust/jcommander/IParameterValidator2.java b/src/main/java/com/beust/jcommander/IParameterValidator2.java
new file mode 100644
index 0000000..77e7dd3
--- /dev/null
+++ b/src/main/java/com/beust/jcommander/IParameterValidator2.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright (C) 2011 the original author or authors.
+ * See the notice.md file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.beust.jcommander;
+
+public interface IParameterValidator2 extends IParameterValidator {
+
+ /**
+ * Validate the parameter.
+ *
+ * @param name The name of the parameter (e.g. "-host").
+ * @param value The value of the parameter that we need to validate
+ * @param pd The description of this parameter
+ *
+ * @throws ParameterException Thrown if the value of the parameter is invalid.
+ */
+ void validate(String name, String value, ParameterDescription pd) throws ParameterException;
+
+}
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index bfda67f..30b9b4a 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -745,7 +745,8 @@ public class JCommander {
}
}
- ParameterDescription.validateParameter(m_mainParameterAnnotation.validateWith(),
+ ParameterDescription.validateParameter(m_mainParameterDescription,
+ m_mainParameterAnnotation.validateWith(),
"Default", value);
m_mainParameterDescription.setAssigned(true);
diff --git a/src/main/java/com/beust/jcommander/ParameterDescription.java b/src/main/java/com/beust/jcommander/ParameterDescription.java
index a49562f..33574a9 100644
--- a/src/main/java/com/beust/jcommander/ParameterDescription.java
+++ b/src/main/java/com/beust/jcommander/ParameterDescription.java
@@ -266,7 +266,7 @@ public class ParameterDescription {
private void validateParameter(String name, String value) {
Class<? extends IParameterValidator> validator = m_wrappedParameter.validateWith();
if (validator != null) {
- validateParameter(validator, name, value);
+ validateParameter(this, validator, name, value);
}
}
@@ -291,13 +291,18 @@ public class ParameterDescription {
}
}
- public static void validateParameter(Class<? extends IParameterValidator> validator,
+ public static void validateParameter(ParameterDescription pd,
+ Class<? extends IParameterValidator> validator,
String name, String value) {
try {
if (validator != NoValidator.class) {
p("Validating parameter:" + name + " value:" + value + " validator:" + validator);
}
validator.newInstance().validate(name, value);
+ if (IParameterValidator2.class.isAssignableFrom(validator)) {
+ IParameterValidator2 instance = (IParameterValidator2) validator.newInstance();
+ instance.validate(name, value, pd);
+ }
} catch (InstantiationException e) {
throw new ParameterException("Can't instantiate validator:" + e);
} catch (IllegalAccessException e) {
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index 5b41e0b..22c5082 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -839,11 +839,9 @@ public class JCommanderTest {
public void parameterWithOneDoubleQuote() {
@Parameters(separators = "=")
class Arg {
-
@Parameter(names = { "-p", "--param" })
private String param;
}
-
JCommander jc = new JCommander(new MyClass());
jc.parse("-p=\"");
}
@@ -865,14 +863,42 @@ public class JCommanderTest {
private List<String> rules = new ArrayList<String>();
}
Arg a = new Arg();
- StringBuilder sb = new StringBuilder();
new JCommander(a, "-rule", "some test");
Assert.assertEquals(a.rules, Arrays.asList("some test"));
}
+ static class V2 implements IParameterValidator2 {
+ final static List<String> names = Lists.newArrayList();
+ static boolean validateCalled = false;
+
+ @Override
+ public void validate(String name, String value) throws ParameterException {
+ validateCalled = true;
+ }
+
+ @Override
+ public void validate(String name, String value, ParameterDescription pd)
+ throws ParameterException {
+ names.addAll(Arrays.asList(pd.getParameter().names()));
+ }
+ }
+
+ public void validator2() {
+ class Arg {
+ @Parameter(names = { "-h", "--host" }, validateWith = V2.class)
+ String host;
+ }
+ Arg a = new Arg();
+ V2.names.clear();
+ V2.validateCalled = false;
+ new JCommander(a, "--host", "h");
+ Assert.assertEquals(V2.names, Arrays.asList(new String[] { "-h", "--host" }));
+ Assert.assertTrue(V2.validateCalled);
+ }
+
@Test(enabled = false)
public static void main(String[] args) throws Exception {
- new JCommanderTest().spaces();
+ new JCommanderTest().parameterWithOneDoubleQuote();
// class A {
// @Parameter(names = "-short", required = true)
// List<String> parameters;
diff --git a/src/test/java/com/beust/jcommander/MyClass.java b/src/test/java/com/beust/jcommander/MyClass.java
index 3bf46b5..c2d3371 100644
--- a/src/test/java/com/beust/jcommander/MyClass.java
+++ b/src/test/java/com/beust/jcommander/MyClass.java
@@ -1,14 +1,24 @@
package com.beust.jcommander;
+import org.testng.Assert;
+
+
@Parameters(separators = "=")
public class MyClass {
- @Parameter(names = { "-p", "--param" })
+ @Parameter(names = { "-p", "--param" }, validateWith = MyValidator.class)
private String param;
public static void main(String[] args) {
JCommander jCommander = new JCommander(new MyClass());
- jCommander.parse("-p=\"");
+ jCommander.parse("--param=value");
+ }
+
+ public static class MyValidator implements IParameterValidator {
+ @Override
+ public void validate(String name, String value) throws ParameterException {
+ Assert.assertEquals(value, "\"");
+ }
}
} \ No newline at end of file