/** * Licensed under the Artistic License; you may not use this file * except in compliance with the License. * You may obtain a copy of the License at * * http://displaytag.sourceforge.net/license.html * * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ package org.displaytag.portlet; import java.util.HashMap; import java.util.Map; import javax.portlet.PortletMode; import javax.portlet.WindowState; import junit.framework.TestCase; import org.springframework.mock.web.portlet.MockPortletRequest; import org.springframework.mock.web.portlet.MockRenderResponse; /** * @author Eric Dalquist <a href="mailto:edalquist@unicon.net">edalquist@unicon.net</a> * @version $Id$ */ public class PortletHrefTest extends TestCase { /** * @see junit.framework.TestCase#getName() */ public String getName() { return "PortletHref Test"; } public void testConstructor() { try { new PortletHref(null, null); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } try { new PortletHref(new MockPortletRequest(), null); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } try { new PortletHref(null, new MockRenderResponse()); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } new PortletHref(new MockPortletRequest(), new MockRenderResponse()); } public void testUrlTypeParameters() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); assertFalse(href.isAction()); href.addParameter(PortletHref.PARAM_TYPE, PortletHref.TYPE_ACTION); assertTrue(href.isAction()); href.addParameter(PortletHref.PARAM_TYPE, PortletHref.TYPE_RENDER); assertFalse(href.isAction()); href.addParameter(PortletHref.PARAM_TYPE, PortletHref.TYPE_ACTION); assertTrue(href.isAction()); try { href.addParameter(PortletHref.PARAM_TYPE, null); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } try { href.addParameter(PortletHref.PARAM_TYPE, ""); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } try { href.addParameter(PortletHref.PARAM_TYPE, "InvalidUrlType"); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } } public void testSecureParameters() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); assertFalse(href.isRequestedSecure()); href.addParameter(PortletHref.PARAM_SECURE, Boolean.TRUE.toString()); assertTrue(href.isRequestedSecure()); href.addParameter(PortletHref.PARAM_SECURE, "true"); assertTrue(href.isRequestedSecure()); href.addParameter(PortletHref.PARAM_SECURE, "TRUE"); assertTrue(href.isRequestedSecure()); href.addParameter(PortletHref.PARAM_SECURE, "yes"); assertFalse(href.isRequestedSecure()); href.addParameter(PortletHref.PARAM_SECURE, null); assertFalse(href.isRequestedSecure()); href.addParameter(PortletHref.PARAM_SECURE, "false"); assertFalse(href.isRequestedSecure()); } public void testPortletModeParameters() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); assertNull(href.getRequestedMode()); href.addParameter(PortletHref.PARAM_MODE, "view"); assertEquals(new PortletMode("view"), href.getRequestedMode()); href.addParameter(PortletHref.PARAM_MODE, "help"); assertEquals(new PortletMode("help"), href.getRequestedMode()); href.addParameter(PortletHref.PARAM_MODE, "edit"); assertEquals(new PortletMode("edit"), href.getRequestedMode()); href.addParameter(PortletHref.PARAM_MODE, null); assertNull(href.getRequestedMode()); try { href.addParameter(PortletHref.PARAM_MODE, "info"); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } } public void testWindowStateParameters() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); assertNull(href.getRequestedState()); href.addParameter(PortletHref.PARAM_STATE, "normal"); assertEquals(new WindowState("normal"), href.getRequestedState()); href.addParameter(PortletHref.PARAM_STATE, "minimized"); assertEquals(new WindowState("minimized"), href.getRequestedState()); href.addParameter(PortletHref.PARAM_STATE, "maximized"); assertEquals(new WindowState("maximized"), href.getRequestedState()); href.addParameter(PortletHref.PARAM_STATE, null); assertNull(href.getRequestedState()); try { href.addParameter(PortletHref.PARAM_STATE, "exclusive"); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } } public void testInvalidPrefixUseParameters() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); try { href.addParameter("portlet:WindowState", "exclusive"); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { // expected } } public void testAddParameters() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); href.addParameter(PortletHref.PARAM_MODE, "help"); href.addParameter(PortletHref.PARAM_STATE, "maximized"); href.addParameter(PortletHref.PARAM_SECURE, "true"); href.addParameter(PortletHref.PARAM_TYPE, PortletHref.TYPE_ACTION); href.addParameter("SINGLE_PARAM", "VAL1"); href.addParameter("INT_PARAM", 31337); assertTrue(href.isRequestedSecure()); assertEquals(new PortletMode("help"), href.getRequestedMode()); assertEquals(new WindowState("maximized"), href.getRequestedState()); assertTrue(href.isAction()); final Map actualParams = href.getParameterMap(); assertEquals(2, actualParams.size()); assertEquals(actualParams.get("SINGLE_PARAM"), "VAL1"); assertEquals(actualParams.get("INT_PARAM"), "31337"); } public void testAddParameterMap() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); final Map params = new HashMap(); params.put(PortletHref.PARAM_MODE, "help"); params.put(PortletHref.PARAM_STATE, "maximized"); params.put(PortletHref.PARAM_SECURE, "true"); params.put(PortletHref.PARAM_TYPE, PortletHref.TYPE_ACTION); params.put("SINGLE_PARAM", "VAL1"); final String[] multiParam = new String[]{"VAL2", "VAL3"}; params.put("MULTI_PARAM", multiParam); params.put("INT_PARAM", new Integer("31337")); href.addParameterMap(params); assertTrue(href.isRequestedSecure()); assertEquals(new PortletMode("help"), href.getRequestedMode()); assertEquals(new WindowState("maximized"), href.getRequestedState()); assertTrue(href.isAction()); final Map actualParams = href.getParameterMap(); assertEquals(3, actualParams.size()); assertEquals(actualParams.get("SINGLE_PARAM"), "VAL1"); assertEquals(actualParams.get("INT_PARAM"), "31337"); final String[] actualMultiParam = (String[]) actualParams.get("MULTI_PARAM"); assertEquals(multiParam.length, actualMultiParam.length); assertEquals(multiParam[0], actualMultiParam[0]); assertEquals(multiParam[1], actualMultiParam[1]); } public void testSetParameterMap() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); href.addParameter("ORIGINAL_PARAM", "ORIGNAL_VALUE"); final Map params = new HashMap(); params.put(PortletHref.PARAM_MODE, "help"); params.put(PortletHref.PARAM_STATE, "maximized"); params.put(PortletHref.PARAM_SECURE, "true"); params.put(PortletHref.PARAM_TYPE, PortletHref.TYPE_ACTION); params.put("SINGLE_PARAM", "VAL1"); final String[] multiParam = new String[]{"VAL2", "VAL3"}; params.put("MULTI_PARAM", multiParam); params.put("INT_PARAM", new Integer("31337")); href.setParameterMap(params); assertTrue(href.isRequestedSecure()); assertEquals(new PortletMode("help"), href.getRequestedMode()); assertEquals(new WindowState("maximized"), href.getRequestedState()); assertTrue(href.isAction()); final Map actualParams = href.getParameterMap(); assertEquals(3, actualParams.size()); assertEquals(actualParams.get("SINGLE_PARAM"), "VAL1"); assertEquals(actualParams.get("INT_PARAM"), "31337"); assertNull(actualParams.get("ORIGINAL_PARAM")); final String[] actualMultiParam = (String[]) actualParams.get("MULTI_PARAM"); assertEquals(multiParam.length, actualMultiParam.length); assertEquals(multiParam[0], actualMultiParam[0]); assertEquals(multiParam[1], actualMultiParam[1]); } public void testRemoveParameter() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); href.addParameter("SINGLE_PARAM", "VAL1"); final Map actualParams = href.getParameterMap(); assertEquals(1, actualParams.size()); assertEquals(actualParams.get("SINGLE_PARAM"), "VAL1"); href.removeParameter("SINGLE_PARAM"); final Map actualParams2 = href.getParameterMap(); assertEquals(0, actualParams2.size()); assertNull(actualParams2.get("SINGLE_PARAM")); } public void testClone() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); href.addParameter(PortletHref.PARAM_MODE, "help"); href.addParameter(PortletHref.PARAM_STATE, "maximized"); href.addParameter(PortletHref.PARAM_SECURE, "true"); href.addParameter(PortletHref.PARAM_TYPE, PortletHref.TYPE_ACTION); href.addParameter("SINGLE_PARAM", "VAL1"); href.addParameter("INT_PARAM", 31337); assertTrue(href.isRequestedSecure()); assertEquals(new PortletMode("help"), href.getRequestedMode()); assertEquals(new WindowState("maximized"), href.getRequestedState()); assertTrue(href.isAction()); final Map actualParams = href.getParameterMap(); assertEquals(2, actualParams.size()); assertEquals(actualParams.get("SINGLE_PARAM"), "VAL1"); assertEquals(actualParams.get("INT_PARAM"), "31337"); final PortletHref href2 = (PortletHref) href.clone(); assertTrue(href != href2); assertEquals(href, href2); assertEquals(href.hashCode(), href2.hashCode()); } public void testBaseUrl() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); href.addParameter(PortletHref.PARAM_MODE, "help"); href.addParameter(PortletHref.PARAM_STATE, "maximized"); href.addParameter(PortletHref.PARAM_SECURE, "true"); href.addParameter("SINGLE_PARAM", "VAL1"); final String baseRenderUrl = href.getBaseUrl(); assertEquals("http://localhost/mockportlet?urlType=render", baseRenderUrl); href.addParameter(PortletHref.PARAM_TYPE, PortletHref.TYPE_ACTION); final String baseActionUrl = href.getBaseUrl(); assertEquals("http://localhost/mockportlet?urlType=action", baseActionUrl); } public void testFullUrl() { final PortletHref href = new PortletHref(new MockPortletRequest(), new MockRenderResponse()); final String urlString1 = href.toString(); assertEquals("http://localhost/mockportlet?urlType=render", urlString1); href.addParameter(PortletHref.PARAM_TYPE, PortletHref.TYPE_ACTION); final String urlString2 = href.toString(); assertEquals("http://localhost/mockportlet?urlType=action", urlString2); href.addParameter(PortletHref.PARAM_SECURE, Boolean.TRUE.toString()); final String urlString3 = href.toString(); assertEquals("https://localhost/mockportlet?urlType=action", urlString3); // This code should work but the MockPortletURL provided by spring doesn't follow the // interface docs on invalid modes/states // href.setRequestedState(new WindowState("exclusive")); // try { // href.toString(); // fail("IllegalStateException should have been thrown."); // } // catch (IllegalStateException ise) { // //expected // } href.addParameter(PortletHref.PARAM_STATE, "normal"); final String urlString7 = href.toString(); assertEquals("https://localhost/mockportlet?urlType=action;windowState=normal", urlString7); href.addParameter(PortletHref.PARAM_STATE, "minimized"); final String urlString8 = href.toString(); assertEquals("https://localhost/mockportlet?urlType=action;windowState=minimized", urlString8); href.addParameter(PortletHref.PARAM_STATE, "maximized"); final String urlString9 = href.toString(); assertEquals("https://localhost/mockportlet?urlType=action;windowState=maximized", urlString9); // This code should work but the MockPortletURL provided by spring doesn't follow the // interface docs on invalid modes/states // href.setRequestedMode(new PortletMode("info")); // try { // href.toString(); // fail("IllegalStateException should have been thrown."); // } // catch (IllegalStateException ise) { // //expected // } href.addParameter(PortletHref.PARAM_MODE, "view"); final String urlString4 = href.toString(); assertEquals("https://localhost/mockportlet?urlType=action;windowState=maximized;portletMode=view", urlString4); href.addParameter(PortletHref.PARAM_MODE, "help"); final String urlString5 = href.toString(); assertEquals("https://localhost/mockportlet?urlType=action;windowState=maximized;portletMode=help", urlString5); href.addParameter(PortletHref.PARAM_MODE, "edit"); final String urlString6 = href.toString(); assertEquals("https://localhost/mockportlet?urlType=action;windowState=maximized;portletMode=edit", urlString6); href.addParameter("SINGLE_PARAM", "VAL"); final String urlString10 = href.toString(); assertEquals( "https://localhost/mockportlet?urlType=action;windowState=maximized;portletMode=edit;param_SINGLE_PARAM=VAL", urlString10); final Map paramMap = new HashMap(); paramMap.put("MULTI_PARAM", new String[]{"VAL1", "VAL2"}); href.addParameterMap(paramMap); final String urlString11 = href.toString(); assertEquals( "https://localhost/mockportlet?urlType=action;windowState=maximized;portletMode=edit;param_MULTI_PARAM=VAL1;param_MULTI_PARAM=VAL2;param_SINGLE_PARAM=VAL", urlString11); href.setAnchor("ANCHOR"); final String urlString12 = href.toString(); assertEquals( "https://localhost/mockportlet?urlType=action;windowState=maximized;portletMode=edit;param_MULTI_PARAM=VAL1;param_MULTI_PARAM=VAL2;param_SINGLE_PARAM=VAL#ANCHOR", urlString12); } }