Skip to content

Commit 91eec3f

Browse files
authored
Validate default values (#128)
* Add test showing problematic behaviour * Validate default parameter values as well
1 parent c4fd199 commit 91eec3f

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

src/main/java/com/github/joschi/jadconfig/JadConfig.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,12 +186,9 @@ private void processClassField(Object configurationBean, Field field) throws Val
186186
} catch (ParameterException e) {
187187
throw new ParameterException("Couldn't convert value for parameter \"" + parameterName + "\"", e);
188188
}
189-
190-
LOG.debug("Validating parameter {}", parameterName);
191-
final List<Class<? extends Validator<?>>> validators =
192-
new ArrayList<>(Collections.<Class<? extends Validator<?>>>singleton(parameter.validator()));
193-
validators.addAll(Arrays.asList(parameter.validators()));
194-
validateParameter(validators, parameterName, fieldValue);
189+
validateFieldValue(parameterName, parameter, fieldValue);
190+
} else if (fieldValue != null) {
191+
validateFieldValue(parameterName, parameter, fieldValue);
195192
}
196193

197194
LOG.debug("Setting parameter {} to {}", parameterName, fieldValue);
@@ -204,6 +201,14 @@ private void processClassField(Object configurationBean, Field field) throws Val
204201
}
205202
}
206203

204+
private void validateFieldValue(String parameterName, Parameter parameter, Object fieldValue) throws ValidationException {
205+
LOG.debug("Validating parameter {}", parameterName);
206+
final List<Class<? extends Validator<?>>> validators =
207+
new ArrayList<>(Collections.<Class<? extends Validator<?>>>singleton(parameter.validator()));
208+
validators.addAll(Arrays.asList(parameter.validators()));
209+
validateParameter(validators, parameterName, fieldValue);
210+
}
211+
207212
private String lookupFallbackParameter(Parameter parameter) {
208213
final Optional<String> fallbackValue = Optional.ofNullable(parameter.fallbackPropertyName())
209214
.filter(fallbackName -> !fallbackName.trim().isEmpty())

src/test/java/com/github/joschi/jadconfig/JadConfigTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.github.joschi.jadconfig.testbeans.FoobarConfigurationBean;
99
import com.github.joschi.jadconfig.testbeans.InheritedBeanSubClass;
1010
import com.github.joschi.jadconfig.testbeans.InheritedBeanSubSubClass;
11+
import com.github.joschi.jadconfig.testbeans.InvalidDefaultValueValidatorBean;
1112
import com.github.joschi.jadconfig.testbeans.Multi1ConfigurationBean;
1213
import com.github.joschi.jadconfig.testbeans.Multi2ConfigurationBean;
1314
import com.github.joschi.jadconfig.testbeans.NonExistingParameterBean;
@@ -503,6 +504,16 @@ public void testProcessValidatedBean() throws RepositoryException, ValidationExc
503504
Assert.assertEquals(1234567890123L, configurationBean.getMyLong());
504505
}
505506

507+
@Test
508+
public void testProcessValidatedBeanInvalidDefaultValue() {
509+
InvalidDefaultValueValidatorBean configurationBean = new InvalidDefaultValueValidatorBean();
510+
jadConfig = new JadConfig(repository, configurationBean);
511+
512+
// the default value is -1, validator expects only positive longs => validation exception
513+
Assert.assertThrows(ValidationException.class, () -> jadConfig.process());
514+
}
515+
516+
506517
@Test
507518
public void testProcessNullPropertiesDoNotOverwriteDefaultValues() throws RepositoryException, ValidationException {
508519
final SingleFieldBean bean = new SingleFieldBean();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.github.joschi.jadconfig.testbeans;
2+
3+
import com.github.joschi.jadconfig.Parameter;
4+
import com.github.joschi.jadconfig.validators.PositiveLongValidator;
5+
6+
public class InvalidDefaultValueValidatorBean {
7+
8+
@Parameter(value = "test.positive.long", validator = PositiveLongValidator.class)
9+
private long myPositiveLong = -1;
10+
11+
public long getMyPositiveLong() {
12+
return myPositiveLong;
13+
}
14+
}

0 commit comments

Comments
 (0)