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.checkOrder; 018 import static org.easymock.EasyMock.expect; 019 020 import org.apache.hivemind.Registry; 021 import org.apache.tapestry.BaseComponentTestCase; 022 import org.testng.annotations.Test; 023 024 import javax.portlet.ActionRequest; 025 import javax.portlet.ActionResponse; 026 import javax.portlet.PortletConfig; 027 import javax.portlet.PortletContext; 028 import javax.portlet.RenderRequest; 029 import javax.portlet.RenderResponse; 030 031 /** 032 * Tests for {@link org.apache.tapestry.portlet.ApplicationPortlet}. 033 * 034 * @author Howard M. Lewis Ship 035 * @since 4.0 036 */ 037 @Test(sequential = true) 038 public class TestApplicationPortlet extends BaseComponentTestCase 039 { 040 public static class ApplicationPortletFixture extends ApplicationPortlet 041 { 042 private final Registry _constructRegistry; 043 044 public ApplicationPortletFixture(Registry registry) 045 { 046 _constructRegistry = registry; 047 } 048 049 protected Registry constructRegistry(PortletConfig config) 050 { 051 return _constructRegistry; 052 } 053 } 054 055 private PortletApplicationInitializer newInitializer() 056 { 057 return newMock(PortletApplicationInitializer.class); 058 } 059 060 private ActionRequestServicer newActionRequestServicer() 061 { 062 return newMock(ActionRequestServicer.class); 063 } 064 065 private RenderRequestServicer newRenderRequestServicer() 066 { 067 return newMock(RenderRequestServicer.class); 068 } 069 070 private Registry newRegistry(PortletApplicationInitializer initializer, 071 ActionRequestServicer actionRequestServicer, RenderRequestServicer renderRequestServicer) 072 { 073 Registry registry = newMock(Registry.class); 074 checkOrder(registry, false); 075 076 expect(registry.getService( 077 "tapestry.portlet.PortletApplicationInitializer", 078 PortletApplicationInitializer.class)).andReturn(initializer); 079 080 expect(registry.getService("tapestry.portlet.ActionRequestServicer", ActionRequestServicer.class)) 081 .andReturn(actionRequestServicer); 082 083 expect(registry.getService("tapestry.portlet.RenderRequestServicer", RenderRequestServicer.class)) 084 .andReturn(renderRequestServicer); 085 086 return registry; 087 } 088 089 private PortletConfig newConfig() 090 { 091 return newMock(PortletConfig.class); 092 } 093 094 private ActionRequest newActionRequest() 095 { 096 return newMock(ActionRequest.class); 097 } 098 099 private ActionResponse newActionResponse() 100 { 101 return newMock(ActionResponse.class); 102 } 103 104 private RenderRequest newRenderRequest() 105 { 106 return newMock(RenderRequest.class); 107 } 108 109 private RenderResponse newRenderResponse() 110 { 111 return newMock(RenderResponse.class); 112 } 113 114 public void testParseOptionalDescriptors() throws Exception 115 { 116 PortletConfig config = newMock(PortletConfig.class); 117 PortletContext context = newMock(PortletContext.class); 118 119 checkOrder(config, false); 120 checkOrder(context, false); 121 122 expect(config.getPortletName()).andReturn("myportlet").anyTimes(); 123 124 // Called once in ApplicationPortlet code, 125 // then inside PortletWebContextInitializer 126 127 expect(config.getPortletContext()).andReturn(context).anyTimes(); 128 129 expect(context.getResource("/WEB-INF/myportlet/hivemodule.xml")) 130 .andReturn(getClass().getResource("hivemodule-portlet.xml")).anyTimes(); 131 132 expect(context.getResource("/WEB-INF/hivemodule.xml")) 133 .andReturn(getClass().getResource("hivemodule.xml")).anyTimes(); 134 135 expect(context.getResource("/WEB-INF/myportlet/myportlet.application")) 136 .andReturn(null); 137 138 expect(context.getResource("/WEB-INF/myportlet.application")).andReturn(null); 139 140 replay(); 141 142 ApplicationPortlet ap = new ApplicationPortlet(); 143 144 ap.init(config); 145 146 assertNotNull(ap._registry); 147 assertNotNull(ap._actionRequestServicer); 148 assertNotNull(ap._renderRequestServicer); 149 150 assertEquals("parsed", ap._registry.expandSymbols("${module-portlet}", null)); 151 assertEquals("parsed", ap._registry.expandSymbols("${module-plain}", null)); 152 153 verify(); 154 } 155 156 public void testInitAndDestroy() throws Exception 157 { 158 PortletApplicationInitializer initializer = newInitializer(); 159 ActionRequestServicer actionRequestServicer = newActionRequestServicer(); 160 RenderRequestServicer renderRequestServicer = newRenderRequestServicer(); 161 162 Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer); 163 PortletConfig config = newConfig(); 164 165 initializer.initialize(config); 166 167 replay(); 168 169 ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry); 170 171 portlet.init(config); 172 173 verify(); 174 175 registry.shutdown(); 176 177 replay(); 178 179 portlet.destroy(); 180 181 verify(); 182 } 183 184 public void testProcessAction() throws Exception 185 { 186 PortletApplicationInitializer initializer = newInitializer(); 187 ActionRequestServicer actionRequestServicer = newActionRequestServicer(); 188 RenderRequestServicer renderRequestServicer = newRenderRequestServicer(); 189 190 Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer); 191 192 PortletConfig config = newConfig(); 193 194 initializer.initialize(config); 195 196 replay(); 197 198 ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry); 199 200 portlet.init(config); 201 202 verify(); 203 204 ActionRequest request = newActionRequest(); 205 ActionResponse response = newActionResponse(); 206 207 registry.setupThread(); 208 209 actionRequestServicer.service(request, response); 210 211 registry.cleanupThread(); 212 213 replay(); 214 215 portlet.processAction(request, response); 216 217 verify(); 218 } 219 220 public void testProcessRender() throws Exception 221 { 222 PortletApplicationInitializer initializer = newInitializer(); 223 ActionRequestServicer actionRequestServicer = newActionRequestServicer(); 224 RenderRequestServicer renderRequestServicer = newRenderRequestServicer(); 225 226 Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer); 227 228 PortletConfig config = newConfig(); 229 230 initializer.initialize(config); 231 232 replay(); 233 234 ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry); 235 236 portlet.init(config); 237 238 verify(); 239 240 RenderRequest request = newRenderRequest(); 241 RenderResponse response = newRenderResponse(); 242 243 registry.setupThread(); 244 245 renderRequestServicer.service(request, response); 246 247 registry.cleanupThread(); 248 249 replay(); 250 251 portlet.render(request, response); 252 253 verify(); 254 } 255 }