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