All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.novatec.testit.webtester.junit5.extensions.BaseExtension Maven / Gradle / Ivy

There is a newer version: 2.10.3
Show newest version
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