/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.jaxen;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.jaxen.Context;
import org.jaxen.FunctionCallException;
import org.junit.Test;
import net.sourceforge.pmd.lang.ast.AbstractNode;
import net.sourceforge.pmd.lang.ast.xpath.Attribute;
import net.sourceforge.pmd.lang.xpath.MatchesFunction;
public class MatchesFunctionTest {
public static class MyNode extends AbstractNode {
private String className;
public MyNode() {
super(1);
}
@Override
public String toString() {
return "MyNode";
}
public void setClassName(String className) {
this.className = className;
}
public String getClassName() {
return className;
}
}
@Test
public void testMatch() throws FunctionCallException, NoSuchMethodException {
MyNode myNode = new MyNode();
myNode.setClassName("Foo");
assertTrue(tryRegexp(myNode, "Foo") instanceof List);
}
@Test
public void testNoMatch() throws FunctionCallException, NoSuchMethodException {
MyNode myNode = new MyNode();
myNode.setClassName("bar");
assertTrue(tryRegexp(myNode, "Foo") instanceof Boolean);
myNode.setClassName("FobboBar");
assertTrue(tryRegexp(myNode, "Foo") instanceof Boolean);
}
private Object tryRegexp(MyNode myNode, String exp) throws FunctionCallException, NoSuchMethodException {
MatchesFunction function = new MatchesFunction();
List<Object> list = new ArrayList<>();
List<Attribute> attrs = new ArrayList<>();
attrs.add(new Attribute(myNode, "matches", myNode.getClass().getMethod("getClassName", new Class[0])));
list.add(attrs);
list.add(exp);
Context c = new Context(null);
c.setNodeSet(new ArrayList<>());
return function.call(c, list);
}
public static junit.framework.Test suite() {
return new junit.framework.JUnit4TestAdapter(MatchesFunctionTest.class);
}
}