1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.myfaces.context;
17
18 import java.io.ByteArrayOutputStream;
19 import java.io.IOException;
20 import java.io.OutputStream;
21 import java.io.PrintWriter;
22
23 import javax.faces.FactoryFinder;
24 import javax.faces.context.FacesContext;
25 import javax.faces.context.ResponseWriter;
26 import javax.servlet.ServletOutputStream;
27 import javax.servlet.ServletResponse;
28 import javax.servlet.ServletResponseWrapper;
29
30 import org.apache.myfaces.context.servlet.FacesContextImpl;
31 import org.apache.myfaces.test.base.AbstractJsfTestCase;
32 import org.apache.myfaces.test.mock.MockResponseWriter;
33
34
35
36
37
38
39
40 public class ResponseWrapperSwitchTest extends AbstractJsfTestCase {
41
42 public ResponseWrapperSwitchTest() {
43 super("ResponseWrapperSwitchTest");
44 }
45
46 @Override
47 protected void setUp() throws Exception {
48 super.setUp();
49 FactoryFinder.setFactory (FactoryFinder.EXCEPTION_HANDLER_FACTORY,
50 "org.apache.myfaces.context.ExceptionHandlerFactoryImpl");
51 }
52
53 @Override
54 protected void tearDown() throws Exception {
55 super.tearDown();
56 }
57
58
59
60
61 class NewStreamingMockResponse extends ServletResponseWrapper {
62
63 PrintWriter _writer;
64 ServletOutputStream _strm;
65 ServletResponse _response;
66
67 public NewStreamingMockResponse(ServletResponse response, ServletOutputStream strm, PrintWriter writer) {
68 super(response);
69 _strm = strm;
70 _writer = writer;
71 _response = response;
72 }
73
74 @Override
75 public ServletResponse getResponse() {
76 return _response;
77 }
78
79 @Override
80 public ServletOutputStream getOutputStream() throws IOException {
81 return _strm;
82 }
83
84 @Override
85 public PrintWriter getWriter() throws IOException {
86 return _writer;
87 }
88 }
89
90
91
92
93
94 class ServletOutputStreamMock extends ServletOutputStream {
95
96 private OutputStream _bos = null;
97
98 ServletOutputStreamMock(OutputStream ostr) {
99 _bos = ostr;
100 }
101
102 public void write(byte[] arg0) throws IOException {
103 _bos.write(arg0);
104 }
105
106 public void flush() throws IOException {
107 _bos.flush();
108 }
109
110 public String toString() {
111 return _bos.toString();
112 }
113
114 public void close() throws IOException {
115 _bos.close();
116 }
117
118
119
120
121 public OutputStream getBos() {
122 return _bos;
123 }
124
125
126
127
128 public void setBos(OutputStream bos) {
129 this._bos = bos;
130 }
131
132 @Override
133 public void write(int arg0) throws IOException {
134 _bos.write(arg0);
135 }
136 }
137
138
139
140
141
142 public void testSwitchOnWriter() {
143
144 ByteArrayOutputStream ostr = new ByteArrayOutputStream();
145 ByteArrayOutputStream ostrWriter = new ByteArrayOutputStream();
146 PrintWriter writer = new PrintWriter(ostrWriter);
147 ServletOutputStreamMock sOstr = new ServletOutputStreamMock(ostr);
148 NewStreamingMockResponse resp = new NewStreamingMockResponse(response, sOstr, writer);
149
150 FacesContext context = new FacesContextImpl(servletContext, request, resp);
151
152
153 ResponseWriter responseWriter = context.getResponseWriter();
154 if (responseWriter == null) {
155 try {
156 responseWriter = new MockResponseWriter(((ServletResponse) context.getExternalContext().getResponse()).getWriter(), null, null);
157 } catch (IOException ex) {
158 super.fail(ex.getMessage());
159 }
160 context.setResponseWriter(responseWriter);
161 }
162
163
164
165 assertTrue("responsewriter not null", responseWriter != null);
166
167 try {
168 responseWriter.append("hello world");
169 responseWriter.flush();
170 responseWriter.close();
171
172 } catch (IOException ex) {
173 super.fail(ex.getMessage());
174 }
175
176 assertTrue(ostrWriter.toString().trim().equals("hello world"));
177
178 }
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261 }