View Javadoc

    1   package org.apache.struts2.s1;
    2
    3   import java.lang.reflect.InvocationTargetException;
    4
    5   import junit.framework.TestCase;
    6
    7   import org.apache.struts.action.ActionErrors;
    8   import org.apache.struts.action.ActionForward;
    9   import org.apache.struts.action.ActionMapping;
    10  import org.apache.struts.action.ActionMessage;
    11  import org.apache.struts.config.ActionConfig;
    12  import org.apache.struts.config.ExceptionConfig;
    13  import org.apache.struts.config.ForwardConfig;
    14  import org.apache.struts.config.ModuleConfig;
    15  import org.apache.struts2.config.StrutsXmlConfigurationProvider;
    16
    17  import com.opensymphony.xwork2.ActionSupport;
    18  import com.opensymphony.xwork2.ObjectFactory;
    19  import com.opensymphony.xwork2.config.Configuration;
    20  import com.opensymphony.xwork2.config.ConfigurationManager;
    21  import com.opensymphony.xwork2.config.ConfigurationProvider;
    22  import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
    23  import com.opensymphony.xwork2.config.entities.PackageConfig;
    24  import com.opensymphony.xwork2.config.entities.ResultConfig;
    25
    26  /***
    27   * Test of Struts1Factory, which creates Struts 1.x wrappers around XWork config objects.
    28   */
    29  public class Struts1FactoryTest extends TestCase {
    30
    31      private static final String PACKAGE_NAME = "org/apache/struts2/s1";
    32
    33      protected Struts1Factory factory = null;
    34      protected Configuration config;
    35
    36      public Struts1FactoryTest(String name) throws Exception {
    37          super(name);
    38      }
    39
    40
    41      public static void main(String args[]) {
    42          junit.textui.TestRunner.run(Struts1FactoryTest.class);
    43      }
    44
    45      /***
    46       * Set up instance variables required by this test case.
    47       */
    48      public void setUp() {
    49          ConfigurationManager manager = new ConfigurationManager();
    50          StrutsXmlConfigurationProvider provider = new StrutsXmlConfigurationProvider(PACKAGE_NAME + "/test-struts-factory.xml", true, null);
    51          manager.addConfigurationProvider(provider);
    52          config = manager.getConfiguration();
    53          factory = new Struts1Factory(config);
    54      }
    55
    56      /***
    57       * Test the creation of a Struts 1.x ModuleConfig wrapper around an XWork PackageConfig.
    58       * The PackageConfig is loaded from test-struts-factory.xml.
    59       */
    60      public void testCreateModuleConfig() {
    61          ModuleConfig moduleConfig = factory.createModuleConfig(PACKAGE_NAME);
    62          assertNotNull(moduleConfig);
    63
    64          assertEquals("/"+PACKAGE_NAME, moduleConfig.getPrefix());
    65
    66          ActionConfig actionConfig = moduleConfig.findActionConfig("/action1");
    67          assertNotNull(actionConfig);
    68          assertEquals("/action1", actionConfig.getPath());
    69
    70          ActionConfig[] actionConfigs = moduleConfig.findActionConfigs();
    71          assertNotNull(actionConfigs);
    72          assertEquals(2, actionConfigs.length);
    73
    74          ExceptionConfig exceptionConfig = moduleConfig.findExceptionConfig(Exception.class.getName());
    75          assertNotNull(exceptionConfig);
    76          assertEquals(Exception.class.getName(), exceptionConfig.getType());
    77
    78          ExceptionConfig[] exceptionConfigs = moduleConfig.findExceptionConfigs();
    79          assertNotNull(exceptionConfigs);
    80          assertEquals(1, exceptionConfigs.length);
    81
    82          ForwardConfig fwdConfig = moduleConfig.findForwardConfig("globalResult");
    83          assertNotNull(fwdConfig);
    84          assertEquals("globalResult", fwdConfig.getName());
    85
    86          // These methods are currently not implemented -- replace as functionality is added.
    87          assertNYI(moduleConfig, "getControllerConfig", null);
    88          assertNYI(moduleConfig, "getActionFormBeanClass", null);
    89          assertNYI(moduleConfig, "getActionMappingClass", null);
    90          assertNYI(moduleConfig, "getActionForwardClass", null);
    91          assertNYI(moduleConfig, "findException", Class.class);
    92          assertNYI(moduleConfig, "findFormBeanConfig", String.class);
    93          assertNYI(moduleConfig, "findFormBeanConfigs", null);
    94          assertNYI(moduleConfig, "findMessageResourcesConfig", String.class);
    95          assertNYI(moduleConfig, "findMessageResourcesConfigs", null);
    96          assertNYI(moduleConfig, "findPlugInConfigs", null);
    97      }
    98
    99      /***
    100      * Test the creation of a Struts 1.x ActionMapping wrapper around an XWork ActionConfig.
    101      * The ActionConfig is loaded from test-struts-factory.xml.
    102      */
    103     public void testCreateActionMapping() {
    104         PackageConfig packageConfig = config.getPackageConfig(PACKAGE_NAME);
    105         com.opensymphony.xwork2.config.entities.ActionConfig actionConfig =
    106                 (com.opensymphony.xwork2.config.entities.ActionConfig) packageConfig.getActionConfigs().get("action1");
    107         ActionMapping mapping = factory.createActionMapping(actionConfig);
    108         assertNotNull(mapping);
    109
    110         assertNotNull(mapping.findForward("result1"));
    111         assertNotNull(mapping.findForwardConfig("result2"));
    112
    113         ForwardConfig[] configs = mapping.findForwardConfigs();
    114         assertNotNull(configs);
    115         assertEquals(2, configs.length);
    116
    117         String[] forwards = mapping.findForwards();
    118         assertNotNull(forwards);
    119         assertEquals(2, forwards.length);
    120
    121         ActionForward fwd = mapping.findForward("result1");
    122         assertNotNull(fwd);
    123         assertEquals("result1", fwd.getName());
    124
    125         assertNotNull(mapping.findException(NullPointerException.class));
    126         assertNotNull(mapping.findExceptionConfig("java.lang.IllegalStateException"));
    127
    128         ExceptionConfig[] exceptionConfigs = mapping.findExceptionConfigs();
    129         assertNotNull(exceptionConfigs);
    130         assertEquals(3, exceptionConfigs.length);
    131
    132         ModuleConfig moduleConfig = mapping.getModuleConfig();
    133         assertNotNull(moduleConfig);
    134
    135         // For now, the path will be null if the ActionMapping was created on its own (as opposed to from a
    136         // WrapperModuleConfig, which knows the path).
    137         assertNull(mapping.getPath());
    138
    139         // These methods are currently not implemented -- replace as functionality is added.
    140         assertNYI(mapping, "getInputForward", null);
    141         assertNYI(mapping, "getForward", null);
    142         assertNYI(mapping, "getInclude", null);
    143         assertNYI(mapping, "getInput", null);
    144         assertNYI(mapping, "getMultipartClass", null);
    145         assertNYI(mapping, "getName", null);
    146         assertNYI(mapping, "getParameter", null);
    147         assertNYI(mapping, "getPrefix", null);
    148         assertNYI(mapping, "getRoles", null);
    149         assertNYI(mapping, "getRoleNames", null);
    150         assertNYI(mapping, "getScope", null);
    151         assertNYI(mapping, "getSuffix", null);
    152         assertNYI(mapping, "getType", null);
    153         assertNYI(mapping, "getUnknown", null);
    154         assertNYI(mapping, "getValidate", null);
    155     }
    156
    157     /***
    158      * Test the creation of a Struts 1.x ActionForward wrapper around an XWork ResultConfig.
    159      * The ResultConfig is loaded from test-struts-factory.xml.
    160      */
    161     public void testCreateActionForward() {
    162         PackageConfig packageConfig = config.getPackageConfig(PACKAGE_NAME);
    163         ResultConfig resultConfig = (ResultConfig) packageConfig.getGlobalResultConfigs().get("globalResult");
    164         ActionForward fwd = factory.createActionForward(resultConfig);
    165         assertNotNull(fwd);
    166         assertEquals("globalResult", fwd.getName());
    167
    168         // These methods are currently not implemented -- replace as functionality is added.
    169         assertNYI(fwd, "getPath", null);
    170         assertNYI(fwd, "getModule", null);
    171         assertNYI(fwd, "getRedirect", null);
    172     }
    173
    174     /***
    175      * Test the creation of a Struts 1.x ExceptionConfig wrapper around an XWork ExceptionHandlerConfig.
    176      * The ExceptionConfig is loaded from test-struts-factory.xml.
    177      */
    178     public void testCreateExceptionConfig() {
    179         PackageConfig packageConfig = config.getPackageConfig(PACKAGE_NAME);
    180         ExceptionMappingConfig cfg = (ExceptionMappingConfig) packageConfig.getGlobalExceptionMappingConfigs().get(0);
    181         ExceptionConfig exceptionConfig = factory.createExceptionConfig(cfg);
    182         assertNotNull(exceptionConfig);
    183         assertEquals(Exception.class.getName(), exceptionConfig.getType());
    184
    185         assertNYI(exceptionConfig, "getBundle", null);
    186         assertNYI(exceptionConfig, "getHandler", null);
    187         assertNYI(exceptionConfig, "getKey", null);
    188         assertNYI(exceptionConfig, "getPath", null);
    189         assertNYI(exceptionConfig, "getScope", null);
    190     }
    191
    192     public void testConvertErrors() throws Exception {
    193
    194         ActionMessage err1 = new ActionMessage("error1");
    195         ActionMessage err2 = new ActionMessage("error2", new Integer(1));
    196         ActionErrors errors = new ActionErrors();
    197         errors.add(errors.GLOBAL_MESSAGE, err1);
    198         errors.add("foo", err2);
    199
    200         ActionSupport action = new ActionSupport();
    201         factory.convertErrors(errors, action);
    202
    203         assertTrue(1 == action.getActionErrors().size());
    204         assertTrue(1 == action.getFieldErrors().size());
    205     }
    206
    207     /***
    208      * Assert that the given method throws UnsupportedOperationException.
    209      */
    210     private void assertNYI(Object o, String methodName, Class argType) {
    211         try {
    212             Class[] argTypes = argType != null ? new Class[]{argType} : null;
    213
    214             Object[] args = null;
    215             if (argType != null) {
    216                 if (Class.class == argType) {
    217                     args = new Object[]{argType};
    218                 } else {
    219                     args = new Object[]{argType.newInstance()};
    220                 }
    221             }
    222             o.getClass().getMethod(methodName, argTypes).invoke(o, args);
    223         } catch (InvocationTargetException e) {
    224             Throwable cause = e.getCause();
    225             assertEquals(cause.getMessage(), UnsupportedOperationException.class, cause.getClass());
    226
    227             // OK -- it's what we expected
    228             return;
    229         } catch (Exception e) {
    230             fail(e.getClass().getName() + ": " + e.getMessage());
    231         }
    232
    233         fail("Expected UnsupportedOperationException for " + methodName + "() on " + o.getClass().getName());
    234     }
    235 }