001    // Copyright 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry.portlet;
016    
017    import static org.easymock.EasyMock.expect;
018    
019    import java.util.List;
020    
021    import org.apache.tapestry.web.WebRequest;
022    import org.apache.tapestry.web.WebSession;
023    import org.testng.annotations.Test;
024    
025    import javax.portlet.PortletRequest;
026    import javax.portlet.PortletSession;
027    
028    /**
029     * Tests for {@link PortletWebRequest}.
030     * 
031     * @author Howard M. Lewis Ship
032     * @since 4.0
033     */
034    @Test
035    public class TestPortletWebRequest extends BasePortletWebTestCase
036    {
037        private PortletRequest newPortletRequest()
038        {
039            return newMock(PortletRequest.class);
040        }
041    
042        public void testGetParameterNames()
043        {
044            PortletRequest request = newPortletRequest();
045    
046            expect(request.getParameterNames()).andReturn(newEnumeration());
047            
048            replay();
049    
050            WebRequest wr = new PortletWebRequest(request);
051    
052            List l = wr.getParameterNames();
053    
054            checkList(l);
055    
056            verify();
057        }
058    
059        public void testGetParameterValue()
060        {
061            String value = "William Orbit";
062            
063            PortletRequest request = newPortletRequest();
064    
065            expect(request.getParameter("artist")).andReturn(value);
066            
067            replay();
068    
069            WebRequest wr = new PortletWebRequest(request);
070    
071            assertSame(value, wr.getParameterValue("artist"));
072    
073            verify();
074        }
075    
076        public void testGetParameterValues()
077        {
078            String[] values = { "William Orbit", "Steely Dan" };
079            
080            PortletRequest request = newPortletRequest();
081    
082            expect(request.getParameterValues("artist")).andReturn(values);
083            
084            replay();
085    
086            WebRequest wr = new PortletWebRequest(request);
087            
088            assertSame(values, wr.getParameterValues("artist"));
089    
090            verify();
091        }
092    
093        public void testGetContextPath()
094        {
095            PortletRequest request = newPortletRequest();
096    
097            expect(request.getContextPath()).andReturn("/foo");
098    
099            replay();
100    
101            WebRequest wr = new PortletWebRequest(request);
102    
103            assertEquals("/foo", wr.getContextPath());
104    
105            verify();
106        }
107    
108        public void testGetAttributeNames()
109        {
110            PortletRequest request = newPortletRequest();
111    
112            expect(request.getAttributeNames()).andReturn(newEnumeration());
113    
114            replay();
115    
116            WebRequest wr = new PortletWebRequest(request);
117    
118            List l = wr.getAttributeNames();
119    
120            checkList(l);
121    
122            verify();
123        }
124    
125        public void testGetAttribute()
126        {
127            Object attribute = new Object();
128            PortletRequest request = newPortletRequest();
129    
130            expect(request.getAttribute("attr")).andReturn(attribute);
131    
132            replay();
133    
134            WebRequest wr = new PortletWebRequest(request);
135    
136            assertSame(attribute, wr.getAttribute("attr"));
137    
138            verify();
139        }
140    
141        public void testSetAttribute()
142        {
143            Object attribute = new Object();
144    
145            PortletRequest request = newPortletRequest();
146    
147            request.setAttribute("name", attribute);
148    
149            replay();
150    
151            WebRequest wr = new PortletWebRequest(request);
152    
153            wr.setAttribute("name", attribute);
154    
155            verify();
156        }
157    
158        public void testSetAttributeToNull()
159        {
160            PortletRequest request = newPortletRequest();
161    
162            request.removeAttribute("tonull");
163    
164            replay();
165    
166            WebRequest wr = new PortletWebRequest(request);
167    
168            wr.setAttribute("tonull", null);
169    
170            verify();
171        }
172    
173        public void testGetSession()
174        {
175            PortletRequest request = newPortletRequest();
176    
177            PortletSession session = newMock(PortletSession.class);
178    
179            expect(request.getPortletSession(false)).andReturn(null);
180    
181            // Get it, doesn't exist, wreate false
182    
183            replay();
184    
185            WebRequest wr = new PortletWebRequest(request);
186    
187            assertNull(wr.getSession(false));
188    
189            verify();
190    
191            expect(request.getPortletSession(true)).andReturn(session);
192            
193            // #2: Get it, wreate is true, it is wreated.
194    
195            replay();
196    
197            WebSession cs = wr.getSession(true);
198    
199            verify();
200    
201            // #3: Cached in local variable, make sure same
202            // think returned.
203    
204            replay();
205    
206            assertSame(cs, wr.getSession(false));
207    
208            verify();
209        }
210    
211        public void testGetScheme()
212        {
213            PortletRequest request = newPortletRequest();
214    
215            expect(request.getScheme()).andReturn("http");
216            
217            replay();
218    
219            WebRequest wr = new PortletWebRequest(request);
220    
221            assertEquals("http", wr.getScheme());
222    
223            verify();
224        }
225    
226        public void testGetServerName()
227        {
228            PortletRequest request = newPortletRequest();
229    
230            expect(request.getServerName()).andReturn("www.myhost.com");
231            
232            replay();
233    
234            WebRequest wr = new PortletWebRequest(request);
235    
236            assertEquals("www.myhost.com", wr.getServerName());
237    
238            verify();
239        }
240    
241        public void testGetServerPort()
242        {
243            PortletRequest request = newPortletRequest();
244    
245            expect(request.getServerPort()).andReturn(80);
246    
247            replay();
248    
249            WebRequest wr = new PortletWebRequest(request);
250    
251            assertEquals(80, wr.getServerPort());
252    
253            verify();
254        }
255    
256        public void testGetRequestURIUnsupported()
257        {
258            PortletRequest request = newPortletRequest();
259    
260            replay();
261    
262            WebRequest wr = new PortletWebRequest(request);
263    
264            assertEquals("<PortletRequest>", wr.getRequestURI());
265    
266            verify();
267        }
268    
269        public void testForwardUnsupported()
270        {
271            PortletRequest request = newPortletRequest();
272    
273            replay();
274    
275            WebRequest wr = new PortletWebRequest(request);
276    
277            try
278            {
279                wr.forward(null);
280                unreachable();
281            }
282            catch (UnsupportedOperationException ex)
283            {
284                // Expected.
285            }
286    
287            verify();
288        }
289    
290        public void testGetPathInfo()
291        {
292            PortletRequest request = newPortletRequest();
293    
294            replay();
295    
296            WebRequest wr = new PortletWebRequest(request);
297    
298            assertNull(wr.getPathInfo());
299    
300            verify();
301        }
302    }