1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.rules; 2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 3b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.internal.AssumptionViolatedException; 4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.FrameworkMethod; 5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport org.junit.runners.model.Statement; 6b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 7b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot/** 8b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * TestWatchman is a base class for Rules that take note of the testing 9b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * action, without modifying it. For example, this class will keep a log of each 10b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * passing and failing test: 11b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 12b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * <pre> 13b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public static class WatchmanTest { 14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * private static String watchedLog; 15b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 16b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @Rule 17b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public MethodRule watchman= new TestWatchman() { 18b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @Override 19b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public void failed(Throwable e, FrameworkMethod method) { 20b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * watchedLog+= method.getName() + " " + e.getClass().getSimpleName() 21b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * + "\n"; 22b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 24b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @Override 25b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public void succeeded(FrameworkMethod method) { 26b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * watchedLog+= method.getName() + " " + "success!\n"; 27b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 28b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * }; 29b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 30b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @Test 31b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public void fails() { 32b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * fail(); 33b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 34b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 35b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @Test 36b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * public void succeeds() { 37b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 38b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * } 39b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * </pre> 40b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 41b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @deprecated {@link MethodRule} is deprecated. 42b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * Use {@link TestWatcher} implements {@link TestRule} instead. 43b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 44b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot@Deprecated 45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpublic class TestWatchman implements MethodRule { 46b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public Statement apply(final Statement base, final FrameworkMethod method, 47b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot Object target) { 48b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return new Statement() { 49b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot @Override 50b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public void evaluate() throws Throwable { 51b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot starting(method); 52b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot try { 53b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot base.evaluate(); 54b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot succeeded(method); 55b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } catch (AssumptionViolatedException e) { 56b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot throw e; 57b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } catch (Throwable t) { 58b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot failed(t, method); 59b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot throw t; 60b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } finally { 61b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot finished(method); 62b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 63b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 64b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot }; 65b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 66b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 67b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot /** 68b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * Invoked when a test method succeeds 69b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 70b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @param method 71b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 72b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public void succeeded(FrameworkMethod method) { 73b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 74b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 75b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot /** 76b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * Invoked when a test method fails 77b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 78b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @param e 79b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @param method 80b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 81b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public void failed(Throwable e, FrameworkMethod method) { 82b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 83b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 84b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot /** 85b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * Invoked when a test method is about to start 86b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 87b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @param method 88b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 89b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public void starting(FrameworkMethod method) { 90b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 91b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 92b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot 93b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot /** 94b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * Invoked when a test method finishes (whether passing or failing) 95b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * 96b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot * @param method 97b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot */ 98b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot public void finished(FrameworkMethod method) { 99b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot } 100b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot} 101