package net.thucydides.spock;
import com.google.common.base.Optional;
import net.thucydides.core.bootstrap.ThucydidesAgent;
import net.thucydides.core.steps.Listeners;
import org.apache.commons.lang3.StringUtils;
import org.spockframework.runtime.extension.AbstractAnnotationDrivenExtension;
import org.spockframework.runtime.model.FeatureInfo;
import org.spockframework.runtime.model.FieldInfo;
import org.spockframework.runtime.model.MethodInfo;
import org.spockframework.runtime.model.SpecInfo;
public class ThucydidesEnabledExtension extends AbstractAnnotationDrivenExtension<ThucydidesEnabled> {
private ThucydidesAgent agent;
public ThucydidesEnabledExtension() {
}
public void visitSpecAnnotation(ThucydidesEnabled annotation, SpecInfo spec) {
agent = new ThucydidesAgent(optionalDriverFrom(annotation),
Listeners.getLoggingListener(),
Listeners.getStatisticsListener());
spec.addListener(new ThucydidesRunListener(agent));
spec.getInitializerMethod().addInterceptor(new ThucydidesInterceptor(agent));
}
private Optional<String> optionalDriverFrom(ThucydidesEnabled annotation) {
if (StringUtils.isEmpty(annotation.driver())) {
return Optional.absent();
} else {
return Optional.of(annotation.driver());
}
}
@Override
public void visitFeatureAnnotation(ThucydidesEnabled annotation, FeatureInfo feature) {
System.out.println("visitFeatureAnnotation");
}
@Override
public void visitFixtureAnnotation(ThucydidesEnabled annotation, MethodInfo fixtureMethod) {
System.out.println("visitFixtureAnnotation");
}
@Override
public void visitFieldAnnotation(ThucydidesEnabled annotation, FieldInfo field) {
System.out.println("visitFieldAnnotation");
}
@Override
public void visitSpec(SpecInfo spec) {
System.out.println("visitSpec");
}
}