| /* |
| * $Id$ |
| * |
| * 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.struts2.s1; |
| |
| import java.lang.reflect.InvocationTargetException; |
| |
| import org.apache.struts.action.ActionErrors; |
| import org.apache.struts.action.ActionForward; |
| import org.apache.struts.action.ActionMapping; |
| import org.apache.struts.action.ActionMessage; |
| import org.apache.struts.config.ActionConfig; |
| import org.apache.struts.config.ExceptionConfig; |
| import org.apache.struts.config.ForwardConfig; |
| import org.apache.struts.config.ModuleConfig; |
| import org.apache.struts2.StrutsTestCase; |
| import org.apache.struts2.config.StrutsXmlConfigurationProvider; |
| |
| import com.opensymphony.xwork2.ActionSupport; |
| import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig; |
| import com.opensymphony.xwork2.config.entities.PackageConfig; |
| import com.opensymphony.xwork2.config.entities.ResultConfig; |
| |
| /** |
| * Test of Struts1Factory, which creates Struts 1.x wrappers around XWork config objects. |
| */ |
| public class Struts1FactoryTest extends StrutsTestCase { |
| |
| private static final String PACKAGE_NAME = "org/apache/struts2/s1"; |
| |
| protected Struts1Factory factory = null; |
| |
| /** |
| * Set up instance variables required by this test case. |
| * @throws Exception |
| */ |
| public void setUp() throws Exception { |
| super.setUp(); |
| loadConfigurationProviders(new StrutsXmlConfigurationProvider(PACKAGE_NAME + "/test-struts-factory.xml", true, null)); |
| factory = new Struts1Factory(configuration); |
| |
| } |
| |
| /** |
| * Test the creation of a Struts 1.x ModuleConfig wrapper around an XWork PackageConfig. |
| * The PackageConfig is loaded from test-struts-factory.xml. |
| */ |
| public void testCreateModuleConfig() { |
| ModuleConfig moduleConfig = factory.createModuleConfig(PACKAGE_NAME); |
| assertNotNull(moduleConfig); |
| |
| assertEquals("/"+PACKAGE_NAME, moduleConfig.getPrefix()); |
| |
| ActionConfig actionConfig = moduleConfig.findActionConfig("/action1"); |
| assertNotNull(actionConfig); |
| assertEquals("/action1", actionConfig.getPath()); |
| |
| ActionConfig[] actionConfigs = moduleConfig.findActionConfigs(); |
| assertNotNull(actionConfigs); |
| assertEquals(2, actionConfigs.length); |
| |
| ExceptionConfig exceptionConfig = moduleConfig.findExceptionConfig(Exception.class.getName()); |
| assertNotNull(exceptionConfig); |
| assertEquals(Exception.class.getName(), exceptionConfig.getType()); |
| |
| ExceptionConfig[] exceptionConfigs = moduleConfig.findExceptionConfigs(); |
| assertNotNull(exceptionConfigs); |
| assertEquals(1, exceptionConfigs.length); |
| |
| ForwardConfig fwdConfig = moduleConfig.findForwardConfig("globalResult"); |
| assertNotNull(fwdConfig); |
| assertEquals("globalResult", fwdConfig.getName()); |
| |
| // These methods are currently not implemented -- replace as functionality is added. |
| assertNYI(moduleConfig, "getControllerConfig", null); |
| assertNYI(moduleConfig, "getActionFormBeanClass", null); |
| assertNYI(moduleConfig, "getActionMappingClass", null); |
| assertNYI(moduleConfig, "getActionForwardClass", null); |
| assertNYI(moduleConfig, "findException", Class.class); |
| assertNYI(moduleConfig, "findFormBeanConfig", String.class); |
| assertNYI(moduleConfig, "findFormBeanConfigs", null); |
| assertNYI(moduleConfig, "findMessageResourcesConfig", String.class); |
| assertNYI(moduleConfig, "findMessageResourcesConfigs", null); |
| assertNYI(moduleConfig, "findPlugInConfigs", null); |
| } |
| |
| /** |
| * Test the creation of a Struts 1.x ActionMapping wrapper around an XWork ActionConfig. |
| * The ActionConfig is loaded from test-struts-factory.xml. |
| */ |
| public void testCreateActionMapping() { |
| PackageConfig packageConfig = configuration.getPackageConfig(PACKAGE_NAME); |
| com.opensymphony.xwork2.config.entities.ActionConfig actionConfig = |
| (com.opensymphony.xwork2.config.entities.ActionConfig) packageConfig.getActionConfigs().get("action1"); |
| ActionMapping mapping = factory.createActionMapping(actionConfig); |
| assertNotNull(mapping); |
| |
| assertNotNull(mapping.findForward("result1")); |
| assertNotNull(mapping.findForwardConfig("result2")); |
| |
| ForwardConfig[] configs = mapping.findForwardConfigs(); |
| assertNotNull(configs); |
| assertEquals(2, configs.length); |
| |
| String[] forwards = mapping.findForwards(); |
| assertNotNull(forwards); |
| assertEquals(2, forwards.length); |
| |
| ActionForward fwd = mapping.findForward("result1"); |
| assertNotNull(fwd); |
| assertEquals("result1", fwd.getName()); |
| |
| assertNotNull(mapping.findException(NullPointerException.class)); |
| assertNotNull(mapping.findExceptionConfig("java.lang.IllegalStateException")); |
| |
| ExceptionConfig[] exceptionConfigs = mapping.findExceptionConfigs(); |
| assertNotNull(exceptionConfigs); |
| assertEquals(2, exceptionConfigs.length); |
| |
| ModuleConfig moduleConfig = mapping.getModuleConfig(); |
| assertNotNull(moduleConfig); |
| |
| // For now, the path will be null if the ActionMapping was created on its own (as opposed to from a |
| // WrapperModuleConfig, which knows the path). |
| assertNull(mapping.getPath()); |
| |
| // These methods are currently not implemented -- replace as functionality is added. |
| assertNYI(mapping, "getInputForward", null); |
| assertNYI(mapping, "getForward", null); |
| assertNYI(mapping, "getInclude", null); |
| assertNYI(mapping, "getInput", null); |
| assertNYI(mapping, "getMultipartClass", null); |
| assertNYI(mapping, "getName", null); |
| assertNYI(mapping, "getParameter", null); |
| assertNYI(mapping, "getPrefix", null); |
| assertNYI(mapping, "getRoles", null); |
| assertNYI(mapping, "getRoleNames", null); |
| assertNYI(mapping, "getScope", null); |
| assertNYI(mapping, "getSuffix", null); |
| assertNYI(mapping, "getType", null); |
| assertNYI(mapping, "getUnknown", null); |
| assertNYI(mapping, "getValidate", null); |
| } |
| |
| /** |
| * Test the creation of a Struts 1.x ActionForward wrapper around an XWork ResultConfig. |
| * The ResultConfig is loaded from test-struts-factory.xml. |
| */ |
| public void testCreateActionForward() { |
| PackageConfig packageConfig = configuration.getPackageConfig(PACKAGE_NAME); |
| ResultConfig resultConfig = (ResultConfig) packageConfig.getGlobalResultConfigs().get("globalResult"); |
| ActionForward fwd = factory.createActionForward(resultConfig); |
| assertNotNull(fwd); |
| assertEquals("globalResult", fwd.getName()); |
| |
| // These methods are currently not implemented -- replace as functionality is added. |
| assertNYI(fwd, "getPath", null); |
| assertNYI(fwd, "getModule", null); |
| assertNYI(fwd, "getRedirect", null); |
| } |
| |
| /** |
| * Test the creation of a Struts 1.x ExceptionConfig wrapper around an XWork ExceptionHandlerConfig. |
| * The ExceptionConfig is loaded from test-struts-factory.xml. |
| */ |
| public void testCreateExceptionConfig() { |
| PackageConfig packageConfig = configuration.getPackageConfig(PACKAGE_NAME); |
| ExceptionMappingConfig cfg = (ExceptionMappingConfig) packageConfig.getGlobalExceptionMappingConfigs().get(0); |
| ExceptionConfig exceptionConfig = factory.createExceptionConfig(cfg); |
| assertNotNull(exceptionConfig); |
| assertEquals(Exception.class.getName(), exceptionConfig.getType()); |
| |
| assertNYI(exceptionConfig, "getBundle", null); |
| assertNYI(exceptionConfig, "getHandler", null); |
| assertNYI(exceptionConfig, "getKey", null); |
| assertNYI(exceptionConfig, "getPath", null); |
| assertNYI(exceptionConfig, "getScope", null); |
| } |
| |
| public void testConvertErrors() throws Exception { |
| |
| ActionMessage err1 = new ActionMessage("error1"); |
| ActionMessage err2 = new ActionMessage("error2", new Integer(1)); |
| ActionErrors errors = new ActionErrors(); |
| errors.add(errors.GLOBAL_MESSAGE, err1); |
| errors.add("foo", err2); |
| |
| ActionSupport action = new ActionSupport(); |
| factory.convertErrors(errors, action); |
| |
| assertTrue(1 == action.getActionErrors().size()); |
| assertTrue(1 == action.getFieldErrors().size()); |
| } |
| |
| /** |
| * Assert that the given method throws UnsupportedOperationException. |
| */ |
| private void assertNYI(Object o, String methodName, Class argType) { |
| try { |
| Class[] argTypes = argType != null ? new Class[]{argType} : null; |
| |
| Object[] args = null; |
| if (argType != null) { |
| if (Class.class == argType) { |
| args = new Object[]{argType}; |
| } else { |
| args = new Object[]{argType.newInstance()}; |
| } |
| } |
| o.getClass().getMethod(methodName, argTypes).invoke(o, args); |
| } catch (InvocationTargetException e) { |
| Throwable cause = e.getCause(); |
| assertEquals(cause.getMessage(), UnsupportedOperationException.class, cause.getClass()); |
| |
| // OK -- it's what we expected |
| return; |
| } catch (Exception e) { |
| fail(e.getClass().getName() + ": " + e.getMessage()); |
| } |
| |
| fail("Expected UnsupportedOperationException for " + methodName + "() on " + o.getClass().getName()); |
| } |
| } |