AnnotatedEmbedderUtils.java
- package org.jbehave.core.junit;
- import org.jbehave.core.embedder.EmbedderClassLoader;
- import org.junit.runner.RunWith;
- public class AnnotatedEmbedderUtils {
- public static AnnotatedEmbedderRunner annotatedEmbedderRunner(String annotatedClassName,
- EmbedderClassLoader classLoader) {
- Class<?> runnerClass = runnerClass(annotatedClassName, classLoader);
- return newAnnotatedEmbedderRunner(runnerClass, annotatedClassName, classLoader);
- }
- private static Class<?> runnerClass(String annotatedClassName, EmbedderClassLoader classLoader) {
- Class<?> annotatedClass = loadClass(annotatedClassName, classLoader);
- RunWith annotation = annotatedClass.getAnnotation(RunWith.class);
- if (annotation != null) {
- return annotation.value();
- }
- throw new MissingAnnotatedEmbedderRunner(annotatedClass);
- }
- private static AnnotatedEmbedderRunner newAnnotatedEmbedderRunner(Class<?> runnerClass, String annotatedClassName,
- EmbedderClassLoader classLoader) {
- try {
- Class<?> annotatedClass = loadClass(annotatedClassName, classLoader);
- return (AnnotatedEmbedderRunner) runnerClass.getConstructor(Class.class).newInstance(annotatedClass);
- } catch (Exception e) {
- throw new AnnotatedEmbedderRunnerInstantiationFailed(runnerClass, annotatedClassName, classLoader, e);
- }
- }
- private static Class<?> loadClass(String className, EmbedderClassLoader classLoader) {
- try {
- return classLoader.loadClass(className);
- } catch (ClassNotFoundException e) {
- throw new ClassLoadingFailed(className, classLoader, e);
- }
- }
- @SuppressWarnings("serial")
- public static class ClassLoadingFailed extends RuntimeException {
- public ClassLoadingFailed(String className, EmbedderClassLoader classLoader, Throwable cause) {
- super("Failed to load class " + className + " with classLoader " + classLoader, cause);
- }
- }
- @SuppressWarnings("serial")
- public static class AnnotatedEmbedderRunnerInstantiationFailed extends RuntimeException {
- public AnnotatedEmbedderRunnerInstantiationFailed(Class<?> runnerClass, String annotatedClassName,
- EmbedderClassLoader classLoader, Throwable cause) {
- super("Failed to instantiate annotated embedder runner " + runnerClass + " with annotatedClassName "
- + annotatedClassName + " and classLoader " + classLoader, cause);
- }
- }
- @SuppressWarnings("serial")
- public static class MissingAnnotatedEmbedderRunner extends RuntimeException {
- public MissingAnnotatedEmbedderRunner(Class<?> annotatedClass) {
- super("AnnotatedEmbedderRunner not specified via @RunWith annotation in annotatedClass " + annotatedClass);
- }
- }
- }