1 package test.net.sourceforge.pmd.jsp.ast; 2 import static org.junit.Assert.assertEquals; 3 import net.sourceforge.pmd.jsp.ast.ASTElExpression; 4 import net.sourceforge.pmd.jsp.ast.ASTJspComment; 5 import net.sourceforge.pmd.jsp.ast.ASTJspDeclaration; 6 import net.sourceforge.pmd.jsp.ast.ASTJspDirective; 7 import net.sourceforge.pmd.jsp.ast.ASTJspDirectiveAttribute; 8 import net.sourceforge.pmd.jsp.ast.ASTJspExpression; 9 import net.sourceforge.pmd.jsp.ast.ASTJspExpressionInAttribute; 10 import net.sourceforge.pmd.jsp.ast.ASTJspScriptlet; 11 import net.sourceforge.pmd.jsp.ast.ASTValueBinding; 12 13 import org.junit.Test; 14 15 import java.util.ArrayList; 16 import java.util.Collections; 17 import java.util.Comparator; 18 import java.util.List; 19 import java.util.Set; 20 public class JspPageStyleTest extends AbstractJspNodesTst { 21 22 /** 23 * Test parsing of a JSP comment. 24 */ 25 @Test 26 public void testComment() { 27 Set comments = getNodes(ASTJspComment.class, JSP_COMMENT); 28 assertEquals("One comment expected!", 1, comments.size()); 29 ASTJspComment comment = (ASTJspComment) comments.iterator().next(); 30 assertEquals("Correct comment content expected!", "some comment", comment.getImage()); 31 } 32 33 /** 34 * Test parsing a JSP directive. 35 */ 36 @Test 37 public void testDirective() { 38 Set nodes = getNodes(null, JSP_DIRECTIVE); 39 40 Set<ASTJspDirective> directives = getNodesOfType(ASTJspDirective.class, nodes); 41 assertEquals("One directive expected!", 1, directives.size()); 42 ASTJspDirective directive = directives.iterator().next(); 43 assertEquals("Correct directive name expected!", 44 "page", directive.getName()); 45 46 Set<ASTJspDirectiveAttribute> directiveAttrs = getNodesOfType(ASTJspDirectiveAttribute.class, nodes); 47 assertEquals("Two directive attributes expected!", 2, directiveAttrs.size()); 48 49 List<ASTJspDirectiveAttribute> attrsList = new ArrayList<ASTJspDirectiveAttribute>(directiveAttrs); 50 Collections.sort(attrsList, new Comparator<ASTJspDirectiveAttribute>() { 51 public int compare(ASTJspDirectiveAttribute arg0, ASTJspDirectiveAttribute arg1) { 52 return arg0.getName().compareTo(arg1.getName()); 53 } 54 }); 55 56 ASTJspDirectiveAttribute attr = attrsList.get(0); 57 assertEquals("Correct directive attribute name expected!", 58 "language", attr.getName()); 59 assertEquals("Correct directive attribute value expected!", 60 "java", attr.getValue()); 61 62 attr = attrsList.get(1); 63 assertEquals("Correct directive attribute name expected!", 64 "session", attr.getName()); 65 assertEquals("Correct directive attribute value expected!", 66 "true", attr.getValue()); 67 68 69 } 70 71 /** 72 * Test parsing of a JSP declaration. 73 */ 74 @Test 75 public void testDeclaration() { 76 Set declarations = getNodes(ASTJspDeclaration.class, JSP_DECLARATION); 77 assertEquals("One declaration expected!", 1, declarations.size()); 78 ASTJspDeclaration declaration = (ASTJspDeclaration) declarations.iterator().next(); 79 assertEquals("Correct declaration content expected!", 80 "String someString = \"s\";", declaration.getImage()); 81 } 82 83 /** 84 * Test parsing of a JSP scriptlet. 85 */ 86 @Test 87 public void testScriptlet() { 88 Set scriptlets = getNodes(ASTJspScriptlet.class, JSP_SCRIPTLET); 89 assertEquals("One scriptlet expected!", 1, scriptlets.size()); 90 ASTJspScriptlet scriptlet = (ASTJspScriptlet) scriptlets.iterator().next(); 91 assertEquals("Correct scriptlet content expected!", 92 "someString = someString + \"suffix\";", scriptlet.getImage()); 93 } 94 95 /** 96 * Test parsing of a JSP expression. 97 */ 98 @Test 99 public void testExpression() { 100 Set expressions = getNodes(ASTJspExpression.class, JSP_EXPRESSION); 101 assertEquals("One expression expected!", 1, expressions.size()); 102 ASTJspExpression expression = (ASTJspExpression) expressions.iterator().next(); 103 assertEquals("Correct expression content expected!", 104 "someString", expression.getImage()); 105 } 106 107 /** 108 * Test parsing of a JSP expression in an attribute. 109 */ 110 @Test 111 public void testExpressionInAttribute() { 112 Set expressions = getNodes(ASTJspExpressionInAttribute.class, 113 JSP_EXPRESSION_IN_ATTRIBUTE); 114 assertEquals("One expression expected!", 1, expressions.size()); 115 ASTJspExpressionInAttribute expression = (ASTJspExpressionInAttribute) expressions.iterator().next(); 116 assertEquals("Correct expression content expected!", 117 "style.getClass()", expression.getImage()); 118 } 119 120 /** 121 * Test parsing of a EL expression. 122 */ 123 @Test 124 public void testElExpression() { 125 Set expressions = getNodes(ASTElExpression.class, JSP_EL_EXPRESSION); 126 assertEquals("One expression expected!", 1, expressions.size()); 127 ASTElExpression expression = (ASTElExpression) expressions.iterator().next(); 128 assertEquals("Correct expression content expected!", 129 "myBean.get(\"${ World }\")", expression.getImage()); 130 } 131 132 /** 133 * Test parsing of a EL expression in an attribute. 134 */ 135 @Test 136 public void testElExpressionInAttribute() { 137 Set expressions = getNodes(ASTElExpression.class, JSP_EL_EXPRESSION_IN_ATTRIBUTE); 138 assertEquals("One expression expected!", 1, expressions.size()); 139 ASTElExpression expression = (ASTElExpression) expressions.iterator().next(); 140 assertEquals("Correct expression content expected!", 141 "myValidator.find(\"'jsp'\")", expression.getImage()); 142 } 143 144 /** 145 * Test parsing of a EL expression in an attribute. 146 */ 147 @Test 148 public void testJsfValueBinding() { 149 Set valueBindings = getNodes(ASTValueBinding.class, JSF_VALUE_BINDING); 150 assertEquals("One value binding expected!", 1, valueBindings.size()); 151 ASTValueBinding valueBinding = (ASTValueBinding) valueBindings.iterator().next(); 152 assertEquals("Correct expression content expected!", 153 "myValidator.find(\"'jsf'\")", valueBinding.getImage()); 154 } 155 156 private static final String JSP_COMMENT 157 = "<html> <%-- some comment --%> </html>"; 158 159 private static final String JSP_DIRECTIVE 160 = "<html> <%@ page language=\"java\" session='true'%> </html>"; 161 162 private static final String JSP_DECLARATION 163 = "<html><%! String someString = \"s\"; %></html>"; 164 165 private static final String JSP_SCRIPTLET 166 = "<html> <% someString = someString + \"suffix\"; %> </html>"; 167 168 private static final String JSP_EXPRESSION 169 = "<html><head><title> <%= someString %> </title></head></html>"; 170 171 private static final String JSP_EXPRESSION_IN_ATTRIBUTE 172 = "<html> <body> <p class='<%= style.getClass() %>'> Hello </p> </body> </html>"; 173 174 private static final String JSP_EL_EXPRESSION 175 = "<html><title>Hello ${myBean.get(\"${ World }\") } .jsp</title></html>"; 176 177 private static final String JSP_EL_EXPRESSION_IN_ATTRIBUTE 178 = "<html> <f:validator type=\"get('type').${myValidator.find(\"'jsp'\")}\" /> </html>"; 179 180 private static final String JSF_VALUE_BINDING 181 = "<html> <body> <p class='#{myValidator.find(\"'jsf'\")}'> Hello </p> </body> </html>"; 182 183 public static junit.framework.Test suite() { 184 return new junit.framework.JUnit4TestAdapter(JspPageStyleTest.class); 185 } 186 }