1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/*
2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors
3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License.
4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.runners;
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.junit.internal.runners.InitializationError;
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.junit.internal.runners.JUnit4ClassRunner;
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.junit.runner.Description;
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.junit.runner.manipulation.Filter;
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.junit.runner.manipulation.NoTestsRemainException;
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.junit.runner.notification.RunNotifier;
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.MockitoAnnotations;
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.runners.util.FrameworkUsageValidator;
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson@SuppressWarnings("deprecation")
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class JUnit44RunnerImpl implements RunnerImpl {
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson	JUnit4ClassRunner runner;
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public JUnit44RunnerImpl(Class<?> klass) throws InitializationError {
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        this.runner = new JUnit4ClassRunner(klass) {
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            @Override
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            protected Object createTest() throws Exception {
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                Object test = super.createTest();
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                MockitoAnnotations.initMocks(test);
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson                return test;
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson            }
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        };
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public void run(RunNotifier notifier) {
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        // add listener that validates framework usage at the end of each test
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        notifier.addListener(new FrameworkUsageValidator(notifier));
36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        runner.run(notifier);
38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public Description getDescription() {
41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson        return runner.getDescription();
42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    }
43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson	public void filter(Filter filter) throws NoTestsRemainException {
45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson		runner.filter(filter);
46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson	}
47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}