package org.xtest.runner.external;
import java.util.Collection;
import org.eclipse.core.resources.IFile;
import org.xtest.runner.Activator;
import org.xtest.runner.RunAllJob;
import org.xtest.runner.RunnableTest;
import org.xtest.runner.TestsProvider;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.google.inject.Injector;
/**
* Utility methods for scheduling tests to be run
*
* @author Michael Barry
*/
public class ContinuousTestRunner {
private static Injectables injected;
static {
Injector injector = Activator.getDefault().getInjector();
injected = injector.getInstance(Injectables.class);
}
/**
* Schedule a test file to be run
*
* @param fileToRun
* The test file to be run
*/
public static void schedule(IFile fileToRun) {
Collection<RunnableTest> toRun = injected.testProvider.getTestsFromDeltas(Sets
.newHashSet(fileToRun));
if (toRun != null && !toRun.isEmpty()) {
scheduleAll(toRun);
}
}
/**
* Schedule a list of tests to be run
*
* @param toRun
* The list of tests to be run
*/
public static void scheduleAll(Collection<RunnableTest> toRun) {
if (injected.job.submit(toRun)) {
injected.job.cancel();
injected.job.schedule();
} else {
injected.job.scheduleIfNecessary();
}
}
private static class Injectables {
@Inject
public RunAllJob job;
@Inject
public TestsProvider testProvider;
}
}