package com.technophobia.substeps.runner.description;
import com.technophobia.substeps.execution.node.IExecutionNode;
import org.junit.runner.Description;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.Serializable;
public class JunitVersionedDescriptionBuilder implements DescriptionBuilder {
private final Logger log = LoggerFactory.getLogger(JunitVersionedDescriptionBuilder.class);
private DescriptionBuilder descriptionBuilder = null;
public Description descriptionFor(IExecutionNode executionNode, DescriptorStatus descriptorStatus) {
if(descriptionBuilder == null){
descriptionBuilder = initialiseDescriptionBuilder();
}
return descriptionBuilder.descriptionFor(executionNode, descriptorStatus);
}
private DescriptionBuilder initialiseDescriptionBuilder() {
log.debug("Creating DescriptionBuilder");
if(isJunit411()){
log.debug("Creating a Junit411DescriptionBuilder");
return new Junit411DescriptionBuilder();
}
log.debug("Creating a JunitLegacyDescriptionBuilder");
return new JunitLegacyDescriptionBuilder();
}
private boolean isJunit411(){
try {
Description.class.getMethod("createTestDescription", String.class, String.class, Serializable.class);
log.debug("Junit 4.11 is on the classpath");
return true;
} catch (NoSuchMethodException e) {
log.debug("Junit 4.11 is not on the classpath");
return false;
}
}
}