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 }