![JAR search and dependency download from the Maven repository](/logo.png)
info.novatec.testit.webtester.junit5.extensions.BaseExtension Maven / Gradle / Ivy
package info.novatec.testit.webtester.junit5.extensions;
import java.lang.reflect.Field;
import java.lang.reflect.UndeclaredThrowableException;
import java.util.function.Consumer;
import org.junit.jupiter.api.extension.ExtensionContext;
import lombok.AccessLevel;
import lombok.Getter;
import info.novatec.testit.webtester.junit5.internal.DefaultTestClassModelFactory;
import info.novatec.testit.webtester.junit5.internal.ReflectionUtils;
import info.novatec.testit.webtester.junit5.internal.TestClassModel;
import info.novatec.testit.webtester.junit5.internal.TestClassModelFactory;
/**
* This is the base class for all of WebTester's JUnit extensions.
* It provides easy access to the {@link TestClassModel} and some reflection based operations.
*
* @since 2.1
*/
@Getter(AccessLevel.PROTECTED)
public class BaseExtension {
protected static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create("testit-webtester");
private final ReflectionUtils reflectionUtils;
private final TestClassModelFactory testClassModelFactory;
protected BaseExtension() {
this(new ReflectionUtils(), new DefaultTestClassModelFactory());
}
protected BaseExtension(ReflectionUtils reflectionUtils, TestClassModelFactory testClassModelFactory) {
this.reflectionUtils = reflectionUtils;
this.testClassModelFactory = testClassModelFactory;
}
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
protected void executeHandlingUndeclaredThrowables(T context, Consumer contextConsumer)
throws Exception {
try {
contextConsumer.accept(context);
} catch (UndeclaredThrowableException e) {
Throwable cause = e.getCause();
if (cause instanceof Exception) {
throw ( Exception ) cause;
} else if (cause instanceof Error) {
throw ( Error ) cause;
}
throw e;
}
}
protected final TestClassModel getModel(ExtensionContext context) {
Class> testClass = getTestClassFrom(context);
return testClassModelFactory.create(testClass);
}
private Class> getTestClassFrom(ExtensionContext context) {
return context.getTestClass().orElseThrow(NoTestClassException::new);
}
protected final T getValue(Field field, Object instance) {
return reflectionUtils.getValue(field, instance);
}
protected final void setValue(Field field, Object instance, Object value) {
reflectionUtils.setValue(field, instance, value);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy