View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd.lang.plsql;
5   
6   import java.util.Arrays;
7   
8   import net.sourceforge.pmd.RuleContext;
9   import net.sourceforge.pmd.lang.LanguageRegistry;
10  import net.sourceforge.pmd.lang.plsql.ast.ASTInput;
11  import net.sourceforge.pmd.lang.rule.XPathRule;
12  
13  import org.junit.Assert;
14  import org.junit.Before;
15  import org.junit.Test;
16  
17  /**
18   * Tests to use XPath rules with PLSQL.
19   */
20  public class PLSQLXPathRuleTest extends AbstractPLSQLParserTst {
21  
22      private ASTInput node = parsePLSQL("create or replace\n" + 
23              "package pkg_xpath_problem\n" + 
24              "AS\n" + 
25              "    PROCEDURE pkg_minimal\n" + 
26              "    IS\n" + 
27              "        a_variable VARCHAR2(1);\n" + 
28              "    BEGIN \n" + 
29              "        --PRAGMA INLINE(output,'YES');\n" + 
30              "        a_variable := 'Y' ;\n" + 
31              "    END ;\n" + 
32              "end pkg_xpath_problem;\n" + 
33              "/\n" + 
34              "");
35  
36      private RuleContext ctx = new RuleContext();
37  
38      @Before
39      public void setup() {
40          ctx.setLanguageVersion(LanguageRegistry.getLanguage(PLSQLLanguageModule.NAME).getDefaultVersion());
41      }
42  
43      /**
44       * See https://sourceforge.net/p/pmd/bugs/1166/
45       */
46      @Test
47      public void testXPathRule1() {
48          XPathRule rule = createRule("1.0");
49  
50          rule.apply(Arrays.asList(node), ctx);
51          Assert.assertEquals(2, ctx.getReport().treeSize());
52      }
53  
54      /**
55       * See https://sourceforge.net/p/pmd/bugs/1166/
56       */
57      @Test
58      public void testXPathRule1Compatibility() {
59          XPathRule rule = createRule("1.0 compatibility");
60  
61          rule.apply(Arrays.asList(node), ctx);
62          Assert.assertEquals(2, ctx.getReport().treeSize());
63      }
64  
65      /**
66       * See https://sourceforge.net/p/pmd/bugs/1166/
67       */
68      @Test
69      public void testXPathRule2() {
70          XPathRule rule = createRule("2.0");
71  
72          rule.apply(Arrays.asList(node), ctx);
73          Assert.assertEquals(2, ctx.getReport().treeSize());
74      }
75  
76      private XPathRule createRule(String version) {
77          XPathRule rule = new XPathRule("//PrimaryExpression");
78          rule.setLanguage(LanguageRegistry.getLanguage(PLSQLLanguageModule.NAME));
79          rule.setVersion(version);
80          rule.setMessage("Test Violation");
81          return rule;
82      }
83  
84  }