MethodPropertyTest xref

View Javadoc
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  * Evaluates the functionality of the MethodProperty descriptor by testing its ability to catch creation
18  * errors (illegal args), flag invalid methods per the allowable packages, and serialize/deserialize
19  * groups of methods onto/from a string buffer.
20  * 
21  * We're using methods from java.lang classes for 'normal' constructors and applying ones from
22  * java.util types as ones we expect to fail.
23  * 
24  * @author Brian Remedios
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 }

AltStyle によって変換されたページ (->オリジナル) /