/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.plsql;
import java.util.Arrays;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import net.sourceforge.pmd.RuleContext;
import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.lang.plsql.ast.ASTInput;
import net.sourceforge.pmd.lang.rule.XPathRule;
/**
* Tests to use XPath rules with PLSQL.
*/
public class PLSQLXPathRuleTest extends AbstractPLSQLParserTst {
private ASTInput node = parsePLSQL(
"create or replace\n" + "package pkg_xpath_problem\n" + "AS\n" + " PROCEDURE pkg_minimal\n" + " IS\n"
+ " a_variable VARCHAR2(1);\n" + " BEGIN \n" + " --PRAGMA INLINE(output,'YES');\n"
+ " a_variable := 'Y' ;\n" + " END ;\n" + "end pkg_xpath_problem;\n" + "/\n" + "");
private RuleContext ctx = new RuleContext();
@Before
public void setup() {
ctx.setLanguageVersion(LanguageRegistry.getLanguage(PLSQLLanguageModule.NAME).getDefaultVersion());
}
/**
* See https://sourceforge.net/p/pmd/bugs/1166/
*/
@Test
public void testXPathRule1() {
XPathRule rule = createRule("1.0");
rule.apply(Arrays.asList(node), ctx);
Assert.assertEquals(2, ctx.getReport().treeSize());
}
/**
* See https://sourceforge.net/p/pmd/bugs/1166/
*/
@Test
public void testXPathRule1Compatibility() {
XPathRule rule = createRule("1.0 compatibility");
rule.apply(Arrays.asList(node), ctx);
Assert.assertEquals(2, ctx.getReport().treeSize());
}
/**
* See https://sourceforge.net/p/pmd/bugs/1166/
*/
@Test
public void testXPathRule2() {
XPathRule rule = createRule("2.0");
rule.apply(Arrays.asList(node), ctx);
Assert.assertEquals(2, ctx.getReport().treeSize());
}
private XPathRule createRule(String version) {
XPathRule rule = new XPathRule("//PrimaryExpression");
rule.setLanguage(LanguageRegistry.getLanguage(PLSQLLanguageModule.NAME));
rule.setVersion(version);
rule.setMessage("Test Violation");
return rule;
}
}