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