1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot/** 2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.rules; 5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.internal.runners.statements.FailOnTimeout; 7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runner.Description; 8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.Statement; 9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot/** 11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * The Timeout Rule applies the same timeout to all test methods in a class: 12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * <pre> 14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public static class HasGlobalTimeout { 15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public static String log; 16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @Rule 18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public MethodRule globalTimeout= new Timeout(20); 19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @Test 21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public void testInfiniteLoop1() { 22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * log+= "ran1"; 23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * for (;;) { 24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @Test 28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public void testInfiniteLoop2() { 29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * log+= "ran2"; 30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * for (;;) { 31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * </pre> 35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpublic class Timeout implements TestRule { 37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot private final int fMillis; 38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot /** 40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @param millis the millisecond timeout 41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Timeout(int millis) { 43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot fMillis= millis; 44b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 46b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Statement apply(Statement base, Description description) { 47b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return new FailOnTimeout(base, fMillis); 48b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 49b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}