001package org.junit.rules;
002
003import org.junit.internal.AssumptionViolatedException;
004import org.junit.runners.model.FrameworkMethod;
005import 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
045public 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}