diff options
author | jeremysolarz <jeremy.solarz@gmail.com> | 2016-12-16 08:08:29 +0100 |
---|---|---|
committer | jeremysolarz <jeremy.solarz@gmail.com> | 2016-12-16 08:08:29 +0100 |
commit | dfa7b2298283d42b74a8087a42250ebc56cc68aa (patch) | |
tree | e3695ff3b7bcf063b663b9248d087c9d1a2d690f /src | |
parent | 03cefa78a1236112833018c99ae2b1fa90f7c7a9 (diff) | |
download | jcommander-dfa7b2298283d42b74a8087a42250ebc56cc68aa.tar.gz |
Fix param name error in validator
When IValueValidator is called it always get's the first name as
defined in @Parameter. JCommander should call the validator with
the parameter given on the command line
Diffstat (limited to 'src')
4 files changed, 35 insertions, 4 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java index 392fbd5..d304452 100644 --- a/src/main/java/com/beust/jcommander/JCommander.java +++ b/src/main/java/com/beust/jcommander/JCommander.java @@ -813,7 +813,8 @@ public class JCommander { if (index + arity < args.length) { for (int j = 1; j <= arity; j++) { - pd.addValue(trim(args[index + j + offset]), false, validate); + String value = trim(args[index + j + offset]); + pd.addValue(arg, value, false, validate); m_requiredFields.remove(pd.getParameterized()); } index += arity + offset; diff --git a/src/main/java/com/beust/jcommander/ParameterDescription.java b/src/main/java/com/beust/jcommander/ParameterDescription.java index 06f145a..1f05875 100644 --- a/src/main/java/com/beust/jcommander/ParameterDescription.java +++ b/src/main/java/com/beust/jcommander/ParameterDescription.java @@ -223,13 +223,15 @@ public class ParameterDescription { * converter, and if we can't find any, throw an exception. */ public void addValue(String value, boolean isDefault) { - addValue(value, isDefault, true); + addValue(null, value, isDefault, true); } - void addValue(String value, boolean isDefault, boolean validate) { + void addValue(String name, String value, boolean isDefault, boolean validate) { p("Adding " + (isDefault ? "default " : "") + "value:" + value + " to parameter:" + m_parameterized.getName()); - String name = m_wrappedParameter.names()[0]; + if(name == null) { + name = m_wrappedParameter.names()[0]; + } if (m_assigned && ! isMultiOption() && !m_jCommander.isParameterOverwritingAllowed() || isNonOverwritableForced()) { throw new ParameterException("Can only specify option " + name + " once."); } diff --git a/src/test/java/com/beust/jcommander/ArgMultiNameValidator.java b/src/test/java/com/beust/jcommander/ArgMultiNameValidator.java new file mode 100644 index 0000000..92a79bc --- /dev/null +++ b/src/test/java/com/beust/jcommander/ArgMultiNameValidator.java @@ -0,0 +1,19 @@ +package com.beust.jcommander; + +/** + * Created by jeremysolarz on 12/15/16. + */ +public class ArgMultiNameValidator { + + public static class MultiNameValidator implements IValueValidator<String> { + + public static String parsedName; + + public void validate(String name, String value) throws ParameterException { + parsedName = name; + } + } + + @Parameter(names = { "-name1", "-name2" }, description = "Names of parameter", validateValueWith = MultiNameValidator.class, required = true) + private String parameter; +} diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java index bece62f..635fb9d 100644 --- a/src/test/java/com/beust/jcommander/JCommanderTest.java +++ b/src/test/java/com/beust/jcommander/JCommanderTest.java @@ -635,6 +635,15 @@ public class JCommanderTest { jc.parse("-age", "-2 "); } + @Test + public void validationShouldReceiveRightParameterName() { + ArgMultiNameValidator validator = new ArgMultiNameValidator(); + JCommander jc = new JCommander(validator); + String paramName = "-name2"; + jc.parse(paramName, "param1"); + Assert.assertEquals(ArgMultiNameValidator.MultiNameValidator.parsedName, paramName); + } + public void atFileCanContainEmptyLines() throws IOException { File f = File.createTempFile("JCommander", null); f.deleteOnExit(); |