Package org.apache.tapestry.portlet

Source Code of org.apache.tapestry.portlet.TestMatchingPortletPageResolver

// 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 java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.portlet.PortletMode;
import javax.portlet.PortletRequest;
import javax.portlet.WindowState;

import org.apache.hivemind.test.HiveMindTestCase;
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.PageNotFoundException;
import org.easymock.MockControl;

/**
* Tests for {@link org.apache.tapestry.portlet.MatchingPortletPageResolver}.
*
* @author Howard M. Lewis Ship
* @since 4.0
*/
public class TestMatchingPortletPageResolver extends HiveMindTestCase
{
    private IRequestCycle newCycle()
    {
        return (IRequestCycle) newMock(IRequestCycle.class);
    }

    private IPage newPage()
    {
        return (IPage) newMock(IPage.class);
    }

    private IRequestCycle newCycle(String pageName)
    {
        IPage page = newPage();

        MockControl control = newControl(IRequestCycle.class);
        IRequestCycle cycle = (IRequestCycle) control.getMock();

        cycle.getPage(pageName);
        control.setReturnValue(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();

        MockControl requestc = newControl(PortletRequest.class);
        PortletRequest request = (PortletRequest) requestc.getMock();

        trainContentType(requestc, request, "text/xml");

        List l = Collections.singletonList(newContribution("text/html", null, "wierd", "Wierd"));

        replayControls();

        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
        resolver.setContributions(l);
        resolver.initializeService();
        resolver.setRequest(request);

        assertNull(resolver.getPageNameForRequest(cycle));

        verifyControls();
    }

    public void testNoMatchOnPortletMode()
    {
        IRequestCycle cycle = newCycle();

        MockControl requestc = newControl(PortletRequest.class);
        PortletRequest request = (PortletRequest) requestc.getMock();

        trainPortletMode(requestc, request, "edit");

        List l = Collections.singletonList(newContribution(null, "view", null, "Wierd"));

        replayControls();

        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
        resolver.setContributions(l);
        resolver.initializeService();
        resolver.setRequest(request);

        assertNull(resolver.getPageNameForRequest(cycle));

        verifyControls();
    }

    public void testNoMatchOnWindowState()
    {
        IRequestCycle cycle = newCycle();

        MockControl requestc = newControl(PortletRequest.class);
        PortletRequest request = (PortletRequest) requestc.getMock();

        trainWindowState(requestc, request, "huge");

        List l = Collections.singletonList(newContribution(null, null, "tiny", "Wierd"));

        replayControls();

        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
        resolver.setContributions(l);
        resolver.initializeService();
        resolver.setRequest(request);

        assertNull(resolver.getPageNameForRequest(cycle));

        verifyControls();
    }

    public void testSortingCounts()
    {
        IRequestCycle cycle = newCycle("EditHuge");

        MockControl requestc = newControl(PortletRequest.class);
        PortletRequest request = (PortletRequest) requestc.getMock();

        List l = new ArrayList();
        l.add(newContribution(null, "edit", null, "EditNormal"));
        l.add(newContribution(null, "edit", "huge", "EditHuge"));

        trainPortletMode(requestc, request, "edit");
        trainWindowState(requestc, request, "huge");

        replayControls();

        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
        resolver.setContributions(l);
        resolver.initializeService();
        resolver.setRequest(request);

        assertEquals("EditHuge", resolver.getPageNameForRequest(cycle));

        verifyControls();
    }

    public void testPageMissing()
    {
        IPage page = newPage();

        MockControl cyclec = newControl(IRequestCycle.class);
        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();

        MockControl requestc = newControl(PortletRequest.class);
        PortletRequest request = (PortletRequest) requestc.getMock();

        List l = new ArrayList();
        l.add(newContribution(null, "edit", null, "EditNormal"));
        l.add(newContribution(null, "edit", "huge", "EditHuge"));

        trainPortletMode(requestc, request, "edit");
        trainWindowState(requestc, request, "huge");

        cycle.getPage("EditHuge");
        cyclec.setThrowable(new PageNotFoundException("missing!"));

        trainPortletMode(requestc, request, "edit");

        cycle.getPage("EditNormal");
        cyclec.setReturnValue(page);

        replayControls();

        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
        resolver.setContributions(l);
        resolver.initializeService();
        resolver.setRequest(request);

        assertEquals("EditNormal", resolver.getPageNameForRequest(cycle));

        verifyControls();
    }

    private void trainContentType(MockControl control, PortletRequest request, String contentType)
    {
        request.getResponseContentType();
        control.setReturnValue(contentType);
    }

    private void trainPortletMode(MockControl control, PortletRequest request, String modeName)
    {
        PortletMode mode = new PortletMode(modeName);

        request.getPortletMode();
        control.setReturnValue(mode);
    }

    private void trainWindowState(MockControl control, PortletRequest request, String stateName)
    {
        WindowState state = new WindowState(stateName);

        request.getWindowState();
        control.setReturnValue(state);
    }
}
TOP

Related Classes of org.apache.tapestry.portlet.TestMatchingPortletPageResolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.