blob: de1bfa35d0ea0ed4a1dcc2fc073c1b51a9481650 [file] [log] [blame]
// Copyright 2005 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry.portlet;
import static org.easymock.EasyMock.checkOrder;
import static org.easymock.EasyMock.expect;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.tapestry.BaseComponentTestCase;
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.PageNotFoundException;
import org.testng.annotations.Test;
import javax.portlet.PortletMode;
import javax.portlet.PortletRequest;
import javax.portlet.WindowState;
/**
* Tests for {@link org.apache.tapestry.portlet.MatchingPortletPageResolver}.
*
* @author Howard M. Lewis Ship
* @since 4.0
*/
@Test
public class TestMatchingPortletPageResolver extends BaseComponentTestCase
{
private IRequestCycle newCycle(String pageName)
{
IPage page = newPage();
IRequestCycle cycle = newCycle();
checkOrder(cycle, false);
expect(cycle.getPage(pageName)).andReturn(page);
return cycle;
}
private PageResolverContribution newContribution(String mimeType, String portletMode,
String windowState, String pageName)
{
PageResolverContribution result = new PageResolverContribution();
result.setMimeType(mimeType);
result.setPortletMode(portletMode);
result.setWindowState(windowState);
result.setPageName(pageName);
return result;
}
public void testNoMatchOnContentType()
{
IRequestCycle cycle = newCycle();
PortletRequest request = newMock(PortletRequest.class);
trainContentType(request, "text/xml");
List l = Collections.singletonList(newContribution("text/html", null, "wierd", "Wierd"));
replay();
MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
resolver.setContributions(l);
resolver.initializeService();
resolver.setRequest(request);
assertNull(resolver.getPageNameForRequest(cycle));
verify();
}
public void testNoMatchOnPortletMode()
{
IRequestCycle cycle = newCycle();
PortletRequest request = newMock(PortletRequest.class);
trainPortletMode(request, "edit");
List l = Collections.singletonList(newContribution(null, "view", null, "Wierd"));
replay();
MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
resolver.setContributions(l);
resolver.initializeService();
resolver.setRequest(request);
assertNull(resolver.getPageNameForRequest(cycle));
verify();
}
public void testNoMatchOnWindowState()
{
IRequestCycle cycle = newCycle();
PortletRequest request = newMock(PortletRequest.class);
trainWindowState(request, "huge");
List l = Collections.singletonList(newContribution(null, null, "tiny", "Wierd"));
replay();
MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
resolver.setContributions(l);
resolver.initializeService();
resolver.setRequest(request);
assertNull(resolver.getPageNameForRequest(cycle));
verify();
}
public void testSortingCounts()
{
IRequestCycle cycle = newCycle("EditHuge");
PortletRequest request = newMock(PortletRequest.class);
List l = new ArrayList();
l.add(newContribution(null, "edit", null, "EditNormal"));
l.add(newContribution(null, "edit", "huge", "EditHuge"));
trainPortletMode(request, "edit");
trainWindowState(request, "huge");
replay();
MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
resolver.setContributions(l);
resolver.initializeService();
resolver.setRequest(request);
assertEquals("EditHuge", resolver.getPageNameForRequest(cycle));
verify();
}
public void testPageMissing()
{
IPage page = newPage();
IRequestCycle cycle = newCycle();
PortletRequest request = newMock(PortletRequest.class);
List l = new ArrayList();
l.add(newContribution(null, "edit", null, "EditNormal"));
l.add(newContribution(null, "edit", "huge", "EditHuge"));
trainPortletMode(request, "edit");
trainWindowState(request, "huge");
expect(cycle.getPage("EditHuge")).andThrow(new PageNotFoundException("missing!"));
trainPortletMode(request, "edit");
expect(cycle.getPage("EditNormal")).andReturn(page);
replay();
MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
resolver.setContributions(l);
resolver.initializeService();
resolver.setRequest(request);
assertEquals("EditNormal", resolver.getPageNameForRequest(cycle));
verify();
}
private void trainContentType(PortletRequest request, String contentType)
{
expect(request.getResponseContentType()).andReturn(contentType);
}
private void trainPortletMode(PortletRequest request, String modeName)
{
PortletMode mode = new PortletMode(modeName);
expect(request.getPortletMode()).andReturn(mode);
}
private void trainWindowState(PortletRequest request, String stateName)
{
WindowState state = new WindowState(stateName);
expect(request.getWindowState()).andReturn(state);
}
}