1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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.HtmlSelectManyMenu;
29 import javax.faces.component.html.HtmlSelectOneMenu;
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
43
44
45 public class HtmlMenuRendererTest extends AbstractJsfTestCase
46 {
47 private MockResponseWriter writer ;
48 private HtmlSelectOneMenu selectOneMenu;
49 private HtmlSelectManyMenu selectManyMenu;
50
51 public HtmlMenuRendererTest(String name)
52 {
53 super(name);
54 }
55
56 public static Test suite() {
57 return new TestSuite(HtmlMenuRendererTest.class);
58 }
59
60 public void setUp() throws Exception
61 {
62 super.setUp();
63
64 selectOneMenu = new HtmlSelectOneMenu();
65 selectManyMenu = new HtmlSelectManyMenu();
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 selectOneMenu.getFamily(),
73 selectOneMenu.getRendererType(),
74 new HtmlMenuRenderer());
75 facesContext.getRenderKit().addRenderer(
76 selectManyMenu.getFamily(),
77 selectManyMenu.getRendererType(),
78 new HtmlMenuRenderer());
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 selectOneMenu = null;
86 selectManyMenu = null;
87 writer = null;
88 }
89
90 public void testSelectOneHtmlPropertyPassTru() throws Exception
91 {
92 HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateBasicAttrs();
93
94 List items = new ArrayList();
95 items.add(new SelectItem("mars"));
96
97 UISelectItems selectItems = new UISelectItems();
98 selectItems.setValue(items);
99
100 selectOneMenu.getChildren().add(selectItems);
101
102 HtmlCheckAttributesUtil.checkRenderedAttributes(
103 selectOneMenu, facesContext, writer, attrs);
104 if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
105 fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
106 }
107 }
108
109 public void testSelectManyHtmlPropertyPassTru() throws Exception
110 {
111 HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateBasicAttrs();
112
113 List items = new ArrayList();
114 items.add(new SelectItem("mars"));
115
116 UISelectItems selectItems = new UISelectItems();
117 selectItems.setValue(items);
118
119 selectManyMenu.getChildren().add(selectItems);
120
121 HtmlCheckAttributesUtil.checkRenderedAttributes(
122 selectManyMenu, facesContext, writer, attrs);
123 if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
124 fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
125 }
126 }
127
128
129
130
131 public void testClientBehaviorHolderRendersIdAndNameSelectOneMenu()
132 {
133 UISelectItem item1 = new UISelectItem();
134 item1.setItemLabel("#1");
135 item1.setItemValue("#1");
136
137 UISelectItem item2 = new UISelectItem();
138 item2.setItemLabel("#2");
139 item2.setItemValue("#2");
140
141 selectOneMenu.addClientBehavior("keypress", new AjaxBehavior());
142 try
143 {
144 selectOneMenu.getChildren().add(item1);
145 selectOneMenu.getChildren().add(item2);
146 selectOneMenu.encodeAll(facesContext);
147 String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
148 assertTrue(output.matches(".+id=\".+\".+"));
149 assertTrue(output.matches(".+name=\".+\".+"));
150 }
151 catch (Exception e)
152 {
153 fail(e.getMessage());
154 }
155
156 }
157
158
159
160
161 public void testClientBehaviorHolderRendersIdAndNameSelectManyMenu()
162 {
163 UISelectItem item1 = new UISelectItem();
164 item1.setItemLabel("#1");
165 item1.setItemValue("#1");
166
167 UISelectItem item2 = new UISelectItem();
168 item2.setItemLabel("#2");
169 item2.setItemValue("#2");
170
171 selectManyMenu.addClientBehavior("keypress", new AjaxBehavior());
172 try
173 {
174 selectManyMenu.getChildren().add(item1);
175 selectManyMenu.getChildren().add(item2);
176 selectManyMenu.encodeAll(facesContext);
177 String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
178 assertTrue(output.matches(".+id=\".+\".+"));
179 assertTrue(output.matches(".+name=\".+\".+"));
180 }
181 catch (Exception e)
182 {
183 fail(e.getMessage());
184 }
185
186 }
187 }