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.Map;
020    
021    import org.apache.tapestry.BaseComponentTestCase;
022    import org.apache.tapestry.engine.ILink;
023    import org.apache.tapestry.util.QueryParameterMap;
024    import org.testng.annotations.Test;
025    
026    import javax.portlet.PortletMode;
027    import javax.portlet.PortletModeException;
028    import javax.portlet.PortletSecurityException;
029    import javax.portlet.PortletURL;
030    import javax.portlet.WindowState;
031    import javax.portlet.WindowStateException;
032    
033    /**
034     * Tests for {@link org.apache.tapestry.portlet.PortletLink}.
035     * 
036     * @author Howard M. Lewis Ship
037     * @since 4.0
038     */
039    @Test
040    public class TestPortletLink extends BaseComponentTestCase
041    {
042        private static class PortletURLFixture implements PortletURL
043        {
044            private final String _toString;
045    
046            public PortletURLFixture(String toString)
047            {
048                _toString = toString;
049            }
050    
051            public String toString()
052            {
053                return _toString;
054            }
055    
056            public void setWindowState(WindowState arg0) throws WindowStateException
057            {
058            }
059    
060            public void setPortletMode(PortletMode arg0) throws PortletModeException
061            {
062            }
063    
064            public void setParameter(String arg0, String arg1)
065            {
066            }
067    
068            public void setParameter(String arg0, String[] arg1)
069            {
070            }
071    
072            public void setParameters(Map arg0)
073            {
074            }
075    
076            public void setSecure(boolean arg0) throws PortletSecurityException
077            {
078            }
079    
080        }
081    
082        private PortletURL newPortletURL()
083        {
084            return newMock(PortletURL.class);
085        }
086    
087        public void testGetAbsoluteURL()
088        {
089            PortletURL url = newPortletURL();
090            QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
091    
092            replay();
093            org.easymock.classextension.EasyMock.replay(parameters);
094            
095            ILink link = new PortletLink(url, parameters);
096    
097            try
098            {
099                link.getAbsoluteURL();
100                unreachable();
101            }
102            catch (UnsupportedOperationException ex)
103            {
104                // Accept.
105            }
106    
107            try
108            {
109                link.getAbsoluteURL(null, null, -1, null, false);
110                unreachable();
111            }
112            catch (UnsupportedOperationException ex)
113            {
114                // Accept.
115            }
116    
117            verify();
118            org.easymock.classextension.EasyMock.verify(parameters);
119        }
120    
121        public void testGetParameterNames()
122        {
123            PortletURL url = newPortletURL();
124            QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
125    
126            String[] names = { "Fred", "Barney" };
127    
128            expect(parameters.getParameterNames()).andReturn(names);
129            
130            replay();
131            org.easymock.classextension.EasyMock.replay(parameters);
132    
133            ILink link = new PortletLink(url, parameters);
134            
135            assertSame(names, link.getParameterNames());
136            
137            verify();
138            org.easymock.classextension.EasyMock.verify(parameters);
139        }
140        
141        public void testGetParameterValues()
142        {
143            PortletURL url = newPortletURL();
144            
145            QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
146    
147            String[] values = { "Fred", "Barney" };
148    
149            expect(parameters.getParameterValues("bedrock")).andReturn(values);
150            
151            replay();
152            org.easymock.classextension.EasyMock.replay(parameters);
153    
154            ILink link = new PortletLink(url, parameters);
155            
156            assertSame(values, link.getParameterValues("bedrock"));
157    
158            verify();
159            org.easymock.classextension.EasyMock.verify(parameters);
160        }
161    
162        public void testGetURL()
163        {
164            PortletURL url = newPortletURL();
165    
166            QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
167    
168            expect(parameters.getParameterNames()).andReturn(new String[0]);
169            
170            replay();
171            org.easymock.classextension.EasyMock.replay(parameters);
172    
173            ILink link = new PortletLink(url, parameters);
174    
175            assertEquals(url.toString(), link.getURL());
176    
177            verify();
178            org.easymock.classextension.EasyMock.verify(parameters);
179        }
180    
181        public void testGetURLLongForm()
182        {
183            PortletURL url = newPortletURL();
184    
185            QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
186    
187            expect(parameters.getParameterNames()).andReturn(new String[] {"page"});
188            
189            String[] values = new String[] { "View" };
190            
191            expect(parameters.getParameterValues("page")).andReturn(values);
192            
193            url.setParameter("page", values);
194            
195            replay();
196            org.easymock.classextension.EasyMock.replay(parameters);
197    
198            ILink link = new PortletLink(url, parameters);
199    
200            assertEquals("EasyMock for interface javax.portlet.PortletURL#anchor", link.getURL(
201                    "scheme",
202                    "server",
203                    99,
204                    "anchor",
205                    true));
206    
207            verify();
208            org.easymock.classextension.EasyMock.verify(parameters);
209        }
210    
211        public void testGetURLUnencoding()
212        {
213            PortletURL url = new PortletURLFixture("this=foo&that=bar");
214    
215            QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
216    
217            expect(parameters.getParameterNames()).andReturn(new String[0]);
218            
219            replay();
220            org.easymock.classextension.EasyMock.replay(parameters);
221    
222            ILink link = new PortletLink(url, parameters);
223    
224            assertEquals("this=foo&that=bar", link.getURL());
225    
226            verify();
227            org.easymock.classextension.EasyMock.verify(parameters);
228        }
229    
230        public void testGetURLIncludeParameters()
231        {
232            PortletURL url = newPortletURL();
233            
234            QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
235            
236            String[] values = { "Fred", "Barney" };
237            
238            expect(parameters.getParameterNames()).andReturn(new String[]{"bedrock"});
239            
240            expect(parameters.getParameterValues("bedrock")).andReturn(values);
241            
242            url.setParameter("bedrock", values);
243    
244            replay();
245            org.easymock.classextension.EasyMock.replay(parameters);
246    
247            ILink link = new PortletLink(url, parameters);
248    
249            assertEquals(url.toString(), link.getURL());
250    
251            verify();
252            org.easymock.classextension.EasyMock.verify(parameters);
253        }
254    
255        public void testGetURLWithAnchor()
256        {
257            PortletURL url = newPortletURL();
258    
259            QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
260    
261            replay();
262            org.easymock.classextension.EasyMock.replay(parameters);
263    
264            ILink link = new PortletLink(url, parameters);
265    
266            assertEquals("EasyMock for interface javax.portlet.PortletURL#anchor", link.getURL("anchor", false));
267            
268            verify();
269            org.easymock.classextension.EasyMock.verify(parameters);
270        }
271    }