1
2
3
4
5
6 package mockit.integration.junit4;
7
8 import edu.umd.cs.findbugs.annotations.NonNull;
9
10 import mockit.Invocation;
11 import mockit.Mock;
12 import mockit.MockUp;
13 import mockit.coverage.testRedundancy.JUnitListener;
14 import mockit.coverage.testRedundancy.TestCoverage;
15 import mockit.integration.TestRunnerDecorator;
16 import mockit.internal.faking.FakeInvocation;
17 import mockit.internal.state.TestRun;
18
19 import org.junit.runner.Description;
20 import org.junit.runner.Result;
21 import org.junit.runner.notification.RunNotifier;
22
23
24
25
26
27
28 public final class FakeRunNotifier extends MockUp<RunNotifier> {
29 @Mock
30 public static void fireTestRunStarted(Invocation invocation, Description description) {
31 RunNotifier it = invocation.getInvokedInstance();
32 assert it != null;
33
34 TestCoverage testCoverage = TestCoverage.INSTANCE;
35
36 if (testCoverage != null) {
37 it.addListener(new JUnitListener(testCoverage));
38 }
39
40 prepareToProceed(invocation);
41 it.fireTestRunStarted(description);
42 }
43
44 private static void prepareToProceed(@NonNull Invocation invocation) {
45 ((FakeInvocation) invocation).prepareToProceedFromNonRecursiveMock();
46 }
47
48 @Mock
49 public static void fireTestStarted(Invocation invocation, Description description) {
50 Class<?> currentTestClass = TestRun.getCurrentTestClass();
51
52 if (currentTestClass != null) {
53 Class<?> newTestClass = description.getTestClass();
54
55 if (newTestClass == null || !currentTestClass.isAssignableFrom(newTestClass)) {
56 TestRunnerDecorator.cleanUpMocksFromPreviousTestClass();
57 }
58 }
59
60 prepareToProceed(invocation);
61
62 RunNotifier it = invocation.getInvokedInstance();
63 assert it != null;
64 it.fireTestStarted(description);
65 }
66
67 @Mock
68 public static void fireTestRunFinished(Invocation invocation, Result result) {
69 TestRun.enterNoMockingZone();
70
71 try {
72 TestRunnerDecorator.cleanUpAllMocks();
73
74 prepareToProceed(invocation);
75
76 RunNotifier it = invocation.getInvokedInstance();
77 assert it != null;
78 it.fireTestRunFinished(result);
79 } finally {
80 TestRun.exitNoMockingZone();
81 }
82 }
83 }