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$)
39   * @version $Revision$ $Date$
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              new HtmlRenderedAttr("role"),
97              //_FocusBlurProperties
98              new HtmlRenderedAttr("onfocus"), 
99              new HtmlRenderedAttr("onblur"),
100             //_ChangeSelectProperties
101             new HtmlRenderedAttr("onchange"), 
102             new HtmlRenderedAttr("onselect"),
103             //_EventProperties
104             new HtmlRenderedAttr("onclick"), 
105             new HtmlRenderedAttr("ondblclick"), 
106             new HtmlRenderedAttr("onkeydown"), 
107             new HtmlRenderedAttr("onkeypress"),
108             new HtmlRenderedAttr("onkeyup"), 
109             new HtmlRenderedAttr("onmousedown"), 
110             new HtmlRenderedAttr("onmousemove"), 
111             new HtmlRenderedAttr("onmouseout"),
112             new HtmlRenderedAttr("onmouseover"), 
113             new HtmlRenderedAttr("onmouseup"),
114             //_StyleProperties
115             new HtmlRenderedAttr("style", 1), 
116             new HtmlRenderedAttr("styleClass", "styleClass", "class=\"styleClass\"", 1),
117             //_TabindexProperty
118             new HtmlRenderedAttr("tabindex")
119         };
120         
121         UISelectItem item = new UISelectItem();
122         item.setItemLabel("mars");
123         item.setItemValue("mars");
124         selectManyCheckbox.getChildren().add(item);
125 
126         HtmlCheckAttributesUtil.checkRenderedAttributes(
127                 selectManyCheckbox, facesContext, writer, attrs);
128         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
129             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
130         }
131     }
132     
133     public void testSelectBooleanHtmlPropertyPasstru() throws Exception 
134     {
135         HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateBasicAttrs();
136         
137         selectBooleanCheckbox.setSelected(true);
138 
139         HtmlCheckAttributesUtil.checkRenderedAttributes(
140                 selectBooleanCheckbox, facesContext, writer, attrs);
141         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
142             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
143         }
144     
145     }   
146     
147     /**
148      * Components that render client behaviors should always render "id" and "name" attribute
149      */
150     public void testClientBehaviorHolderRendersIdAndNameSelectBooleanCheckbox() 
151     {
152         selectBooleanCheckbox.addClientBehavior("focus", new AjaxBehavior());
153         try 
154         {
155             selectBooleanCheckbox.encodeAll(facesContext);
156             String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
157             assertTrue(output.matches(".+id=\".+\".+"));
158             assertTrue(output.matches(".+name=\".+\".+"));
159         }
160         catch (Exception e)
161         {
162             fail(e.getMessage());
163         }
164         
165     }
166     
167     /**
168      * Components that render client behaviors should always render "id" and "name" attribute
169      */
170     public void testClientBehaviorHolderRendersIdAndNameSelectManyCheckbox() 
171     {
172         UISelectItem item1 = new UISelectItem();
173         item1.setItemLabel("#1");
174         item1.setItemValue("#1");
175         
176         UISelectItem item2 = new UISelectItem();
177         item2.setItemLabel("#2");
178         item2.setItemValue("#2");
179         
180         selectManyCheckbox.addClientBehavior("focus", new AjaxBehavior());
181         try 
182         {
183             selectManyCheckbox.getChildren().add(item1);
184             selectManyCheckbox.getChildren().add(item2);
185             selectManyCheckbox.encodeAll(facesContext);
186             String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
187             assertTrue(output.matches(".+id=\".+\".+"));
188             assertTrue(output.matches(".+name=\".+\".+"));
189         }
190         catch (Exception e)
191         {
192             fail(e.getMessage());
193         }
194         
195     }
196 }