1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.renderkit;
20
21 import java.io.StringWriter;
22
23 import jakarta.el.ValueExpression;
24 import jakarta.faces.component.UIViewRoot;
25 import jakarta.faces.component.html.HtmlOutputText;
26
27 import junit.framework.Test;
28 import junit.framework.TestSuite;
29
30 import org.apache.myfaces.renderkit.html.HtmlTextRenderer;
31 import org.apache.myfaces.shared.util.StateUtils;
32 import org.apache.myfaces.shared_impl.util.serial.DefaultSerialFactory;
33 import org.apache.myfaces.test.base.AbstractJsfTestCase;
34 import org.apache.myfaces.test.mock.MockRenderKitFactory;
35 import org.apache.myfaces.test.mock.MockResponseWriter;
36
37
38
39
40
41 public class ErrorPageWriterTest extends AbstractJsfTestCase
42 {
43 public static Test suite()
44 {
45 return new TestSuite(ErrorPageWriterTest.class);
46 }
47
48 private MockResponseWriter writer ;
49 private HtmlOutputText outputText;
50
51 public ErrorPageWriterTest(String name)
52 {
53 super(name);
54 }
55
56 public void setUp() throws Exception
57 {
58 super.setUp();
59
60 outputText = new HtmlOutputText();
61
62 writer = new MockResponseWriter(new StringWriter(), null, null);
63 facesContext.setResponseWriter(writer);
64
65 facesContext.getViewRoot().setRenderKitId(MockRenderKitFactory.HTML_BASIC_RENDER_KIT);
66 facesContext.getRenderKit().addRenderer(
67 outputText.getFamily(),
68 outputText.getRendererType(),
69 new HtmlTextRenderer());
70 servletContext.setAttribute(StateUtils.SERIAL_FACTORY, new DefaultSerialFactory());
71
72 facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
73 }
74
75 public void tearDown() throws Exception
76 {
77 super.tearDown();
78 outputText = null;
79 writer = null;
80 }
81
82 public void testValueExpressionGetExpressionStringReturnsNull()
83 {
84
85 UIViewRoot root = facesContext.getViewRoot();
86
87
88
89
90 root.getChildren().add(outputText);
91
92 ValueExpression ve = new NullReturningGetExpressionStringValueExpression();
93
94 outputText.setValueExpression("rendered", ve);
95 String id = "testValueExpressionGetExpressionStringReturnsNullOutputComponent";
96 outputText.setId(id);
97 try
98 {
99 StringWriter w = new StringWriter();
100 Throwable t = new Throwable("Placeholder throwable");
101 ErrorPageWriter.debugHtml(w, facesContext, t);
102 String output = w.toString();
103 int indexOfOutputComponentId = output.indexOf(id);
104 String surroundingText = "output component not found.";
105 if (-1 != indexOfOutputComponentId) {
106 surroundingText = output.substring(Math.max(0, indexOfOutputComponentId - 20), Math.min(output.length(), indexOfOutputComponentId + 280));
107 }
108 int indexOfHasRenderedAttribute = output.indexOf("rendered=\"\"");
109 boolean hasRenderedAttribute = (-1 != indexOfHasRenderedAttribute);
110 assertTrue("rendered attribute wasn't written correctly: " + surroundingText, hasRenderedAttribute);
111 }
112 catch (Exception e)
113 {
114 fail(e.getMessage());
115 }
116 }
117
118 }