/* * Copyright 2002-2006,2009 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 com.opensymphony.xwork2.interceptor.annotations; import com.opensymphony.xwork2.*; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.config.ConfigurationProvider; import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.config.entities.InterceptorMapping; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider; import com.opensymphony.xwork2.inject.ContainerBuilder; import com.opensymphony.xwork2.mock.MockResult; import com.opensymphony.xwork2.util.location.LocatableProperties; import java.util.Arrays; /** * @author Zsolt Szasz, zsolt at lorecraft dot com * @author Rainer Hermanns */ public class AnnotationWorkflowInterceptorTest extends XWorkTestCase { private static final String ANNOTATED_ACTION = "annotatedAction"; private static final String SHORTCIRCUITED_ACTION = "shortCircuitedAction"; private final AnnotationWorkflowInterceptor annotationWorkflow = new AnnotationWorkflowInterceptor(); @Override public void setUp() throws Exception{ super.setUp(); XmlConfigurationProvider provider = new XmlConfigurationProvider("xwork-default.xml"); container.inject(provider); loadConfigurationProviders(provider, new MockConfigurationProvider()); } public void testInterceptsBeforeAndAfter() throws Exception { ActionProxy proxy = actionProxyFactory.createActionProxy("", ANNOTATED_ACTION, null); assertEquals(Action.SUCCESS, proxy.execute()); AnnotatedAction action = (AnnotatedAction)proxy.getInvocation().getAction(); assertEquals("baseBefore-before-execute-beforeResult-after", action.log); } public void testInterceptsShortcircuitedAction() throws Exception { ActionProxy proxy = actionProxyFactory.createActionProxy("", SHORTCIRCUITED_ACTION, null); assertEquals("shortcircuit", proxy.execute()); ShortcircuitedAction action = (ShortcircuitedAction)proxy.getInvocation().getAction(); assertEquals("baseBefore-before", action.log); } private class MockConfigurationProvider implements ConfigurationProvider { private Configuration config; public void init(Configuration configuration) throws ConfigurationException { this.config = configuration; } public boolean needsReload() { return false; } public void destroy() { } public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException { if (!builder.contains(ObjectFactory.class)) { builder.factory(ObjectFactory.class); } if (!builder.contains(ActionProxyFactory.class)) { builder.factory(ActionProxyFactory.class, DefaultActionProxyFactory.class); } } public void loadPackages() throws ConfigurationException { PackageConfig packageConfig = new PackageConfig.Builder("default") .addActionConfig(ANNOTATED_ACTION, new ActionConfig.Builder("defaultPackage", ANNOTATED_ACTION, AnnotatedAction.class.getName()) .addInterceptors(Arrays.asList(new InterceptorMapping[]{ new InterceptorMapping("annotationWorkflow", annotationWorkflow) })) .addResultConfig(new ResultConfig.Builder("success", MockResult.class.getName()).build()) .build()) .addActionConfig(SHORTCIRCUITED_ACTION, new ActionConfig.Builder("defaultPackage", SHORTCIRCUITED_ACTION, ShortcircuitedAction.class.getName()) .addInterceptors(Arrays.asList(new InterceptorMapping[]{ new InterceptorMapping("annotationWorkflow", annotationWorkflow) })) .addResultConfig(new ResultConfig.Builder("shortcircuit", MockResult.class.getName()).build()) .build()) .build(); config.addPackageConfig("defaultPackage", packageConfig); config.addPackageConfig("default", new PackageConfig.Builder(packageConfig).name("default").build()); } } }