package org.gradle;
import org.junit.Ignore;
import org.junit.runner.Description;
import org.junit.runner.RunWith;
import org.junit.runner.Runner;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;
import java.util.ArrayList;
import java.util.List;
@Ignore
@RunWith(org.gradle.CustomIgnoredTest.TheRunner.class)
public class CustomIgnoredTest {
static int count = 0;
public boolean doSomething() {
return true;
}
public static class TheRunner extends Runner {
List descriptions = new ArrayList();
private final Class<? extends org.gradle.CustomIgnoredTest> testClass;
private final org.gradle.CustomIgnoredTest testContainingInstance;
private Description testSuiteDescription;
public TheRunner(Class<? extends org.gradle.CustomIgnoredTest> testClass) {
this.testClass = testClass;
testContainingInstance = reflectMeATestContainingInstance(testClass);
testSuiteDescription = Description.createSuiteDescription("Custom Test with Suite ");
testSuiteDescription.addChild(createTestDescription("first test run"));
testSuiteDescription.addChild(createTestDescription("second test run"));
testSuiteDescription.addChild(createTestDescription("third test run"));
}
@Override
public Description getDescription() {
return testSuiteDescription;
}
@Override
public void run(RunNotifier notifier) {
for (Description description : testSuiteDescription.getChildren()) {
notifier.fireTestStarted(description);
try {
if (testContainingInstance.doSomething()) {
notifier.fireTestFinished(description);
} else {
notifier.fireTestIgnored(description);
}
} catch (Exception e) {
notifier.fireTestFailure(new Failure(description, e));
}
}
}
private org.gradle.CustomIgnoredTest reflectMeATestContainingInstance(Class<? extends org.gradle.CustomIgnoredTest> testClass) {
try {
return testClass.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private Description createTestDescription(String description) {
return Description.createTestDescription(testClass, description);
}
}
}