View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.renderkit.html;
20  
21  import java.io.StringWriter;
22  
23  import javax.faces.application.FacesMessage;
24  import javax.faces.component.html.HtmlMessages;
25  
26  import junit.framework.Test;
27  import junit.framework.TestSuite;
28  
29  import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
30  import org.apache.myfaces.test.utils.HtmlRenderedAttr;
31  import org.apache.myfaces.test.base.AbstractJsfTestCase;
32  import org.apache.myfaces.test.mock.MockRenderKitFactory;
33  import org.apache.myfaces.test.mock.MockResponseWriter;
34  
35  /**
36   * @author Bruno Aranda (latest modification by $Author: lu4242 $)
37   * @version $Revision: 1164682 $ $Date: 2011-09-02 15:01:01 -0500 (Fri, 02 Sep 2011) $
38   */
39  public class HtmlMessagesRendererTest extends AbstractJsfTestCase
40  {
41      private static final String ERROR_CLASS = "errorClass";
42      private static final String WARN_CLASS = "warnClass";
43      private static final String INFO_CLASS = "infoClass";
44  
45      private HtmlMessages messages;
46      private MockResponseWriter writer;
47  
48      public HtmlMessagesRendererTest(String name)
49      {
50          super(name);
51      }
52      
53      public static Test suite() {
54          return new TestSuite(HtmlMessagesRendererTest.class);
55      }
56  
57      public void setUp() throws Exception
58      {
59          super.setUp();
60          messages = new HtmlMessages();
61  
62          writer = new MockResponseWriter(new StringWriter(), null, null);
63          facesContext.setResponseWriter(writer);
64  
65          facesContext.getViewRoot().setRenderKitId(MockRenderKitFactory.HTML_BASIC_RENDER_KIT);
66          facesContext.getRenderKit().addRenderer(
67                  messages.getFamily(),
68                  messages.getRendererType(),
69                  new HtmlMessagesRenderer());
70          
71          facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
72      }
73  
74      public void tearDown() throws Exception
75      {
76          super.tearDown();
77          messages = null;
78          writer = null;
79      }
80      
81      public void testHtmlPropertyPassTru() throws Exception
82      {
83          HtmlRenderedAttr[] attrs = {
84              //_EventProperties
85              new HtmlRenderedAttr("onclick",2), 
86              new HtmlRenderedAttr("ondblclick",2), 
87              new HtmlRenderedAttr("onkeydown",2), 
88              new HtmlRenderedAttr("onkeypress",2),
89              new HtmlRenderedAttr("onkeyup",2), 
90              new HtmlRenderedAttr("onmousedown",2), 
91              new HtmlRenderedAttr("onmousemove",2), 
92              new HtmlRenderedAttr("onmouseout",2),
93              new HtmlRenderedAttr("onmouseover",2), 
94              new HtmlRenderedAttr("onmouseup",2),
95              //_StyleProperties
96              new HtmlRenderedAttr("styleClass", "styleClass", "class=\"styleClass\""),
97              new HtmlRenderedAttr("style"),
98              new HtmlRenderedAttr("warnClass", "warnClass", "class=\"warnClass\"",2),
99              new HtmlRenderedAttr("warnStyle", "warnStyle", "style=\"warnStyle\"",2)
100         };
101         
102         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
103         facesContext.addMessage("test2", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary2", "detailWarnSummary2"));        
104 
105         messages.setErrorClass(ERROR_CLASS);
106         messages.setWarnClass(WARN_CLASS);
107         messages.setInfoClass(INFO_CLASS);
108         messages.setWarnStyle("warnStyle");
109         
110         messages.setLayout("table");
111         //messages.setStyle("left: 48px; top: 432px; position: absolute");
112         
113         MockResponseWriter writer = (MockResponseWriter)facesContext.getResponseWriter();
114         HtmlCheckAttributesUtil.checkRenderedAttributes(
115                 messages, facesContext, writer, attrs);
116         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
117             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
118         }
119     }
120     
121     public void testRenderSpanOnlyWhenNecessary1() throws Exception
122     {
123         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
124         messages.encodeEnd(facesContext);
125         facesContext.renderResponse();
126         String output = writer.getWriter().toString();
127         assertTrue(output.contains("warnSumary"));
128         assertTrue(!output.contains("span"));
129     }
130     
131     public void testRenderSpanOnlyWhenNecessary2() throws Exception
132     {
133         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
134         messages.setLayout("table");
135         messages.encodeEnd(facesContext);
136         facesContext.renderResponse();
137         String output = writer.getWriter().toString();
138         assertTrue(output.contains("warnSumary"));
139         assertTrue(!output.contains("span"));
140     }
141     
142     public void testRenderSpanOnlyWhenNecessary3() throws Exception
143     {
144         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
145         messages.setId("msgPanel");
146         messages.encodeEnd(facesContext);
147         facesContext.renderResponse();
148         String output = writer.getWriter().toString();
149         assertTrue(output.contains("warnSumary"));
150         assertTrue(!output.contains("span"));
151     }
152     
153     /**
154      * It should output the class on li
155      * @throws Exception
156      */
157     public void testRenderSpanOnlyWhenNecessary4() throws Exception
158     {
159         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_FATAL, "fatalSumary", "detailFatalSummary"));
160         messages.setId("msgPanel");
161         messages.setFatalClass("fatalClass");
162         messages.encodeEnd(facesContext);
163         facesContext.renderResponse();
164         String output = writer.getWriter().toString();
165         assertTrue(output.contains("fatalSumary"));
166         assertTrue(output.contains("li class=\"fatalClass\""));
167         assertTrue(!output.contains("span"));
168     }
169     
170     /**
171      * It should output the class on td
172      * @throws Exception
173      */
174     public void testRenderSpanOnlyWhenNecessary5() throws Exception
175     {
176         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_FATAL, "fatalSumary", "detailFatalSummary"));
177         messages.setId("msgPanel");
178         messages.setLayout("table");
179         messages.setFatalClass("fatalClass");
180         messages.encodeEnd(facesContext);
181         facesContext.renderResponse();
182         String output = writer.getWriter().toString();
183         assertTrue(output.contains("fatalSumary"));
184         assertTrue(output.contains("td class=\"fatalClass\""));
185         assertTrue(!output.contains("span"));
186     }
187     
188     public void testHtmlPropertyPassTruNotRendered() throws Exception
189     {
190         HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateAttrsNotRenderedForReadOnly();
191         
192         facesContext.addMessage("test1", new FacesMessage(FacesMessage.SEVERITY_WARN, "warnSumary", "detailWarnSummary"));
193 
194         messages.setErrorClass(ERROR_CLASS);
195         messages.setWarnClass(WARN_CLASS);
196         messages.setInfoClass(INFO_CLASS);
197         messages.setWarnStyle("warnStyle");
198         
199         messages.setLayout("table");
200         messages.setStyle("left: 48px; top: 432px; position: absolute");
201         
202         MockResponseWriter writer = (MockResponseWriter)facesContext.getResponseWriter();
203         HtmlCheckAttributesUtil.checkRenderedAttributes(
204                 messages, facesContext, writer, attrs);
205         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
206             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
207         }
208     }
209 }