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.component.UISelectItem;
24  import javax.faces.component.behavior.AjaxBehavior;
25  import javax.faces.component.html.HtmlSelectBooleanCheckbox;
26  import javax.faces.component.html.HtmlSelectManyCheckbox;
27  
28  import junit.framework.Test;
29  import junit.framework.TestSuite;
30  
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  import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
35  import org.apache.myfaces.test.utils.HtmlRenderedAttr;
36  
37  /**
38   * @author Bruno Aranda (latest modification by $Author: lu4242 $)
39   * @version $Revision: 942849 $ $Date: 2010-05-10 14:10:01 -0500 (Mon, 10 May 2010) $
40   */
41  public class HtmlCheckboxRendererTest extends AbstractJsfTestCase
42  {
43      private MockResponseWriter writer ;
44      private HtmlSelectManyCheckbox selectManyCheckbox;
45      private HtmlSelectBooleanCheckbox selectBooleanCheckbox;
46  
47      public HtmlCheckboxRendererTest(String name)
48      {
49          super(name);
50      }
51      
52      public static Test suite() {
53          return new TestSuite(HtmlCheckboxRendererTest.class);
54      }
55  
56      public void setUp() throws Exception
57      {
58          super.setUp();
59  
60          selectManyCheckbox = new HtmlSelectManyCheckbox();
61          selectBooleanCheckbox = new HtmlSelectBooleanCheckbox();
62  
63          writer = new MockResponseWriter(new StringWriter(), null, null);
64          facesContext.setResponseWriter(writer);
65  
66          facesContext.getViewRoot().setRenderKitId(MockRenderKitFactory.HTML_BASIC_RENDER_KIT);
67          facesContext.getRenderKit().addRenderer(
68                  selectManyCheckbox.getFamily(),
69                  selectManyCheckbox.getRendererType(),
70                  new HtmlCheckboxRenderer());
71          facesContext.getRenderKit().addRenderer(
72                  selectBooleanCheckbox.getFamily(),
73                  selectBooleanCheckbox.getRendererType(),
74                  new HtmlCheckboxRenderer());
75  
76          facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
77      }
78  
79      public void tearDown() throws Exception
80      {
81          super.tearDown();
82          selectManyCheckbox = null;
83          selectBooleanCheckbox = null;
84          writer = null;
85      }
86  
87      public void testSelectManyHtmlPropertyPassTru() throws Exception 
88      {
89          HtmlRenderedAttr[] attrs = {
90              //_AccesskeyProperty
91              new HtmlRenderedAttr("accesskey"),
92              //_UniversalProperties
93              new HtmlRenderedAttr("dir"), 
94              new HtmlRenderedAttr("lang"), 
95              new HtmlRenderedAttr("title"),
96              //_FocusBlurProperties
97              new HtmlRenderedAttr("onfocus"), 
98              new HtmlRenderedAttr("onblur"),
99              //_ChangeSelectProperties
100             new HtmlRenderedAttr("onchange"), 
101             new HtmlRenderedAttr("onselect"),
102             //_EventProperties
103             new HtmlRenderedAttr("onclick"), 
104             new HtmlRenderedAttr("ondblclick"), 
105             new HtmlRenderedAttr("onkeydown"), 
106             new HtmlRenderedAttr("onkeypress"),
107             new HtmlRenderedAttr("onkeyup"), 
108             new HtmlRenderedAttr("onmousedown"), 
109             new HtmlRenderedAttr("onmousemove"), 
110             new HtmlRenderedAttr("onmouseout"),
111             new HtmlRenderedAttr("onmouseover"), 
112             new HtmlRenderedAttr("onmouseup"),
113             //_StyleProperties
114             new HtmlRenderedAttr("style", 1), 
115             new HtmlRenderedAttr("styleClass", "styleClass", "class=\"styleClass\"", 1),
116             //_TabindexProperty
117             new HtmlRenderedAttr("tabindex")
118         };
119         
120         UISelectItem item = new UISelectItem();
121         item.setItemLabel("mars");
122         item.setItemValue("mars");
123         selectManyCheckbox.getChildren().add(item);
124 
125         HtmlCheckAttributesUtil.checkRenderedAttributes(
126                 selectManyCheckbox, facesContext, writer, attrs);
127         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
128             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
129         }
130     }
131     
132     public void testSelectBooleanHtmlPropertyPasstru() throws Exception 
133     {
134         HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateBasicAttrs();
135         
136         selectBooleanCheckbox.setSelected(true);
137 
138         HtmlCheckAttributesUtil.checkRenderedAttributes(
139                 selectBooleanCheckbox, facesContext, writer, attrs);
140         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
141             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
142         }
143     
144     }   
145     
146     /**
147      * Components that render client behaviors should always render "id" and "name" attribute
148      */
149     public void testClientBehaviorHolderRendersIdAndNameSelectBooleanCheckbox() 
150     {
151         selectBooleanCheckbox.addClientBehavior("focus", new AjaxBehavior());
152         try 
153         {
154             selectBooleanCheckbox.encodeAll(facesContext);
155             String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
156             assertTrue(output.matches(".+id=\".+\".+"));
157             assertTrue(output.matches(".+name=\".+\".+"));
158         }
159         catch (Exception e)
160         {
161             fail(e.getMessage());
162         }
163         
164     }
165     
166     /**
167      * Components that render client behaviors should always render "id" and "name" attribute
168      */
169     public void testClientBehaviorHolderRendersIdAndNameSelectManyCheckbox() 
170     {
171         UISelectItem item1 = new UISelectItem();
172         item1.setItemLabel("#1");
173         item1.setItemValue("#1");
174         
175         UISelectItem item2 = new UISelectItem();
176         item2.setItemLabel("#2");
177         item2.setItemValue("#2");
178         
179         selectManyCheckbox.addClientBehavior("focus", new AjaxBehavior());
180         try 
181         {
182             selectManyCheckbox.getChildren().add(item1);
183             selectManyCheckbox.getChildren().add(item2);
184             selectManyCheckbox.encodeAll(facesContext);
185             String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
186             assertTrue(output.matches(".+id=\".+\".+"));
187             assertTrue(output.matches(".+name=\".+\".+"));
188         }
189         catch (Exception e)
190         {
191             fail(e.getMessage());
192         }
193         
194     }
195 }