From 2b53492038489bebc9f2f39affb796c577eeb676 Mon Sep 17 00:00:00 2001 From: Andrej Podhradsky Date: Fri, 13 Apr 2018 09:36:39 +0200 Subject: [PATCH] Cannot use a requirement in parametrized tests #1914 Signed-off-by: Andrej Podhradsky --- .../ParameterizedRequirementsRunner.java | 9 +---- .../internal/runner/ParameterizedRunner.java | 12 ++++++- .../inject/ParameterizedRequirementTest.java | 35 ++++++++++++++++--- .../ParameterizedStaticReqTestClazz.java | 21 +++++++++-- 4 files changed, 62 insertions(+), 15 deletions(-) diff --git a/plugins/org.eclipse.reddeer.junit/src/org/eclipse/reddeer/junit/internal/runner/ParameterizedRequirementsRunner.java b/plugins/org.eclipse.reddeer.junit/src/org/eclipse/reddeer/junit/internal/runner/ParameterizedRequirementsRunner.java index 6851feacc1..bf89e69787 100644 --- a/plugins/org.eclipse.reddeer.junit/src/org/eclipse/reddeer/junit/internal/runner/ParameterizedRequirementsRunner.java +++ b/plugins/org.eclipse.reddeer.junit/src/org/eclipse/reddeer/junit/internal/runner/ParameterizedRequirementsRunner.java @@ -54,14 +54,7 @@ public ParameterizedRequirementsRunner(TestWithParameters test) throws Initializ new Object[test.getParameters().size()]); name = test.getName(); } - - @Override - protected Statement withBeforeClasses(Statement statement) { - log.debug("Injecting fulfilled requirements into static fields of test class"); - requirementsInjector.inject(getTestClass().getJavaClass(), requirements); - return super.withBeforeClasses(statement); - } - + /** * Sets the config id. * diff --git a/plugins/org.eclipse.reddeer.junit/src/org/eclipse/reddeer/junit/internal/runner/ParameterizedRunner.java b/plugins/org.eclipse.reddeer.junit/src/org/eclipse/reddeer/junit/internal/runner/ParameterizedRunner.java index be9c935bf6..287ee0fc5a 100644 --- a/plugins/org.eclipse.reddeer.junit/src/org/eclipse/reddeer/junit/internal/runner/ParameterizedRunner.java +++ b/plugins/org.eclipse.reddeer.junit/src/org/eclipse/reddeer/junit/internal/runner/ParameterizedRunner.java @@ -14,9 +14,11 @@ import java.util.List; +import org.eclipse.reddeer.common.logging.Logger; import org.eclipse.reddeer.junit.extensionpoint.IAfterTest; import org.eclipse.reddeer.junit.extensionpoint.IBeforeTest; import org.eclipse.reddeer.junit.internal.requirement.Requirements; +import org.eclipse.reddeer.junit.internal.requirement.inject.RequirementsInjector; import org.junit.runner.Runner; import org.junit.runner.notification.RunListener; import org.junit.runners.Parameterized; @@ -33,6 +35,8 @@ public class ParameterizedRunner extends Parameterized { + private static final Logger log = Logger.getLogger(ParameterizedRunner.class); + private String configId; private Requirements requirements; private RunListener[] runListeners; @@ -54,7 +58,7 @@ public class ParameterizedRunner extends Parameterized { */ public ParameterizedRunner(Class clazz, Requirements requirements, String configId, RunListener[] runListeners, List beforeTestExtensions, List afterTestExtensions) throws Throwable { - super(clazz); + super(injectRequirements(clazz, requirements)); this.requirements = requirements; this.configId = configId; @@ -62,6 +66,12 @@ public ParameterizedRunner(Class clazz, Requirements requirements, String con this.beforeTestExtensions = beforeTestExtensions; this.afterTestExtensions = afterTestExtensions; } + + private static Class injectRequirements(Class clazz, Requirements requirements) { + log.debug("Injecting fulfilled requirements into static fields of test class"); + new RequirementsInjector().inject(clazz, requirements); + return clazz; + } /* (non-Javadoc) * @see org.junit.runners.ParentRunner#getName() diff --git a/tests/org.eclipse.reddeer.junit.test/src/org/eclipse/reddeer/junit/test/internal/requirement/parameterized/inject/ParameterizedRequirementTest.java b/tests/org.eclipse.reddeer.junit.test/src/org/eclipse/reddeer/junit/test/internal/requirement/parameterized/inject/ParameterizedRequirementTest.java index 9211f4ec7e..8cc0623269 100644 --- a/tests/org.eclipse.reddeer.junit.test/src/org/eclipse/reddeer/junit/test/internal/requirement/parameterized/inject/ParameterizedRequirementTest.java +++ b/tests/org.eclipse.reddeer.junit.test/src/org/eclipse/reddeer/junit/test/internal/requirement/parameterized/inject/ParameterizedRequirementTest.java @@ -10,23 +10,50 @@ *******************************************************************************/ package org.eclipse.reddeer.junit.test.internal.requirement.parameterized.inject; +import static org.junit.Assert.assertNotNull; + import org.eclipse.reddeer.common.properties.RedDeerProperties; import org.eclipse.reddeer.junit.runner.RedDeerSuite; import org.junit.Test; import org.junit.internal.builders.AllDefaultPossibilitiesBuilder; import org.junit.runner.notification.RunNotifier; import org.junit.runners.model.InitializationError; -import static org.junit.Assert.*; +@SuppressWarnings("restriction") public class ParameterizedRequirementTest { @Test public void testStaticInject() throws InitializationError { + executeTestClass(ParameterizedStaticReqTestClazz.class); + assertNotNull(ParameterizedStaticReqTestClazz.getReq()); + } + + @Test + public void testRequirementInjectionInBefore() throws InitializationError { + ParameterizedStaticReqTestClazz.reqInBefore = null; + executeTestClass(ParameterizedStaticReqTestClazz.class); + assertNotNull(ParameterizedStaticReqTestClazz.reqInBefore); + } + + @Test + public void testRequirementInjectionInBeforeClass() throws InitializationError { + ParameterizedStaticReqTestClazz.reqInBeforeClass = null; + executeTestClass(ParameterizedStaticReqTestClazz.class); + assertNotNull(ParameterizedStaticReqTestClazz.reqInBeforeClass); + } + + @Test + public void testRequirementInjectionInParameters() throws InitializationError { + ParameterizedStaticReqTestClazz.reqInParameters = null; + executeTestClass(ParameterizedStaticReqTestClazz.class); + assertNotNull(ParameterizedStaticReqTestClazz.reqInParameters); + } + + private void executeTestClass(Class testClass) throws InitializationError { System.clearProperty(RedDeerProperties.CONFIG_FILE.getName()); RunNotifier notifier = new RunNotifier(); - RedDeerSuite rs = new RedDeerSuite(ParameterizedStaticReqTestClazz.class, new AllDefaultPossibilitiesBuilder(true)); + AllDefaultPossibilitiesBuilder builder = new AllDefaultPossibilitiesBuilder(true); + RedDeerSuite rs = new RedDeerSuite(testClass, builder); rs.run(notifier); - assertTrue(ParameterizedStaticReqTestClazz.getReq() != null); } - } diff --git a/tests/org.eclipse.reddeer.junit.test/src/org/eclipse/reddeer/junit/test/internal/requirement/parameterized/inject/ParameterizedStaticReqTestClazz.java b/tests/org.eclipse.reddeer.junit.test/src/org/eclipse/reddeer/junit/test/internal/requirement/parameterized/inject/ParameterizedStaticReqTestClazz.java index 2629c73550..6684a3c94b 100644 --- a/tests/org.eclipse.reddeer.junit.test/src/org/eclipse/reddeer/junit/test/internal/requirement/parameterized/inject/ParameterizedStaticReqTestClazz.java +++ b/tests/org.eclipse.reddeer.junit.test/src/org/eclipse/reddeer/junit/test/internal/requirement/parameterized/inject/ParameterizedStaticReqTestClazz.java @@ -10,7 +10,7 @@ *******************************************************************************/ package org.eclipse.reddeer.junit.test.internal.requirement.parameterized.inject; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collection; @@ -19,6 +19,8 @@ import org.eclipse.reddeer.junit.requirement.inject.InjectRequirement; import org.eclipse.reddeer.junit.runner.RedDeerSuite; import org.eclipse.reddeer.junit.test.internal.requirement.parameterized.inject.RequirementImpl.RequirementAnnot; +import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized.Parameters; @@ -30,10 +32,15 @@ public class ParameterizedStaticReqTestClazz { @InjectRequirement - public static RequirementImpl requirementImpl; + private static RequirementImpl requirementImpl; + + static RequirementImpl reqInParameters; + static RequirementImpl reqInBeforeClass; + static RequirementImpl reqInBefore; @Parameters public static Collection data() { + reqInParameters = requirementImpl; return Arrays.asList(new Object[] { 1, 2 }); } @@ -43,6 +50,16 @@ public ParameterizedStaticReqTestClazz(int number) { this.number = number; } + @BeforeClass + public static void beforeClassSetup() { + reqInBeforeClass = requirementImpl; + } + + @Before + public void beforeSetup() { + reqInBefore = requirementImpl; + } + public static RequirementImpl getReq() { return requirementImpl; }