001    package junit.extensions;
002    
003    import junit.framework.Test;
004    import junit.framework.TestResult;
005    
006    /**
007     * A Decorator that runs a test repeatedly.
008     */
009    public class RepeatedTest extends TestDecorator {
010        private int fTimesRepeat;
011    
012        public RepeatedTest(Test test, int repeat) {
013            super(test);
014            if (repeat < 0) {
015                throw new IllegalArgumentException("Repetition count must be >= 0");
016            }
017            fTimesRepeat = repeat;
018        }
019    
020        @Override
021        public int countTestCases() {
022            return super.countTestCases() * fTimesRepeat;
023        }
024    
025        @Override
026        public void run(TestResult result) {
027            for (int i = 0; i < fTimesRepeat; i++) {
028                if (result.shouldStop()) {
029                    break;
030                }
031                super.run(result);
032            }
033        }
034    
035        @Override
036        public String toString() {
037            return super.toString() + "(repeated)";
038        }
039    }