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.UIColumn;
26 import javax.faces.component.behavior.AjaxBehavior;
27 import javax.faces.component.html.HtmlDataTable;
28 import javax.faces.component.html.HtmlOutputText;
29 import javax.faces.model.ListDataModel;
30
31 import junit.framework.Test;
32 import junit.framework.TestSuite;
33
34 import org.apache.myfaces.test.base.AbstractJsfTestCase;
35 import org.apache.myfaces.test.mock.MockRenderKitFactory;
36 import org.apache.myfaces.test.mock.MockResponseWriter;
37 import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
38 import org.apache.myfaces.test.utils.HtmlRenderedAttr;
39
40
41
42
43
44 public class HtmlTableRendererTest extends AbstractJsfTestCase
45 {
46 private MockResponseWriter writer ;
47 private HtmlDataTable dataTable;
48
49 public HtmlTableRendererTest(String name)
50 {
51 super(name);
52 }
53
54 public static Test suite() {
55 return new TestSuite(HtmlTableRendererTest.class);
56 }
57
58 public void setUp() throws Exception
59 {
60 super.setUp();
61
62 dataTable = new HtmlDataTable();
63
64 writer = new MockResponseWriter(new StringWriter(), null, null);
65 facesContext.setResponseWriter(writer);
66
67 facesContext.getViewRoot().setRenderKitId(MockRenderKitFactory.HTML_BASIC_RENDER_KIT);
68 facesContext.getRenderKit().addRenderer(
69 dataTable.getFamily(),
70 dataTable.getRendererType(),
71 new HtmlTableRenderer());
72
73 HtmlOutputText text = new HtmlOutputText();
74 facesContext.getRenderKit().addRenderer(
75 text.getFamily(),
76 text.getRendererType(),
77 new HtmlTextRenderer());
78
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 dataTable = null;
86 writer = null;
87 }
88
89 public void testHtmlPropertyPassTru() throws Exception
90 {
91 HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateBasicReadOnlyAttrs();
92
93 HtmlCheckAttributesUtil.checkRenderedAttributes(
94 dataTable, facesContext, writer, attrs);
95 if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
96 fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
97 }
98 }
99
100 public void testHtmlPropertyPassTruNotRendered() throws Exception
101 {
102 HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateAttrsNotRenderedForReadOnly();
103
104 HtmlCheckAttributesUtil.checkRenderedAttributes(
105 dataTable, facesContext, writer, attrs);
106 if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
107 fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
108 }
109 }
110
111
112
113
114 public void testClientBehaviorHolderRendersIdAndName()
115 {
116 dataTable.addClientBehavior("keypress", new AjaxBehavior());
117 try
118 {
119 dataTable.encodeAll(facesContext);
120 String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
121 assertTrue(output.matches("(?s).+id=\".+\".+"));
122 assertTrue(output.matches("(?s).+name=\".+\".+"));
123 }
124 catch (Exception e)
125 {
126 fail(e.getMessage());
127 }
128
129 }
130
131
132
133
134
135
136 public void testNoRowCountRender()
137 {
138 List<Person> list = new ArrayList<Person>();
139 list.add(new Person("John" , "Smith"));
140 list.add(new Person("Pepito", "Perez"));
141 list.add(new Person("Kurt", "Kobain"));
142
143 dataTable.setId("data");
144 dataTable.setRowClasses("class1, class2");
145 dataTable.setVar("person");
146
147 UIColumn column1 = new UIColumn();
148 HtmlOutputText text = new HtmlOutputText();
149 text.setValueExpression("value",
150 facesContext.getApplication().getExpressionFactory().createValueExpression(
151 facesContext.getELContext(), "#{person.firstName}", String.class));
152 column1.getChildren().add(text);
153
154 dataTable.getChildren().add(column1);
155 UIColumn column2 = new UIColumn();
156 HtmlOutputText text2 = new HtmlOutputText();
157 text2.setValueExpression("value",
158 facesContext.getApplication().getExpressionFactory().createValueExpression(
159 facesContext.getELContext(), "#{person.lastName}", String.class));
160 column2.getChildren().add(text2);
161 dataTable.getChildren().add(column2);
162
163 dataTable.setValue(new UnknownRowCountDemoDataModel<Person>(list));
164
165 String output1 = null;
166 try
167 {
168 dataTable.encodeAll(facesContext);
169 output1 = ((StringWriter) writer.getWriter()).getBuffer().toString();
170 }
171 catch (Exception e)
172 {
173 fail(e.getMessage());
174 }
175
176 dataTable.setValue(new ListDataModel<Person>(list));
177 ((StringWriter) writer.getWriter()).getBuffer().setLength(0);
178
179 String output2 = null;
180 try
181 {
182 dataTable.encodeAll(facesContext);
183 output2 = ((StringWriter) writer.getWriter()).getBuffer().toString();
184 }
185 catch (Exception e)
186 {
187 fail(e.getMessage());
188 }
189
190 assertTrue(output2.contains("John"));
191 assertTrue(output2.contains("Smith"));
192 assertTrue(output2.contains("class1"));
193 assertTrue(output2.contains("class2"));
194
195 assertTrue(output1.contains("John"));
196 assertTrue(output1.contains("Smith"));
197 assertTrue(output1.contains("class1"));
198 assertTrue(output1.contains("class2"));
199
200 assertEquals(output2, output1);
201 }
202
203 public class Person
204 {
205 private String firstName;
206
207 private String lastName;
208
209 public Person(String firstName, String lastName)
210 {
211 this.firstName = firstName;
212 this.lastName = lastName;
213 }
214
215 public String getFirstName()
216 {
217 return firstName;
218 }
219
220 public void setFirstName(String firstName)
221 {
222 this.firstName = firstName;
223 }
224
225 public String getLastName()
226 {
227 return lastName;
228 }
229
230 public void setLastName(String lastName)
231 {
232 this.lastName = lastName;
233 }
234 }
235
236 public class UnknownRowCountDemoDataModel<E> extends ListDataModel<E>
237 {
238 public UnknownRowCountDemoDataModel()
239 {
240 super();
241 }
242
243 public UnknownRowCountDemoDataModel(List<E> list)
244 {
245 super(list);
246 }
247
248 @Override
249 public int getRowCount()
250 {
251 return -1;
252 }
253 }
254 }