package junit.tests.runner;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.runner.BaseTestRunner;

public class BaseTestRunnerTest extends TestCase {
    public static class MockRunner extends BaseTestRunner {
        private boolean fRunFailed = false;

        @Override
        protected void runFailed(String message) {
            fRunFailed = true;
        }

        @Override
        public void testEnded(String testName) {
        }

        @Override
        public void testFailed(int status, Test test, Throwable e) {
        }

        @Override
        public void testStarted(String testName) {
        }
    }

    public static class NonStatic {
        public Test suite() {
            return null;
        }
    }

    public void testInvokeNonStaticSuite() {
        BaseTestRunner runner = new MockRunner();
        runner.getTest("junit.tests.runner.BaseTestRunnerTest$NonStatic"); // Used to throw NullPointerException
    }

    public static class DoesntExtendTestCase {
        public static Test suite() {
            return new TestSuite();
        }
    }

    public void testInvokeSuiteOnNonSubclassOfTestCase() {
        MockRunner runner = new MockRunner();
        runner.getTest(DoesntExtendTestCase.class.getName());
        assertFalse(runner.fRunFailed);
    }
}
