org.junit.jupiter.engine.extension.ScriptExecutionCondition Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit-jupiter-engine Show documentation
Show all versions of junit-jupiter-engine Show documentation
Module "junit-jupiter-engine" of JUnit 5.
/*
* Copyright 2015-2018 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v2.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v20.html
*/
package org.junit.jupiter.engine.extension;
import static org.junit.jupiter.api.extension.ConditionEvaluationResult.enabled;
import static org.junit.platform.commons.util.AnnotationUtils.findAnnotation;
import java.lang.reflect.AnnotatedElement;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.condition.DisabledIf;
import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
import org.junit.jupiter.api.extension.ExecutionCondition;
import org.junit.jupiter.api.extension.ExtensionConfigurationException;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.engine.script.Script;
import org.junit.platform.commons.util.BlacklistedExceptions;
/**
* {@link ExecutionCondition} that supports the {@link DisabledIf} and {@link EnabledIf} annotation.
*
* @since 5.1
* @see DisabledIf
* @see EnabledIf
* @see #evaluateExecutionCondition(ExtensionContext)
*/
class ScriptExecutionCondition implements ExecutionCondition {
private static final ConditionEvaluationResult ENABLED_NO_ELEMENT = enabled("AnnotatedElement not present");
private static final ConditionEvaluationResult ENABLED_NO_ANNOTATION = enabled("Annotation not present");
private static final String EVALUATOR_CLASS_NAME = "org.junit.jupiter.engine.extension.ScriptExecutionEvaluator";
private final Evaluator evaluator;
// Used by the ExtensionRegistry.
ScriptExecutionCondition() {
this(EVALUATOR_CLASS_NAME);
}
// Used by tests.
ScriptExecutionCondition(String evaluatorImplementationName) {
this.evaluator = Evaluator.forName(evaluatorImplementationName);
}
@Override
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
// Context without an annotated element?
Optional element = context.getElement();
if (!element.isPresent()) {
return ENABLED_NO_ELEMENT;
}
AnnotatedElement annotatedElement = element.get();
// Always try to create script instances.
Script disabledScript = createDisabledIfScriptOrNull(annotatedElement);
Script enabledScript = createEnabledIfScriptOrNull(annotatedElement);
// If no scripts are created, no annotation of interest is attached to the underlying element.
if (disabledScript == null && enabledScript == null) {
return ENABLED_NO_ANNOTATION;
}
// Prepare list with single or two script elements.
List