package junit.tests.extensions;

import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestResult;
import junit.framework.TestSuite;

/**
 * Testing the RepeatedTest support.
 */
public class RepeatedTestTest extends TestCase {
    private TestSuite fSuite;

    public static class SuccessTest extends TestCase {

        @Override
        public void runTest() {
        }
    }

    public RepeatedTestTest(String name) {
        super(name);
        fSuite = new TestSuite();
        fSuite.addTest(new SuccessTest());
        fSuite.addTest(new SuccessTest());
    }

    public void testRepeatedOnce() {
        Test test = new RepeatedTest(fSuite, 1);
        assertEquals(2, test.countTestCases());
        TestResult result = new TestResult();
        test.run(result);
        assertEquals(2, result.runCount());
    }

    public void testRepeatedMoreThanOnce() {
        Test test = new RepeatedTest(fSuite, 3);
        assertEquals(6, test.countTestCases());
        TestResult result = new TestResult();
        test.run(result);
        assertEquals(6, result.runCount());
    }

    public void testRepeatedZero() {
        Test test = new RepeatedTest(fSuite, 0);
        assertEquals(0, test.countTestCases());
        TestResult result = new TestResult();
        test.run(result);
        assertEquals(0, result.runCount());
    }

    public void testRepeatedNegative() {
        try {
            new RepeatedTest(fSuite, -1);
        } catch (IllegalArgumentException e) {
            assertTrue(e.getMessage().contains(">="));
            return;
        }
        fail("Should throw an IllegalArgumentException");
    }
}