From 24e279b16556aa974352132f5b84c8bf5c0f737d Mon Sep 17 00:00:00 2001 From: JCgH4164838Gh792C124B5 <43964333+JCgH4164838Gh792C124B5@users.noreply.github.com> Date: Sun, 3 Jul 2022 17:37:58 -0400 Subject: [PATCH] Update: - Added arbitrary code coverage test. --- .../StrutsJavaConfigurationProviderTest.java | 56 +++++++++++++++++++ .../config/TestBeanSelectionProvider.java | 6 ++ 2 files changed, 62 insertions(+) diff --git a/core/src/test/java/org/apache/struts2/config/StrutsJavaConfigurationProviderTest.java b/core/src/test/java/org/apache/struts2/config/StrutsJavaConfigurationProviderTest.java index 5e08f9822..b361cf837 100644 --- a/core/src/test/java/org/apache/struts2/config/StrutsJavaConfigurationProviderTest.java +++ b/core/src/test/java/org/apache/struts2/config/StrutsJavaConfigurationProviderTest.java @@ -104,4 +104,60 @@ public class StrutsJavaConfigurationProviderTest { Assert.assertTrue(names.contains("struts")); Assert.assertTrue(names.contains("struts.test.bean")); } + + @Test + /** + * This test is purely to provide code coverage for {@link AbstractBeanSelectionProvider}. + * It uses an arbitrary setup to ensure a code path not followed in the registration test + * is traversed. + */ + public void testAbstractBeanProviderCoverage() throws Exception { + final ConstantConfig constantConfig = new ConstantConfig(); + final String expectedUnknownHandler = "expectedUnknownHandler"; + + StrutsJavaConfiguration javaConfig = new StrutsJavaConfiguration() { + @Override + public List unknownHandlerStack() { + return Collections.singletonList(expectedUnknownHandler); + } + + @Override + public List constants() { + return Collections.singletonList(constantConfig); + } + + @Override + public List beans() { + return Arrays.asList( + new BeanConfig(TestBean.class, "struts") + ); + } + + @Override + public Optional beanSelection() { + return Optional.of(new BeanSelectionConfig(TestBeanSelectionProvider.class, "testBeans")); + } + }; + + StrutsJavaConfigurationProvider provider = new StrutsJavaConfigurationProvider(javaConfig); + Configuration configuration = new MockConfiguration(); + ContainerBuilder builder = new ContainerBuilder(); + LocatableProperties props = new LocatableProperties(); + + provider.init(configuration); + provider.register(builder, props); + + props.put(CodeCoverageTestClass1.ALIAS_KEY, CodeCoverageTestClass1.ALIAS_VALUE); + TestBeanSelectionProvider testBeanSelectionProvider = new TestBeanSelectionProvider(); + testBeanSelectionProvider.aliasCallCoverage(CodeCoverageTestClass1.class, builder, props, CodeCoverageTestClass1.ALIAS_KEY, Scope.THREAD); + } + + final class CodeCoverageTestClass1 extends Object { + public static final String ALIAS_KEY = "testAliasKey"; + public static final String ALIAS_VALUE = "testAliasValue"; + + public CodeCoverageTestClass1() { + super(); + } + } } diff --git a/core/src/test/java/org/apache/struts2/config/TestBeanSelectionProvider.java b/core/src/test/java/org/apache/struts2/config/TestBeanSelectionProvider.java index 79d6dd28c..27fa961c3 100644 --- a/core/src/test/java/org/apache/struts2/config/TestBeanSelectionProvider.java +++ b/core/src/test/java/org/apache/struts2/config/TestBeanSelectionProvider.java @@ -21,6 +21,7 @@ package org.apache.struts2.config; import com.opensymphony.xwork2.TestBean; import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.inject.ContainerBuilder; +import com.opensymphony.xwork2.inject.Scope; import com.opensymphony.xwork2.util.location.LocatableProperties; public class TestBeanSelectionProvider extends AbstractBeanSelectionProvider { @@ -30,4 +31,9 @@ public class TestBeanSelectionProvider extends AbstractBeanSelectionProvider { alias(TestBean.class, "struts.test.bean", builder, props); } + public void aliasCallCoverage(Class aliasClass, ContainerBuilder builder, LocatableProperties props, String aliasKey, Scope scope) throws ConfigurationException { + // Allow for coverage testing of AbstractBeanSelectionProvider. + alias(aliasClass, aliasKey, builder, props, scope); + } + }