1 package net.sourceforge.pmd.properties;
2
3 import static org.junit.Assert.assertNotNull;
4 import static org.junit.Assert.assertTrue;
5
6 import java.lang.reflect.Method;
7 import java.util.HashMap;
8
9 import net.sourceforge.pmd.PropertyDescriptor;
10 import net.sourceforge.pmd.lang.rule.properties.MethodMultiProperty;
11 import net.sourceforge.pmd.lang.rule.properties.MethodProperty;
12 import net.sourceforge.pmd.util.ClassUtil;
13
14 import org.junit.Test;
15
16
17
18
19
20
21
22
23
24
25
26 public class MethodPropertyTest extends AbstractPropertyDescriptorTester {
27
28 private static final String[] methodSignatures = new String[] {
29 "String#indexOf(int)",
30 "String#substring(int,int)",
31 "java.lang.String#substring(int,int)",
32 "Integer#parseInt(String)",
33 "java.util.HashMap#put(Object,Object)",
34 "HashMap#containsKey(Object)"
35 };
36
37 public MethodPropertyTest() {
38 }
39
40 @Test
41 public void testAsStringOn() {
42
43 Method method = null;
44
45 for (int i=0; i<methodSignatures.length; i++) {
46 method = MethodProperty.methodFrom(
47 methodSignatures[i],
48 MethodProperty.CLASS_METHOD_DELIMITER,
49 MethodProperty.METHOD_ARG_DELIMITER
50 );
51 assertNotNull("Unable to identify method: " + methodSignatures[i], method);
52 }
53 }
54
55 @Test
56 public void testAsMethodOn() {
57
58 Method[] methods = new Method[methodSignatures.length];
59
60 for (int i=0; i<methodSignatures.length; i++) {
61 methods[i] = MethodProperty.methodFrom(
62 methodSignatures[i],
63 MethodProperty.CLASS_METHOD_DELIMITER,
64 MethodProperty.METHOD_ARG_DELIMITER
65 );
66 assertNotNull("Unable to identify method: " + methodSignatures[i], methods[i]);
67 }
68
69 String translatedMethod = null;
70 for (int i=0; i<methods.length; i++) {
71 translatedMethod = MethodProperty.asStringFor(methods[i]);
72 assertTrue(
73 "Translated method does not match",
74 ClassUtil.withoutPackageName(methodSignatures[i]).equals(
75 ClassUtil.withoutPackageName(translatedMethod))
76 );
77 }
78 }
79
80 @Override
81 protected PropertyDescriptor createBadProperty(boolean multiValue) {
82
83 Method[] methods = String.class.getDeclaredMethods();
84
85 return multiValue ?
86 new MethodMultiProperty("methodProperty", "asdf", new Method[] { methods[2], methods[3] }, new String[] { "java.util" } , 1.0f) :
87 new MethodProperty("methodProperty", "asdf", methods[1], new String[] { "java.util" }, 1.0f);
88 }
89
90 @Override
91 protected Object createBadValue(int count) {
92
93 Method[] allMethods = HashMap.class.getDeclaredMethods();
94
95 if (count == 1) {
96 return (Method)randomChoice(allMethods);
97 }
98
99 Method[] methods = new Method[count];
100 for (int i=0; i<count; i++) {
101 methods[i] = allMethods[i];
102 }
103
104 return methods;
105 }
106
107 @Override
108 protected PropertyDescriptor createProperty(boolean multiValue) {
109
110 Method[] methods = String.class.getDeclaredMethods();
111
112 return multiValue ?
113 new MethodMultiProperty("methodProperty", "asdf", new Method[] { methods[2], methods[3] }, new String[] { "java.lang" } , 1.0f) :
114 new MethodProperty("methodProperty", "asdf", methods[1], new String[] { "java.lang" }, 1.0f);
115 }
116
117 @Override
118 protected Object createValue(int count) {
119
120 Method[] allMethods = String.class.getDeclaredMethods();
121
122 if (count == 1) {
123 return (Method)randomChoice(allMethods);
124 }
125
126 Method[] methods = new Method[count];
127 for (int i=0; i<count; i++) {
128 methods[i] = allMethods[i];
129 }
130
131 return methods;
132 }
133
134 public static junit.framework.Test suite() {
135 return new junit.framework.JUnit4TestAdapter(MethodPropertyTest.class);
136 }
137 }