From 66315c6e3025d6ed6d76cbcbe30071ef204f180b Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 1 Dec 2018 10:48:02 +0100 Subject: [PATCH] Add more tests in PropertyDescriptorTest Refs #1487 --- .../pmd/properties/PropertyFactory.java | 2 +- .../properties/PropertyDescriptorTest.java | 91 +++++++++++++++++-- 2 files changed, 86 insertions(+), 7 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/properties/PropertyFactory.java b/pmd-core/src/main/java/net/sourceforge/pmd/properties/PropertyFactory.java index 34f81e239f..e3559454cf 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/properties/PropertyFactory.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/properties/PropertyFactory.java @@ -181,7 +181,7 @@ public final class PropertyFactory { public static GenericCollectionPropertyBuilder> enumListProperty(String name, Map nameToValue) { - return enumProperty(name, nameToValue).toList(); + return enumProperty(name, nameToValue).toList().delim(MultiValuePropertyDescriptor.DEFAULT_DELIMITER); } diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/properties/PropertyDescriptorTest.java b/pmd-core/src/test/java/net/sourceforge/pmd/properties/PropertyDescriptorTest.java index 5475b8cf99..2247ccd3b3 100644 --- a/pmd-core/src/test/java/net/sourceforge/pmd/properties/PropertyDescriptorTest.java +++ b/pmd-core/src/test/java/net/sourceforge/pmd/properties/PropertyDescriptorTest.java @@ -13,10 +13,11 @@ import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; import org.apache.commons.lang3.StringUtils; import org.hamcrest.Matcher; @@ -152,17 +153,30 @@ public class PropertyDescriptorTest { .desc("hello") .defaultValue(1) .build(); - assertEquals(Integer.valueOf(1), descriptor.defaultValue()); assertEquals("intProp", descriptor.name()); assertEquals("hello", descriptor.description()); + assertEquals(Integer.valueOf(1), descriptor.defaultValue()); + assertEquals(Integer.valueOf(5), descriptor.valueFrom("5")); PropertyDescriptor> listDescriptor = PropertyFactory.intListProperty("intListProp") .desc("hello") .defaultValues(1, 2) .build(); - assertEquals(Arrays.asList(1, 2), listDescriptor.defaultValue()); assertEquals("intListProp", listDescriptor.name()); assertEquals("hello", listDescriptor.description()); + assertEquals(Arrays.asList(1, 2), listDescriptor.defaultValue()); + assertEquals(Arrays.asList(5, 7), listDescriptor.valueFrom("5,7")); + } + + @Test + public void testIntPropertyInvalidValue() { + PropertyDescriptor descriptor = PropertyFactory.intProperty("intProp") + .desc("hello") + .defaultValue(1) + .build(); + thrown.expect(NumberFormatException.class); + thrown.expectMessage("not a number"); + descriptor.valueFrom("not a number"); } @Test @@ -171,13 +185,30 @@ public class PropertyDescriptorTest { .desc("hello") .defaultValue(1.0) .build(); + assertEquals("doubleProp", descriptor.name()); + assertEquals("hello", descriptor.description()); assertEquals(Double.valueOf(1.0), descriptor.defaultValue()); + assertEquals(Double.valueOf(2.0), descriptor.valueFrom("2.0")); PropertyDescriptor> listDescriptor = PropertyFactory.doubleListProperty("doubleListProp") .desc("hello") .defaultValues(1.0, 2.0) .build(); + assertEquals("doubleListProp", listDescriptor.name()); + assertEquals("hello", listDescriptor.description()); assertEquals(Arrays.asList(1.0, 2.0), listDescriptor.defaultValue()); + assertEquals(Arrays.asList(2.0, 3.0), listDescriptor.valueFrom("2.0,3.0")); + } + + @Test + public void testDoublePropertyInvalidValue() { + PropertyDescriptor descriptor = PropertyFactory.doubleProperty("doubleProp") + .desc("hello") + .defaultValue(1.0) + .build(); + thrown.expect(NumberFormatException.class); + thrown.expectMessage("this is not a number"); + descriptor.valueFrom("this is not a number"); } @Test @@ -186,35 +217,61 @@ public class PropertyDescriptorTest { .desc("hello") .defaultValue("default value") .build(); + assertEquals("stringProp", descriptor.name()); + assertEquals("hello", descriptor.description()); assertEquals("default value", descriptor.defaultValue()); + assertEquals("foo", descriptor.valueFrom("foo")); PropertyDescriptor> listDescriptor = PropertyFactory.stringListProperty("stringListProp") .desc("hello") .defaultValues("v1", "v2") .build(); + assertEquals("stringListProp", listDescriptor.name()); + assertEquals("hello", listDescriptor.description()); assertEquals(Arrays.asList("v1", "v2"), listDescriptor.defaultValue()); + assertEquals(Arrays.asList("foo", "bar"), listDescriptor.valueFrom("foo|bar")); } private enum SampleEnum { A, B, C } - @Test - public void testEnumProperty() { - Map nameMap = new HashMap<>(); + private static Map nameMap = new LinkedHashMap<>(); + + static { nameMap.put("TEST_A", SampleEnum.A); nameMap.put("TEST_B", SampleEnum.B); nameMap.put("TEST_C", SampleEnum.C); + } + @Test + public void testEnumProperty() { PropertyDescriptor descriptor = PropertyFactory.enumProperty("enumProp", nameMap) .desc("hello") .defaultValue(SampleEnum.B) .build(); + assertEquals("enumProp", descriptor.name()); + assertEquals("hello", descriptor.description()); assertEquals(SampleEnum.B, descriptor.defaultValue()); + assertEquals(SampleEnum.C, descriptor.valueFrom("TEST_C")); PropertyDescriptor> listDescriptor = PropertyFactory.enumListProperty("enumListProp", nameMap) .desc("hello") .defaultValues(SampleEnum.A, SampleEnum.B) .build(); + assertEquals("enumListProp", listDescriptor.name()); + assertEquals("hello", listDescriptor.description()); assertEquals(Arrays.asList(SampleEnum.A, SampleEnum.B), listDescriptor.defaultValue()); + assertEquals(Arrays.asList(SampleEnum.B, SampleEnum.C), listDescriptor.valueFrom("TEST_B|TEST_C")); + } + + @Test + public void testEnumPropertyInvalidValue() { + PropertyDescriptor descriptor = PropertyFactory.enumProperty("enumProp", nameMap) + .desc("hello") + .defaultValue(SampleEnum.B) + .build(); + thrown.expect(IllegalArgumentException.class); + thrown.expectMessage("Value was not in the set [TEST_A, TEST_B, TEST_C]"); + descriptor.valueFrom("InvalidEnumValue"); } @Test @@ -226,6 +283,28 @@ public class PropertyDescriptorTest { assertEquals("regexProp", descriptor.name()); assertEquals("hello", descriptor.description()); assertEquals("^[A-Z].*$", descriptor.defaultValue().toString()); + assertEquals("[0-9]+", descriptor.valueFrom("[0-9]+").toString()); + } + + @Test + public void testRegexPropertyInvalidValue() { + PropertyDescriptor descriptor = PropertyFactory.regexProperty("regexProp") + .desc("hello") + .defaultValue("^[A-Z].*$") + .build(); + thrown.expect(PatternSyntaxException.class); + thrown.expectMessage("Unclosed character class"); + descriptor.valueFrom("[open class"); + } + + @Test + public void testRegexPropertyInvalidDefaultValue() { + thrown.expect(PatternSyntaxException.class); + thrown.expectMessage("Unclosed character class"); + PropertyDescriptor descriptor = PropertyFactory.regexProperty("regexProp") + .desc("hello") + .defaultValue("[open class") + .build(); } private static Matcher containsIgnoreCase(final String substring) {