package hudson.plugins.seleniumGrails;
import hudson.Extension;
import hudson.Launcher;
import hudson.Util;
import hudson.model.AbstractBuild;
import hudson.model.AbstractItem;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.Result;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Publisher;
import hudson.tasks.Recorder;
import hudson.AbortException;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import org.kohsuke.stapler.DataBoundConstructor;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.DirectoryScanner;
/**
* Clover {@link Publisher}.
*
* @author Pascal Martin
*/
public class SeleniumGrailsPublisher extends Recorder implements Serializable {
public String baseDir;
@DataBoundConstructor
public SeleniumGrailsPublisher(String baseDir){
this.baseDir = baseDir;
}
public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.BUILD;
}
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener)
throws InterruptedException, IOException {
final long buildTime = build.getTimestamp().getTimeInMillis();
FileSet resultFileSet = Util.createFileSet(new File(build.getWorkspace().getRemote()), "**/seleniumTestResult.xml");
DirectoryScanner ds = resultFileSet.getDirectoryScanner();
String[] files = ds.getIncludedFiles();
if(files.length==0) {
throw new AbortException("No test report files were found. Configuration error?");
}
SeleniumGrailsTestResultAction action = new SeleniumGrailsTestResultAction(build, build.getWorkspace().getRemote()+"/"+files[0]);
build.getActions().add(action);
if(action.getFailCount()>0)
build.setResult(Result.UNSTABLE);
/* String[] resultFiles = ds.getIncludedFiles();
File rootTarget = getSeleniumReportDir(build.getParent());
for(String resultFile : resultFiles){
System.out.println("resultFile: "+resultFile);
new FilePath(rootTarget).deleteContents();
//TODO: all thede new FilePtahs is just silly
new FilePath(new File(build.getProject().getWorkspace().toString()+"/"+resultFile)).copyTo(new FilePath(new FilePath(rootTarget), "index.html"));
}*/
return true;
}
public static File getSeleniumReportDir(AbstractItem project) {
return new File(project.getRootDir(), "seleniumGrails");
}
public String getDisplayName(){
return "DFSSDAFDSAFSAD";
}
@Extension
public static class DescriptorImpl extends BuildStepDescriptor<Publisher> {
public DescriptorImpl(){
super(SeleniumGrailsPublisher.class);
}
public String getDisplayName() {
return "Publish Selenium-Grails Report";
}
@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
}
}