package fitnesse.junit; import fitnesse.FitNesseContext; import fitnesse.components.PluginsClassLoader; import fitnesse.testrunner.MultipleTestsRunner; import fitnesse.testsystems.*; import org.junit.runner.RunWith; import org.junit.runner.notification.RunNotifier; import org.junit.runners.model.InitializationError; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @RunWith(FitNesseRunnerExtensionTest.SuiteExtension.class) @FitNesseRunner.FitnesseDir(".") @FitNesseRunner.OutputDir("./build/fitnesse-results") public class FitNesseRunnerExtensionTest { public static class SuiteExtension extends FitNesseRunner { private DescriptionFactory myDescriptionFactory = new DescriptionFactory(); public SuiteExtension(Class<?> suiteClass) throws InitializationError { super(suiteClass); assertNotNull("No default description factory", getDescriptionFactory()); setDescriptionFactory(myDescriptionFactory); } @Override protected void addTestSystemListeners(RunNotifier notifier, MultipleTestsRunner testRunner, Class<?> suiteClass, DescriptionFactory descriptionFactory) { assertEquals("Wrong description factory provided to listener", myDescriptionFactory, descriptionFactory); testRunner.addTestSystemListener(new ListenerExtension(notifier, suiteClass, descriptionFactory)); } @Override protected String getSuiteName(Class<?> klass) throws InitializationError { return "FitNesse.SuiteAcceptanceTests.SuiteSlimTests.TestScriptTable"; } @Override protected FitNesseContext createContext(Class<?> suiteClass) throws Exception { new PluginsClassLoader(getFitNesseRoot(suiteClass)).addPluginsToClassLoader(); return super.createContext(suiteClass); } } public static class ListenerExtension extends JUnitRunNotifierResultsListener { public ListenerExtension(RunNotifier notifier, Class<?> mainClass, DescriptionFactory descriptionFactory) { super(notifier, mainClass, descriptionFactory); } @Override public void announceNumberTestsToRun(int testsToRun) { super.announceNumberTestsToRun(testsToRun); } @Override public void unableToStartTestSystem(String testSystemName, Throwable cause) { super.unableToStartTestSystem(testSystemName, cause); } @Override public void testStarted(TestPage test) { super.testStarted(test); } @Override public void testComplete(TestPage test, TestSummary testSummary) { super.testComplete(test, testSummary); } @Override public void testSystemStopped(TestSystem testSystem, Throwable cause) { super.testSystemStopped(testSystem, cause); } } }