1 package test.net.sourceforge.pmd.jaxen;
2
3 import static org.junit.Assert.assertTrue;
4 import net.sourceforge.pmd.ast.JavaParserVisitor;
5 import net.sourceforge.pmd.ast.Node;
6 import net.sourceforge.pmd.jaxen.Attribute;
7 import net.sourceforge.pmd.jaxen.MatchesFunction;
8
9 import org.jaxen.Context;
10 import org.jaxen.FunctionCallException;
11 import org.junit.Test;
12
13 import java.util.ArrayList;
14 import java.util.List;
15
16 public class MatchesFunctionTest implements Node {
17
18 public void jjtOpen() {
19 }
20
21 public void jjtClose() {
22 }
23
24 public void jjtSetParent(Node n) {
25 }
26
27 public Node jjtGetParent() {
28 return null;
29 }
30
31 public void jjtAddChild(Node n, int i) {
32 }
33
34 public Node jjtGetChild(int i) {
35 return null;
36 }
37
38 public int jjtGetNumChildren() {
39 return 0;
40 }
41
42 public Object jjtAccept(JavaParserVisitor visitor, Object data) {
43 return null;
44 }
45
46 private String className;
47
48 public String getValue() {
49 return className;
50 }
51
52 @Test
53 public void testMatch() throws FunctionCallException, NoSuchMethodException {
54 className = "Foo";
55 assertTrue(tryRegexp("Foo") instanceof List);
56 }
57
58 @Test
59 public void testNoMatch() throws FunctionCallException, NoSuchMethodException {
60 className = "bar";
61 assertTrue(tryRegexp("Foo") instanceof Boolean);
62 className = "FobboBar";
63 assertTrue(tryRegexp("Foo") instanceof Boolean);
64 }
65
66 private Object tryRegexp(String exp) throws FunctionCallException, NoSuchMethodException {
67 MatchesFunction function = new MatchesFunction();
68 List<Object> list = new ArrayList<Object>();
69 List<Attribute> attrs = new ArrayList<Attribute>();
70 attrs.add(new Attribute(this, "matches", getClass().getMethod("getValue", new Class[0])));
71 list.add(attrs);
72 list.add(exp);
73 Context c = new Context(null);
74 c.setNodeSet(new ArrayList());
75 return function.call(c, list);
76 }
77
78 public static junit.framework.Test suite() {
79 return new junit.framework.JUnit4TestAdapter(MatchesFunctionTest.class);
80 }
81 }
82
83