Skip to content

Commit

Permalink
Cannot use a requirement in parametrized tests #1914
Browse files Browse the repository at this point in the history
Signed-off-by: Andrej Podhradsky <apodhrad@redhat.com>
  • Loading branch information
apodhrad authored and odockal committed Apr 26, 2018
1 parent ad3047c commit 2b53492
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 15 deletions.
Expand Up @@ -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.
*
Expand Down
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -54,14 +58,20 @@ public class ParameterizedRunner extends Parameterized {
*/
public ParameterizedRunner(Class<?> clazz, Requirements requirements, String configId, RunListener[] runListeners,
List<IBeforeTest> beforeTestExtensions, List<IAfterTest> afterTestExtensions) throws Throwable {
super(clazz);
super(injectRequirements(clazz, requirements));

this.requirements = requirements;
this.configId = configId;
this.runListeners = runListeners;
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()
Expand Down
Expand Up @@ -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);
}

}
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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<Object> data() {
reqInParameters = requirementImpl;
return Arrays.asList(new Object[] { 1, 2 });
}

Expand All @@ -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;
}
Expand Down

0 comments on commit 2b53492

Please sign in to comment.