001    package org.junit.rules;
002    
003    import org.junit.internal.AssumptionViolatedException;
004    import org.junit.runners.model.FrameworkMethod;
005    import org.junit.runners.model.Statement;
006    
007    /**
008     * TestWatchman is a base class for Rules that take note of the testing
009     * action, without modifying it. For example, this class will keep a log of each
010     * passing and failing test:
011     *
012     * <pre>
013     * public static class WatchmanTest {
014     *  private static String watchedLog;
015     *
016     *  &#064;Rule
017     *  public MethodRule watchman= new TestWatchman() {
018     *      &#064;Override
019     *      public void failed(Throwable e, FrameworkMethod method) {
020     *          watchedLog+= method.getName() + &quot; &quot; + e.getClass().getSimpleName()
021     *                  + &quot;\n&quot;;
022     *         }
023     *
024     *      &#064;Override
025     *      public void succeeded(FrameworkMethod method) {
026     *          watchedLog+= method.getName() + &quot; &quot; + &quot;success!\n&quot;;
027     *         }
028     *     };
029     *
030     *  &#064;Test
031     *  public void fails() {
032     *      fail();
033     *     }
034     *
035     *  &#064;Test
036     *  public void succeeds() {
037     *     }
038     * }
039     * </pre>
040     *
041     * @since 4.7
042     * @deprecated Use {@link TestWatcher} (which implements {@link TestRule}) instead.
043     */
044    @Deprecated
045    public class TestWatchman implements MethodRule {
046        public Statement apply(final Statement base, final FrameworkMethod method,
047                Object target) {
048            return new Statement() {
049                @Override
050                public void evaluate() throws Throwable {
051                    starting(method);
052                    try {
053                        base.evaluate();
054                        succeeded(method);
055                    } catch (AssumptionViolatedException e) {
056                        throw e;
057                    } catch (Throwable e) {
058                        failed(e, method);
059                        throw e;
060                    } finally {
061                        finished(method);
062                    }
063                }
064            };
065        }
066    
067        /**
068         * Invoked when a test method succeeds
069         */
070        public void succeeded(FrameworkMethod method) {
071        }
072    
073        /**
074         * Invoked when a test method fails
075         */
076        public void failed(Throwable e, FrameworkMethod method) {
077        }
078    
079        /**
080         * Invoked when a test method is about to start
081         */
082        public void starting(FrameworkMethod method) {
083        }
084    
085    
086        /**
087         * Invoked when a test method finishes (whether passing or failing)
088         */
089        public void finished(FrameworkMethod method) {
090        }
091    }