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  import java.util.ArrayList;
23  import java.util.List;
24  
25  import javax.faces.component.UISelectItem;
26  import javax.faces.component.UISelectItems;
27  import javax.faces.component.behavior.AjaxBehavior;
28  import javax.faces.component.html.HtmlSelectManyListbox;
29  import javax.faces.component.html.HtmlSelectOneListbox;
30  import javax.faces.model.SelectItem;
31  
32  import junit.framework.Test;
33  import junit.framework.TestSuite;
34  
35  import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
36  import org.apache.myfaces.test.utils.HtmlRenderedAttr;
37  import org.apache.myfaces.test.base.AbstractJsfTestCase;
38  import org.apache.myfaces.test.mock.MockRenderKitFactory;
39  import org.apache.myfaces.test.mock.MockResponseWriter;
40  
41  /**
42   * @author Bruno Aranda (latest modification by $Author: lu4242 $)
43   * @version $Revision: 942849 $ $Date: 2010-05-10 14:10:01 -0500 (Mon, 10 May 2010) $
44   */
45  public class HtmlListboxRendererTest extends AbstractJsfTestCase
46  {
47      private MockResponseWriter writer ;
48      private HtmlSelectOneListbox selectOneListbox;
49      private HtmlSelectManyListbox selectManyListbox;
50  
51      public HtmlListboxRendererTest(String name)
52      {
53          super(name);
54      }
55      
56      public static Test suite() {
57          return new TestSuite(HtmlListboxRendererTest.class);
58      }
59  
60      public void setUp() throws Exception
61      {
62          super.setUp();
63  
64          selectOneListbox = new HtmlSelectOneListbox();
65          selectManyListbox = new HtmlSelectManyListbox();
66  
67          writer = new MockResponseWriter(new StringWriter(), null, null);
68          facesContext.setResponseWriter(writer);
69  
70          facesContext.getViewRoot().setRenderKitId(MockRenderKitFactory.HTML_BASIC_RENDER_KIT);
71          facesContext.getRenderKit().addRenderer(
72                  selectOneListbox.getFamily(),
73                  selectOneListbox.getRendererType(),
74                  new HtmlListboxRenderer());
75          facesContext.getRenderKit().addRenderer(
76                  selectManyListbox.getFamily(),
77                  selectManyListbox.getRendererType(),
78                  new HtmlListboxRenderer());
79          facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
80      }
81  
82      public void tearDown() throws Exception
83      {
84          super.tearDown();
85          selectOneListbox = null;
86          writer = null;
87      }
88  
89      public void testSelectOneHtmlPropertyPassTru() throws Exception
90      {
91          HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateBasicAttrs();
92          
93          List items = new ArrayList();
94          items.add(new SelectItem("mars"));
95  
96          UISelectItems selectItems = new UISelectItems();
97          selectItems.setValue(items);
98  
99          selectOneListbox.getChildren().add(selectItems);
100 
101         HtmlCheckAttributesUtil.checkRenderedAttributes(
102                 selectOneListbox, facesContext, writer, attrs);
103         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
104             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
105         }
106     }
107     
108     public void testSelectManyHtmlPropertyPassTru() throws Exception
109     {
110         HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateBasicAttrs();
111         
112         List items = new ArrayList();
113         items.add(new SelectItem("mars"));
114 
115         UISelectItems selectItems = new UISelectItems();
116         selectItems.setValue(items);
117 
118         selectManyListbox.getChildren().add(selectItems);
119         
120         HtmlCheckAttributesUtil.checkRenderedAttributes(
121                 selectManyListbox, facesContext, writer, attrs);
122         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
123             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
124         }
125     }
126     
127     /**
128      * Components that render client behaviors should always render "id" and "name" attribute
129      */
130     public void testClientBehaviorHolderRendersIdAndNameSelectOneListbox() 
131     {
132         UISelectItem item1 = new UISelectItem();
133         item1.setItemLabel("#1");
134         item1.setItemValue("#1");
135         
136         UISelectItem item2 = new UISelectItem();
137         item2.setItemLabel("#2");
138         item2.setItemValue("#2");
139         
140         selectOneListbox.addClientBehavior("keypress", new AjaxBehavior());
141         try 
142         {
143             selectOneListbox.getChildren().add(item1);
144             selectOneListbox.getChildren().add(item2);
145             selectOneListbox.encodeAll(facesContext);
146             String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
147             assertTrue(output.matches(".+id=\".+\".+"));
148             assertTrue(output.matches(".+name=\".+\".+"));
149         }
150         catch (Exception e)
151         {
152             fail(e.getMessage());
153         }
154         
155     }
156     
157     /**
158      * Components that render client behaviors should always render "id" and "name" attribute
159      */
160     public void testClientBehaviorHolderRendersIdAndNameSelectManyListbox() 
161     {
162         UISelectItem item1 = new UISelectItem();
163         item1.setItemLabel("#1");
164         item1.setItemValue("#1");
165         
166         UISelectItem item2 = new UISelectItem();
167         item2.setItemLabel("#2");
168         item2.setItemValue("#2");
169         
170         selectManyListbox.addClientBehavior("keypress", new AjaxBehavior());
171         try 
172         {
173             selectManyListbox.getChildren().add(item1);
174             selectManyListbox.getChildren().add(item2);
175             selectManyListbox.encodeAll(facesContext);
176             String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
177             assertTrue(output.matches(".+id=\".+\".+"));
178             assertTrue(output.matches(".+name=\".+\".+"));
179         }
180         catch (Exception e)
181         {
182             fail(e.getMessage());
183         }
184         
185     }
186 }