From 47b29dfaa7a5f7054145dd5a886ce1b8f5e78d04 Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 15 Feb 2017 15:36:31 -0800 Subject: [PATCH] Fixed up parser unit tests --- .../net/sourceforge/pmd/cpd/VFLanguage.java | 11 -- .../net/sourceforge/pmd/cpd/VfLanguage.java | 15 ++ .../{VFTokenizer.java => VfTokenizer.java} | 6 +- .../vf/{VFHandler.java => VfHandler.java} | 8 +- .../pmd/lang/vf/VfLanguageModule.java | 2 +- .../lang/vf/{VFParser.java => VfParser.java} | 6 +- ...bstractVFRule.java => AbstractVfRule.java} | 4 +- ...ctory.java => VfRuleViolationFactory.java} | 6 +- .../lang/vf/rule/basic/VfUnescapeElRule.java | 4 +- .../pmd/LanguageVersionDiscovererTest.java | 23 ++- .../sourceforge/pmd/RuleSetFactoryTest.java | 12 -- .../sourceforge/pmd/lang/vf/VfParserTest.java | 17 ++- ...NodesTst.java => AbstractVfNodesTest.java} | 4 +- .../pmd/lang/vf/ast/JspPageStyleTest.java | 58 -------- ...pDocStyleTest.java => VfDocStyleTest.java} | 137 +++++------------- .../pmd/lang/vf/ast/VfPageStyleTest.java | 44 ++++++ .../pmd/lang/vf/ast/XPathJspRuleTest.java | 59 -------- .../lang/vf/rule/basic/xml/VfUnescapeEl.xml | 16 ++ 18 files changed, 166 insertions(+), 266 deletions(-) delete mode 100644 pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VFLanguage.java create mode 100644 pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfLanguage.java rename pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/{VFTokenizer.java => VfTokenizer.java} (95%) rename pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/{VFHandler.java => VfHandler.java} (86%) rename pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/{VFParser.java => VfParser.java} (89%) rename pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/{AbstractVFRule.java => AbstractVfRule.java} (97%) rename pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/{VFRuleViolationFactory.java => VfRuleViolationFactory.java} (87%) delete mode 100644 pmd-visualforce/src/test/java/net/sourceforge/pmd/RuleSetFactoryTest.java rename pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/{AbstractJspNodesTst.java => AbstractVfNodesTest.java} (95%) delete mode 100644 pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/JspPageStyleTest.java rename pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/{JspDocStyleTest.java => VfDocStyleTest.java} (87%) create mode 100644 pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfPageStyleTest.java delete mode 100644 pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/XPathJspRuleTest.java diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VFLanguage.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VFLanguage.java deleted file mode 100644 index c7595ad9f2..0000000000 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VFLanguage.java +++ /dev/null @@ -1,11 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.cpd; - -public class VFLanguage extends AbstractLanguage { - public VFLanguage() { - super("VisualForce", "vf", new VFTokenizer(), ".page", ".component"); - } -} diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfLanguage.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfLanguage.java new file mode 100644 index 0000000000..4fa935d573 --- /dev/null +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfLanguage.java @@ -0,0 +1,15 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.cpd; + +/** + * @author sergey.gorbaty + * + */ +public class VfLanguage extends AbstractLanguage { + public VfLanguage() { + super("VisualForce", "vf", new VfTokenizer(), ".page", ".component"); + } +} diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VFTokenizer.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfTokenizer.java similarity index 95% rename from pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VFTokenizer.java rename to pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfTokenizer.java index 3e7fdef9a9..2b145145fb 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VFTokenizer.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfTokenizer.java @@ -16,7 +16,11 @@ import net.sourceforge.pmd.lang.vf.ast.Token; import net.sourceforge.pmd.lang.vf.VfLanguageModule; import net.sourceforge.pmd.util.IOUtil; -public class VFTokenizer implements Tokenizer { +/** + * @author sergey.gorbaty + * + */ +public class VfTokenizer implements Tokenizer { public void tokenize(SourceCode sourceCode, Tokens tokenEntries) { StringBuilder buffer = sourceCode.getCodeBuffer(); diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VFHandler.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java similarity index 86% rename from pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VFHandler.java rename to pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java index 9c3a0c8399..986b44bd90 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VFHandler.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java @@ -16,11 +16,11 @@ import net.sourceforge.pmd.lang.ast.xpath.AbstractASTXPathHandler; import net.sourceforge.pmd.lang.rule.RuleViolationFactory; import net.sourceforge.pmd.lang.vf.ast.DumpFacade; import net.sourceforge.pmd.lang.vf.ast.VfNode; -import net.sourceforge.pmd.lang.vf.rule.VFRuleViolationFactory; +import net.sourceforge.pmd.lang.vf.rule.VfRuleViolationFactory; import net.sf.saxon.sxpath.IndependentContext; -public class VFHandler extends AbstractLanguageVersionHandler { +public class VfHandler extends AbstractLanguageVersionHandler { @Override public XPathHandler getXPathHandler() { @@ -34,11 +34,11 @@ public class VFHandler extends AbstractLanguageVersionHandler { } public RuleViolationFactory getRuleViolationFactory() { - return VFRuleViolationFactory.INSTANCE; + return VfRuleViolationFactory.INSTANCE; } public Parser getParser(ParserOptions parserOptions) { - return new VFParser(parserOptions); + return new VfParser(parserOptions); } @Override diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfLanguageModule.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfLanguageModule.java index e55ce799a9..c18436b51a 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfLanguageModule.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfLanguageModule.java @@ -19,6 +19,6 @@ public class VfLanguageModule extends BaseLanguageModule { public VfLanguageModule() { super(NAME, "vf", TERSE_NAME, VfRuleChainVisitor.class, "page", "component"); - addVersion("", new VFHandler(), true); + addVersion("", new VfHandler(), true); } } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VFParser.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfParser.java similarity index 89% rename from pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VFParser.java rename to pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfParser.java index 603a96d0ef..5a18fed0b2 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VFParser.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfParser.java @@ -17,11 +17,11 @@ import net.sourceforge.pmd.lang.ast.ParseException; import net.sourceforge.pmd.lang.ast.SimpleCharStream; /** - * Adapter for the JspParser. + * Adapter for the VfParser. */ -public class VFParser extends AbstractParser { +public class VfParser extends AbstractParser { - public VFParser(ParserOptions parserOptions) { + public VfParser(ParserOptions parserOptions) { super(parserOptions); } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVFRule.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVfRule.java similarity index 97% rename from pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVFRule.java rename to pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVfRule.java index 589478820c..c8c11b3095 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVFRule.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/AbstractVfRule.java @@ -28,9 +28,9 @@ import net.sourceforge.pmd.lang.vf.ast.ASTText; import net.sourceforge.pmd.lang.vf.ast.ASTUnparsedText; import net.sourceforge.pmd.lang.vf.ast.VfNode; -public abstract class AbstractVFRule extends AbstractRule implements VfParserVisitor, ImmutableLanguage { +public abstract class AbstractVfRule extends AbstractRule implements VfParserVisitor, ImmutableLanguage { - public AbstractVFRule() { + public AbstractVfRule() { super.setLanguage(LanguageRegistry.getLanguage(VfLanguageModule.NAME)); } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/VFRuleViolationFactory.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/VfRuleViolationFactory.java similarity index 87% rename from pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/VFRuleViolationFactory.java rename to pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/VfRuleViolationFactory.java index 10a6674464..829856af36 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/VFRuleViolationFactory.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/VfRuleViolationFactory.java @@ -13,11 +13,11 @@ import net.sourceforge.pmd.lang.rule.ParametricRuleViolation; import net.sourceforge.pmd.lang.rule.RuleViolationFactory; import net.sourceforge.pmd.lang.vf.ast.VfNode; -public final class VFRuleViolationFactory extends AbstractRuleViolationFactory { +public final class VfRuleViolationFactory extends AbstractRuleViolationFactory { - public static final RuleViolationFactory INSTANCE = new VFRuleViolationFactory(); + public static final RuleViolationFactory INSTANCE = new VfRuleViolationFactory(); - private VFRuleViolationFactory() { + private VfRuleViolationFactory() { } @Override diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/basic/VfUnescapeElRule.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/basic/VfUnescapeElRule.java index 75e6e7ebd2..0107e613e8 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/basic/VfUnescapeElRule.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/rule/basic/VfUnescapeElRule.java @@ -12,13 +12,13 @@ import net.sourceforge.pmd.lang.vf.ast.ASTCompilationUnit; import net.sourceforge.pmd.lang.vf.ast.ASTElExpression; import net.sourceforge.pmd.lang.vf.ast.ASTElement; import net.sourceforge.pmd.lang.vf.ast.ASTUnparsedText; -import net.sourceforge.pmd.lang.vf.rule.AbstractVFRule; +import net.sourceforge.pmd.lang.vf.rule.AbstractVfRule; /** * @author sergey.gorbaty * */ -public class VfUnescapeElRule extends AbstractVFRule { +public class VfUnescapeElRule extends AbstractVfRule { private static final String VALUE = "value"; private static final String ESCAPE = "escape"; diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/LanguageVersionDiscovererTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/LanguageVersionDiscovererTest.java index d74306d537..f75a73083f 100644 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/LanguageVersionDiscovererTest.java +++ b/pmd-visualforce/src/test/java/net/sourceforge/pmd/LanguageVersionDiscovererTest.java @@ -15,17 +15,30 @@ import net.sourceforge.pmd.lang.LanguageVersion; import net.sourceforge.pmd.lang.LanguageVersionDiscoverer; import net.sourceforge.pmd.lang.vf.VfLanguageModule; +/** + * @author sergey.gorbaty + * + */ public class LanguageVersionDiscovererTest { /** - * Test on JSP file. + * Test on VF file. */ @Test - public void testJspFile() { + public void testVFFile() { LanguageVersionDiscoverer discoverer = new LanguageVersionDiscoverer(); - File jspFile = new File("/path/to/MyPage.jsp"); - LanguageVersion languageVersion = discoverer.getDefaultLanguageVersionForFile(jspFile); - assertEquals("LanguageVersion must be JSP!", + File vfFile = new File("/path/to/MyPage.page"); + LanguageVersion languageVersion = discoverer.getDefaultLanguageVersionForFile(vfFile); + assertEquals("LanguageVersion must be VF!", + LanguageRegistry.getLanguage(VfLanguageModule.NAME).getDefaultVersion(), languageVersion); + } + + @Test + public void testComponentFile() { + LanguageVersionDiscoverer discoverer = new LanguageVersionDiscoverer(); + File vfFile = new File("/path/to/MyPage.component"); + LanguageVersion languageVersion = discoverer.getDefaultLanguageVersionForFile(vfFile); + assertEquals("LanguageVersion must be VF!", LanguageRegistry.getLanguage(VfLanguageModule.NAME).getDefaultVersion(), languageVersion); } } diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/RuleSetFactoryTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/RuleSetFactoryTest.java deleted file mode 100644 index 950a9fca4a..0000000000 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/RuleSetFactoryTest.java +++ /dev/null @@ -1,12 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd; - -/** - * Test jsp's rulesets - */ -public class RuleSetFactoryTest extends AbstractRuleSetFactoryTest { - // no additional tests yet -} diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/VfParserTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/VfParserTest.java index 0ffbd35a3f..614f82d189 100644 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/VfParserTest.java +++ b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/VfParserTest.java @@ -16,21 +16,26 @@ import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.vf.VfLanguageModule; /** - * Unit test for JSP parsing. + * @author sergey.gorbaty * */ public class VfParserTest { - /** - * Verifies bug #939 Jsp parser fails on $ - */ @Test - public void testParseDollar() { + public void testSingleDoubleQuoteAndEL() { Node node = parse( - "$129.00"); + "${!yes}"); Assert.assertNotNull(node); } + + @Test + public void testSingleDoubleQuote() { + Node node = parse( + "${yes}"); + Assert.assertNotNull(node); + } + private Node parse(String code) { LanguageVersionHandler jspLang = LanguageRegistry.getLanguage(VfLanguageModule.NAME).getDefaultVersion() .getLanguageVersionHandler(); diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/AbstractJspNodesTst.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/AbstractVfNodesTest.java similarity index 95% rename from pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/AbstractJspNodesTst.java rename to pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/AbstractVfNodesTest.java index 45d0979547..e98191e3ae 100644 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/AbstractJspNodesTst.java +++ b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/AbstractVfNodesTest.java @@ -15,7 +15,7 @@ import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.vf.ast.VfNode; import net.sourceforge.pmd.lang.vf.ast.VfParser; -public abstract class AbstractJspNodesTst { +public abstract class AbstractVfNodesTest { public void assertNumberOfNodes(Class clazz, String source, int number) { Set nodes = getNodes(clazz, source); @@ -45,6 +45,7 @@ public abstract class AbstractJspNodesTst { * @param allNodes * @return Set */ + @SuppressWarnings("unchecked") public Set getNodesOfType(Class clazz, Set allNodes) { Set result = new HashSet<>(); for (Node node : allNodes) { @@ -59,6 +60,7 @@ public abstract class AbstractJspNodesTst { * Add the given node and its subnodes to the set of nodes. If clazz is not * null, only nodes of the given class are put in the set of nodes. */ + @SuppressWarnings("unchecked") private void addNodeAndSubnodes(Node node, Set nodes, Class clazz) { if (null != node) { if ((null == clazz) || (clazz.equals(node.getClass()))) { diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/JspPageStyleTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/JspPageStyleTest.java deleted file mode 100644 index 248715f84a..0000000000 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/JspPageStyleTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.vf.ast; - -import static org.junit.Assert.assertEquals; -import java.util.Set; -import org.junit.Test; - -import net.sourceforge.pmd.lang.vf.ast.ASTElExpression; - -public class JspPageStyleTest extends AbstractJspNodesTst { - - /** - * Test parsing of a EL expression. - */ - @Test - public void testElExpression() { - Set expressions = getNodes(ASTElExpression.class, JSP_EL_EXPRESSION); - assertEquals("One expression expected!", 1, expressions.size()); - ASTElExpression expression = expressions.iterator().next(); - assertEquals("Correct expression content expected!", "myBean.get(\"${ World }\")", expression.getImage()); - } - - /** - * Test parsing of a EL expression in an attribute. - */ - @Test - public void testElExpressionInAttribute() { - Set expressions = getNodes(ASTElExpression.class, JSP_EL_EXPRESSION_IN_ATTRIBUTE); - assertEquals("One expression expected!", 1, expressions.size()); - ASTElExpression expression = expressions.iterator().next(); - assertEquals("Correct expression content expected!", "myValidator.find(\"'jsp'\")", expression.getImage()); - } - - private static final String JSP_COMMENT = " <%-- some comment --%> "; - - private static final String JSP_DIRECTIVE = " <%@ page language=\"java\" session='true'%> "; - - private static final String JSP_DECLARATION = "<%! String someString = \"s\"; %>"; - - private static final String JSP_SCRIPTLET = " <% someString = someString + \"suffix\"; %> "; - - private static final String JSP_EXPRESSION = " <%= someString %> "; - - private static final String JSP_EXPRESSION_IN_ATTRIBUTE = "

Hello

"; - - private static final String JSP_EL_EXPRESSION = "Hello ${myBean.get(\"${ World }\") } .jsp"; - - private static final String JSP_EL_EXPRESSION_IN_ATTRIBUTE = " "; - - private static final String JSF_VALUE_BINDING = "

Hello

"; - - public static junit.framework.Test suite() { - return new junit.framework.JUnit4TestAdapter(JspPageStyleTest.class); - } -} diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/JspDocStyleTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfDocStyleTest.java similarity index 87% rename from pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/JspDocStyleTest.java rename to pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfDocStyleTest.java index 4815e8dcc2..4b0e6aafc4 100644 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/JspDocStyleTest.java +++ b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfDocStyleTest.java @@ -32,18 +32,20 @@ import net.sourceforge.pmd.lang.vf.ast.ASTText; import net.sourceforge.pmd.lang.vf.ast.VfNode; /** - * Test parsing of a JSP in document style, by checking the generated AST. - * - * @author pieter_van_raemdonck - Application Engineers NV/SA - www.ae.be + * Test parsing of a VF in document style, by checking the generated AST. + * Original @author pieter_van_raemdonck - Application Engineers NV/SA - + * www.ae.be + * + * @author sergey.gorbaty - VF adaptation * */ -public class JspDocStyleTest extends AbstractJspNodesTst { +public class VfDocStyleTest extends AbstractVfNodesTest { /** - * Smoke test for JSP parser. + * Smoke test for VF parser. */ @Test - public void testSimplestJsp() { + public void testSimplestVf() { assertNumberOfNodes(ASTElement.class, TEST_SIMPLEST_HTML, 1); } @@ -165,8 +167,8 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } /** - * Test parsing of HTML <script src="x"/> element. It might not be valid - * html but it is likely to appear in .JSP files. + * Test parsing of HTML <script src="x"/> element. It might not be + * valid html but it is likely to appear in .page files. */ @Test public void testImportHtmlScript() { @@ -267,7 +269,6 @@ public class JspDocStyleTest extends AbstractJspNodesTst { assertEquals("Correct content expected!", "expr2", script.getImage()); } - /** * A dangling unopened ( just </closed> ) tag should not influence the * parsing. @@ -318,15 +319,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst { Set attributes = getNodes(ASTAttributeValue.class, TEST_QUOTE_EL); assertEquals("One attribute expected!", 1, attributes.size()); ASTAttributeValue attr = attributes.iterator().next(); - assertEquals("Expected to detect proper value for attribute!", "${something}", attr.getImage()); - } - - @Test - public void quoteExpression() { - Set attributes = getNodes(ASTAttributeValue.class, TEST_QUOTE_EXPRESSION); - assertEquals("One attribute expected!", 1, attributes.size()); - ASTAttributeValue attr = attributes.iterator().next(); - assertEquals("Expected to detect proper value for attribute!", "<%=something%>", attr.getImage()); + assertEquals("Expected to detect proper value for attribute!", "{!something}", attr.getImage()); } @Test @@ -351,7 +344,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } /** - * tests whether JSP el is properly detected as attribute value + * tests whether VF el is properly detected as attribute value */ @Test public void noQuoteAttrWithJspEL() { @@ -364,19 +357,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst { // in order to ensure that we check the proper attribute attr2 = iterator.next(); } - assertEquals("Expected to detect proper value for EL in attribute!", "${something}", attr2.getImage()); - } - - /** - * tests whether parse correctly detects presence of JSP expression <%= %> - * within an non-quoted attribute value - */ - @Test - public void noQuoteAttrWithJspExpression() { - Set attributes = getNodes(ASTAttributeValue.class, TEST_NO_QUOTE_ATTR_WITH_EXPRESSION); - assertEquals("One attribute expected!", 1, attributes.size()); - ASTAttributeValue attr = attributes.iterator().next(); - assertEquals("Expected to detect proper value for attribute!", "<%=something%>", attr.getImage()); + assertEquals("Expected to detect proper value for EL in attribute!", "{!something}", attr2.getImage()); } /** @@ -427,32 +408,6 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } - /** - * tests whether parse does not fail in the presence of unclosed JSP - * expression <%= within an non-quoted attribute value - */ - @Test - public void noQuoteAttrWithMalformedJspExpression() { - Set attributes = getNodes(ASTAttributeValue.class, TEST_NO_QUOTE_ATTR_WITH_MALFORMED_EXPR); - assertEquals("One attribute expected!", 1, attributes.size()); - ASTAttributeValue attr = attributes.iterator().next(); - assertEquals("Expected to detect proper value for attribute!", "<%=something", attr.getImage()); - } - - /** - * test a no quote attribute value which contains a scriptlet <% %> within - * its value - */ - @Test - @Ignore // nice test for future development - public void noQuoteAttrWithScriptletInValue() { - Set attributes = getNodes(ASTAttributeValue.class, TEST_NO_QUOTE_ATTR_WITH_SCRIPTLET); - assertEquals("One attribute expected!", 1, attributes.size()); - - ASTAttributeValue attr = attributes.iterator().next(); - assertEquals("Expected to detect proper value for attribute!", "<% String a = \"1\";%>", attr.getImage()); - } - /** * test a no quote attribute value can contain a tag (e.g. * attr=<bean:write property="value" />) @@ -469,9 +424,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } /** - * test a quote attribute value can contain a tag (e.g. - * attr="<bean:write property="value" />" ) Not sure if it's legal JSP code - * but most JSP engine accept and properly treat this value at runtime + * test a quote attribute value can contain a tag */ @Test @Ignore // nice test for future development @@ -493,7 +446,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst { Set attributes = getNodes(ASTAttributeValue.class, TEST_NO_QUOTE_ATTR_WITH_DOLLAR); assertEquals("One attribute expected!", 2, attributes.size()); ASTAttributeValue attr = attributes.iterator().next(); - assertEquals("Expected to detect proper value for attribute!", "${something", attr.getImage()); + assertEquals("Expected to detect proper value for attribute!", "{!something", attr.getImage()); } /** @@ -506,7 +459,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst { Set attributes = getNodes(ASTAttributeValue.class, TEST_NO_QUOTE_ATTR_WITH_HASH); assertEquals("One attribute expected!", 1, attributes.size()); ASTAttributeValue attr = attributes.iterator().next(); - assertEquals("Expected to detect proper value for attribute!", "#{something", attr.getImage()); + assertEquals("Expected to detect proper value for attribute!", "{!something", attr.getImage()); } @Test @@ -588,7 +541,8 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } /** - * <html> <a1> <a2> <a3> </a2> </a1> <b/> <a4/> </html> + * <html> <a1> <a2> <a3> </a2> </a1> + * <b/> <a4/> </html> */ @Test public void nestedMultipleTags() { @@ -629,8 +583,9 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } /** - * will test <x> <a> <b> <b> </x> </a> </x> . Here x is the first tag to be - * closed thus rendering the next close of a (</a>) to be disregarded. + * will test <x> <a> <b> <b> </x> </a> + * </x> . Here x is the first tag to be closed thus rendering the next + * close of a (</a>) to be disregarded. */ @Test public void unclosedParentTagClosedBeforeChild() { @@ -660,10 +615,11 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } /** - * <x> <a> <b> <b> </z> </a> </x> An unmatched closing of 'z' appears - * randomly in the document. This should be disregarded and structure of - * children and parents should not be influenced. in other words </a> should - * close the first <a> tag , </x> should close the first <x>, etc. + * <x> <a> <b> <b> </z> </a> </x> + * An unmatched closing of 'z' appears randomly in the document. This should + * be disregarded and structure of children and parents should not be + * influenced. in other words </a> should close the first <a> + * tag , </x> should close the first <x>, etc. */ @Test public void unmatchedTagDoesNotInfluenceStructure() { @@ -693,10 +649,11 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } /** - * <a> <x> <a> <b> <b> </z> </a> </x> An unmatched closing of 'z' appears - * randomly in the document. This should be disregarded and structure of - * children and parents should not be influenced. Also un unclosed <a> tag - * appears at the start of the document + * <a> <x> <a> <b> <b> </z> </a> + * </x> An unmatched closing of 'z' appears randomly in the document. + * This should be disregarded and structure of children and parents should + * not be influenced. Also un unclosed <a> tag appears at the start of + * the document */ @Test public void unclosedStartTagWithUnmatchedCloseOfDifferentTag() { @@ -731,8 +688,8 @@ public class JspDocStyleTest extends AbstractJspNodesTst { } /** - * {@link #TEST_UNCLOSED_END_OF_DOC} <tag:x> <tag:y> Tests whether parser - * breaks on no closed tags at all + * {@link #TEST_UNCLOSED_END_OF_DOC} <tag:x> <tag:y> Tests + * whether parser breaks on no closed tags at all */ // This is yet to be improved. If a closing tag does not // exist no tags will be marked as empty :( @@ -848,11 +805,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst { private static final String TEST_TAGS_WITH_DOLLAR = " $ $ "; - private static final String TEST_TAGS_WITH_EL_WITHIN = "#{expr1}${expr2}"; - - private static final String TEST_TAGS_WITH_MIXED_EXPRESSIONS = " aaa ${expr} #{expr} <%=expr%> \\${expr} "; - - private static final String TEST_TAGS_WITH_EXPRESSION_WITHIN = " <%=expr%> <%=expr%> "; + private static final String TEST_TAGS_WITH_EL_WITHIN = "{!expr1}{!expr2}"; private static final String TEST_TEXT_AFTER_OPEN_AND_CLOSED_TAG = " some text some text "; @@ -860,9 +813,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst { private static final String TEST_MULTIPLE_CLOSING_TAGS = " some text some text "; - private static final String TEST_QUOTE_EL = " "; - - private static final String TEST_QUOTE_EXPRESSION = "\" > "; + private static final String TEST_QUOTE_EL = " "; private static final String TEST_QUOTE_TAG_IN_ATTR = "\" > " + "foo "; @@ -871,27 +822,17 @@ public class JspDocStyleTest extends AbstractJspNodesTst { private static final String TEST_NO_QUOTE_EMPTY_ATTR = " foo "; - private static final String TEST_NO_QUOTE_TAG_IN_ATTR = " > foo "; + private static final String TEST_NO_QUOTE_TAG_IN_ATTR = " > foo "; private static final String TEST_NO_QUOTE_CR_LF_ATTR = " foo "; private static final String TEST_NO_QUOTE_TAB_ATTR = " "; - private static final String TEST_NO_QUOTE_ATTR_WITH_EL = " foo "; + private static final String TEST_NO_QUOTE_ATTR_WITH_EL = " foo "; - private static final String TEST_NO_QUOTE_ATTR_WITH_EXPRESSION = " > "; + private static final String TEST_NO_QUOTE_ATTR_WITH_DOLLAR = " foo "; - /** - * same as {@link #TEST_NO_QUOTE_ATTR_WITH_EXPRESSION} only expression is - * not properly closed - */ - private static final String TEST_NO_QUOTE_ATTR_WITH_MALFORMED_EXPR = " "; - - private static final String TEST_NO_QUOTE_ATTR_WITH_SCRIPTLET = "x > "; - - private static final String TEST_NO_QUOTE_ATTR_WITH_DOLLAR = " foo "; - - private static final String TEST_NO_QUOTE_ATTR_WITH_HASH = " foo "; + private static final String TEST_NO_QUOTE_ATTR_WITH_HASH = " foo "; private static final String TEST_UNCLOSED_SIMPLE = " "; diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfPageStyleTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfPageStyleTest.java new file mode 100644 index 0000000000..96a8d7d3f3 --- /dev/null +++ b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/VfPageStyleTest.java @@ -0,0 +1,44 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.vf.ast; + +import static org.junit.Assert.assertEquals; +import java.util.Set; +import org.junit.Test; + +import net.sourceforge.pmd.lang.vf.ast.ASTElExpression; + +public class VfPageStyleTest extends AbstractVfNodesTest { + + /** + * Test parsing of a EL expression. + */ + @Test + public void testElExpression() { + Set expressions = getNodes(ASTElExpression.class, VF_EL_EXPRESSION); + assertEquals("One expression expected!", 1, expressions.size()); + ASTElExpression expression = expressions.iterator().next(); + assertEquals("Correct expression content expected!", "myBean.get(\"{! World }\")", expression.getImage()); + } + + /** + * Test parsing of a EL expression in an attribute. + */ + @Test + public void testElExpressionInAttribute() { + Set expressions = getNodes(ASTElExpression.class, VF_EL_EXPRESSION_IN_ATTRIBUTE); + assertEquals("One expression expected!", 1, expressions.size()); + ASTElExpression expression = expressions.iterator().next(); + assertEquals("Correct expression content expected!", "myValidator.find(\"'vf'\")", expression.getImage()); + } + + private static final String VF_EL_EXPRESSION = "Hello {!myBean.get(\"{! World }\") } .jsp"; + + private static final String VF_EL_EXPRESSION_IN_ATTRIBUTE = " "; + + public static junit.framework.Test suite() { + return new junit.framework.JUnit4TestAdapter(VfPageStyleTest.class); + } +} diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/XPathJspRuleTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/XPathJspRuleTest.java deleted file mode 100644 index 630e2e0d09..0000000000 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/XPathJspRuleTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.vf.ast; - -import static org.junit.Assert.assertEquals; - -import java.io.StringReader; - -import org.junit.Test; - -import net.sourceforge.pmd.PMD; -import net.sourceforge.pmd.PMDException; -import net.sourceforge.pmd.Report; -import net.sourceforge.pmd.Rule; -import net.sourceforge.pmd.RuleContext; -import net.sourceforge.pmd.RuleSet; -import net.sourceforge.pmd.RuleSetFactory; -import net.sourceforge.pmd.RuleSets; -import net.sourceforge.pmd.RuleViolation; -import net.sourceforge.pmd.lang.LanguageRegistry; -import net.sourceforge.pmd.lang.rule.XPathRule; -import net.sourceforge.pmd.lang.vf.VfLanguageModule; -import net.sourceforge.pmd.testframework.RuleTst; - -public class XPathJspRuleTest extends RuleTst { - - /** - * Test matching a XPath expression against a JSP source. - * @throws PMDException - */ - @Test - public void testExpressionMatching() throws PMDException { - Rule rule = new XPathRule(XPATH_EXPRESSION); - rule.setMessage("Test"); - rule.setLanguage(LanguageRegistry.getLanguage(VfLanguageModule.NAME)); - RuleSet rules = new RuleSetFactory().createSingleRuleRuleSet(rule); - - RuleContext ctx = new RuleContext(); - Report report = new Report(); - ctx.setReport(report); - ctx.setSourceCodeFilename("n/a"); - ctx.setLanguageVersion(LanguageRegistry.getLanguage(VfLanguageModule.NAME).getDefaultVersion()); - - PMD p = new PMD(); - - p.getSourceCodeProcessor().processSourceCode(new StringReader(MATCH), new RuleSets(rules), ctx); - - assertEquals("One violation expected!", 1, report.size()); - - RuleViolation rv = report.iterator().next(); - assertEquals(1, rv.getBeginLine()); - } - - private static final String MATCH = "
"; - - private static final String XPATH_EXPRESSION = "//Element [@Name='hr']"; -} diff --git a/pmd-visualforce/src/test/resources/net/sourceforge/pmd/lang/vf/rule/basic/xml/VfUnescapeEl.xml b/pmd-visualforce/src/test/resources/net/sourceforge/pmd/lang/vf/rule/basic/xml/VfUnescapeEl.xml index 1f0a4e8a09..25f4781fbf 100644 --- a/pmd-visualforce/src/test/resources/net/sourceforge/pmd/lang/vf/rule/basic/xml/VfUnescapeEl.xml +++ b/pmd-visualforce/src/test/resources/net/sourceforge/pmd/lang/vf/rule/basic/xml/VfUnescapeEl.xml @@ -41,6 +41,22 @@ XSS via EL via param binding +]]> + vf + + + + + 0 + + + + + + ]]> vf