Add an Unit test to check if same issue as [WW-4528] has occurred Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/805cdd77 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/805cdd77 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/805cdd77
Branch: refs/heads/master Commit: 805cdd7754400149e166edc80b92fa2d67133d39 Parents: 51c0bcb Author: Yasser Zamani <yasser.zam...@live.com> Authored: Tue Feb 14 01:35:46 2017 +0330 Committer: Yasser Zamani <yasser.zam...@live.com> Committed: Tue Feb 14 01:35:46 2017 +0330 ---------------------------------------------------------------------- .../ChainingInterceptorWithConfigTest.java | 116 +++++++++++++++++++ 1 file changed, 116 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/805cdd77/core/src/test/java/com/opensymphony/xwork2/interceptor/ChainingInterceptorWithConfigTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/interceptor/ChainingInterceptorWithConfigTest.java b/core/src/test/java/com/opensymphony/xwork2/interceptor/ChainingInterceptorWithConfigTest.java new file mode 100644 index 0000000..25a5ee1 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/interceptor/ChainingInterceptorWithConfigTest.java @@ -0,0 +1,116 @@ +/* + * 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; + +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.InterceptorConfig; +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.util.location.LocatableProperties; + +import java.util.*; + +import org.apache.struts2.TestResult; + + +/** + * Unit test for {@link ChainingInterceptor} with a configuration provider. + * + */ +public class ChainingInterceptorWithConfigTest extends XWorkTestCase { + + static String CHAINED_ACTION = "chainedAction"; + static String CHAINTO_ACTION = "chaintoAction"; + ObjectFactory objectFactory; + + public void testTwoExcludesPropertiesChained() throws Exception { + assertNotNull(objectFactory); + ActionProxy proxy = actionProxyFactory.createActionProxy("", CHAINED_ACTION, null, null); + SimpleAction chainedAction = (SimpleAction) proxy.getAction(); + chainedAction.setBar(1); + chainedAction.setFoo(1); + chainedAction.setBlah("WW-4528"); + proxy.execute(); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + XmlConfigurationProvider provider = new XmlConfigurationProvider("xwork-default.xml"); + container.inject(provider); + this.objectFactory = container.getInstance(ObjectFactory.class); + loadConfigurationProviders(provider, new MockConfigurationProvider()); + } + + + 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 { + HashMap<String, String> interceptorParams = new HashMap<>(); + interceptorParams.put("excludes", "blah,bar"); + + HashMap successParams1 = new HashMap(); + successParams1.put("propertyName", "baz"); + successParams1.put("expectedValue", 1); + + HashMap successParams2 = new HashMap(); + successParams2.put("propertyName", "blah"); + successParams2.put("expectedValue", null); + + InterceptorConfig chainingInterceptorConfig = new InterceptorConfig.Builder("chainStack", ChainingInterceptor.class.getName()).build(); + PackageConfig packageConfig = new PackageConfig.Builder("default") + .addActionConfig(CHAINED_ACTION, new ActionConfig.Builder("defaultPackage", CHAINED_ACTION, SimpleAction.class.getName()) + .addResultConfig(new ResultConfig.Builder(Action.ERROR, ActionChainResult.class.getName()).addParam("actionName", CHAINTO_ACTION).build()) + .build()) + .addActionConfig(CHAINTO_ACTION, new ActionConfig.Builder("defaultPackage", CHAINTO_ACTION, SimpleAction.class.getName()) + .addInterceptors(Collections.singletonList(new InterceptorMapping("chainStack", objectFactory.buildInterceptor(chainingInterceptorConfig, interceptorParams)))) + .addResultConfig(new ResultConfig.Builder(Action.SUCCESS, TestResult.class.getName()).addParams(successParams1).build()) + .addResultConfig(new ResultConfig.Builder(Action.ERROR, TestResult.class.getName()).addParams(successParams2).build()) + .build()) + .build(); + config.addPackageConfig("defaultPackage", packageConfig); + config.addPackageConfig("default", new PackageConfig.Builder(packageConfig).name("default").build()); + } + } +}