/*
* Copyright (c) 2006-2013 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.integration.junit4.internal;
import org.junit.runner.notification.*;
import org.junit.runner.*;
import mockit.*;
import mockit.integration.internal.*;
import mockit.internal.startup.*;
import mockit.internal.state.*;
/**
* Startup mock which works in conjunction with {@link JUnit4TestRunnerDecorator} to provide JUnit 4.5+ integration.
* <p/>
* This class is not supposed to be accessed from user code. JMockit will automatically load it at startup.
*/
public final class RunNotifierDecorator extends MockUp<RunNotifier>
{
@Mock
public static void fireTestRunStarted(Invocation invocation, Description description)
{
if (description != null) {
UsingMocksAndStubs mocksAndStubs = description.getAnnotation(UsingMocksAndStubs.class);
if (mocksAndStubs != null) {
Class<?>[] mockAndRealClasses = mocksAndStubs.value();
Startup.initializing = true;
try {
TestRunnerDecorator.setUpMocksAndStubs(mockAndRealClasses);
}
finally {
Startup.initializing = false;
}
}
}
invocation.proceed();
}
@Mock
public static void fireTestRunFinished(Invocation invocation, Result result)
{
TestRun.enterNoMockingZone();
try {
TestRunnerDecorator.cleanUpMocksFromPreviousTestClass();
invocation.proceed();
}
finally {
TestRun.exitNoMockingZone();
}
}
}