/* * $Id: TestActionRedirect.java 514052 2007-03-03 02:00:37Z pbenedict $ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.struts.action; import junit.framework.AssertionFailedError; import junit.framework.ComparisonFailure; import junit.framework.TestCase; import junit.framework.TestSuite; import java.util.Map; /** * <p>Unit tests for the {@link ActionRedirect} class.</p> * * @version $Rev: 514052 $ $Date: 2007-03-03 03:00:37 +0100 (Sat, 03 Mar 2007) $ */ public class TestActionRedirect extends TestCase { public TestActionRedirect(String s) { super(s); } public static TestSuite getSuite() { return new TestSuite(TestActionRedirect.class); } public static void main(String[] args) { junit.textui.TestRunner runner = new junit.textui.TestRunner(); runner.doRun(TestActionRedirect.getSuite()); } // ----------------------------------------------------- Test Methods /** * Check that the redirect flag is set. */ public void testActionRedirectRedirectFlag() { ActionRedirect ar = new ActionRedirect("/path.do"); assertTrue("Redirect flag should be set to true.", ar.getRedirect()); } /** * Test all addParameter methods accepting different data types. */ public void testActionRedirectAddParameter() { ActionRedirect ar = new ActionRedirect("/path.do"); ar.addParameter("st", "test"); ar.addParameter("obj", new StringBuffer("someString")); assertTrue("Incorrect path", ar.getPath().indexOf("/path.do") == 0); assertHasParameter(ar.parameterValues, "st", "test"); assertHasParameter(ar.parameterValues, "obj", "someString"); } /** * Test redirect with anchor. */ public void testActionRedirectWithAnchor() { ActionRedirect ar = new ActionRedirect("/path.do"); ar.addParameter("st", "test"); ar.setAnchor("foo"); assertTrue("Incorrect path", "/path.do?st=test#foo".equals(ar.getPath())); } /** * Test adding parameters with the same name. */ public void testActionRedirectAddSameNameParameter() { ActionRedirect ar = new ActionRedirect("/path.do"); ar.addParameter("param", "param1"); ar.addParameter("param", "param2"); ar.addParameter("param", new StringBuffer("someString")); assertTrue("Incorrect path", ar.getPath().indexOf("/path.do") == 0); assertHasParameter(ar.parameterValues, "param", "param1"); assertHasParameter(ar.parameterValues, "param", "param2"); assertHasParameter(ar.parameterValues, "param", "someString"); assertEquals("Incorrect number of parameters", 3, countParameters(ar.parameterValues, "param")); } /** * Test creating an ActionRedirect which copies its configuration from an * existing ActionForward (except for the "redirect" property). */ public void testActionRedirectFromExistingForward() { ActionForward forward = new ActionForward("/path.do?param=param1"); forward.setRedirect(false); forward.setProperty("key","value"); ActionRedirect ar = new ActionRedirect(forward); ar.addParameter("param", "param2"); ar.addParameter("object1", new StringBuffer("someString")); assertTrue("Incorrect path", ar.getPath().indexOf("/path.do") == 0); assertHasParameter(ar.parameterValues, "param", "param2"); assertHasParameter(ar.parameterValues, "object1", "someString"); assertEquals("Incorrect original path.", forward.getPath(), ar.getOriginalPath()); assertEquals("Incorrect or missing property", "value", ar.getProperty("key")); assertTrue("Original had redirect to false", ar.getRedirect()); } /** * Assert that the given parameters contains an entry for * <code>paramValue</code> under the <code>paramName</code> key. <p/> * * @param parameters the map of parameters to check into * @param paramName the key of the value to be checked * @param paramValue the value to check for */ static void assertHasParameter(Map parameters, String paramName, String paramValue) { Object value = parameters.get(paramName); if (value == null) { throw new AssertionFailedError("Parameter [" + paramName + "] not found"); } if (value instanceof String) { if (!paramValue.equals(value)) { throw new ComparisonFailure("Incorrect value found", paramValue, (String) value); } } else if (value instanceof String[]) { // see if our value is among those in the array String[] values = (String[]) value; for (int i = 0; i < values.length; i++) { if (paramValue.equals(values[i])) { return; } } throw new AssertionFailedError( "Expected value not found for parameter [" + paramName + "]"); } else { // can't recognize the value throw new AssertionFailedError( "Unexpected type found as parameter value for [" + paramName + "]"); } } /** * Determine the number of values that are available for a specific * parameter. <p/> * * @param parameters the map of parameters to check into * @param paramName the key of the value(s) to count * @return the number of values for the specified parameter */ static int countParameters(Map parameters, String paramName) { Object value = parameters.get(paramName); if (value == null) { return 0; } if (value instanceof String) { return 1; } else if (value instanceof String[]) { String[] values = (String[]) value; return values.length; } else { // can't recognize the value throw new AssertionFailedError( "Unexpected type found as parameter value for [" + paramName + "]"); } } }