1b5d56e95f27d484ad3098ac18867262e7c8826c1Christian Williams & Phil Goodwinpackage com.xtremelabs.robolectric.bytecode;
25c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
35c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwinimport android.app.Application;
4b5d56e95f27d484ad3098ac18867262e7c8826c1Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.Robolectric;
5b5d56e95f27d484ad3098ac18867262e7c8826c1Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
65c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwinimport org.junit.AfterClass;
75c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwinimport org.junit.Before;
85c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwinimport org.junit.Test;
95c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwinimport org.junit.runner.RunWith;
105c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwinimport org.junit.runners.model.InitializationError;
115c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
125c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwinimport java.lang.reflect.Method;
135c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
1440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williamsimport static org.junit.Assert.assertEquals;
1540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williamsimport static org.junit.Assert.assertNotNull;
1640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williamsimport static org.junit.Assert.assertTrue;
175c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
185c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin@RunWith(CustomRobolectricTestRunnerTest.CustomRobolectricTestRunner.class)
195c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwinpublic class CustomRobolectricTestRunnerTest {
205c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    Object preparedTest;
215c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    static Method testMethod;
225c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    static int beforeCallCount = 0;
235c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    static int afterTestCallCount = 0;
245c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
255c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    @Before
265c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    public void setUp() throws Exception {
275c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        beforeCallCount++;
285c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    }
295c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
305c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    @Test
315c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    public void shouldInitializeApplication() throws Exception {
325c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        assertNotNull(Robolectric.application);
337da78c22fdad07916b36e1f0f52291382e9b44c7Christian Williams & Phil Goodwin        assertEquals(CustomApplication.class, Robolectric.application.getClass());
345c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    }
355c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
365c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    @Test
375c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    public void shouldInvokePrepareTestWithAnInstanceOfTheTest() throws Exception {
385c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        assertEquals(this, preparedTest);
395c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        assertEquals(RobolectricClassLoader.class.getName(), preparedTest.getClass().getClassLoader().getClass().getName());
405c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    }
415c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
425c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    @Test
435c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    public void shouldInvokeBeforeTestWithTheCorrectMethod() throws Exception {
445c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        assertEquals("shouldInvokeBeforeTestWithTheCorrectMethod", testMethod.getName());
455c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    }
465c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
475c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    @AfterClass
485c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    public static void shouldHaveCalledAfterTest() {
495c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        assertTrue(beforeCallCount > 0);
505c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        assertEquals(beforeCallCount, afterTestCallCount);
515c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    }
525c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
535c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    public static class CustomRobolectricTestRunner extends WithTestDefaultsRunner {
545c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        public CustomRobolectricTestRunner(Class<?> testClass) throws InitializationError {
555c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin            super(testClass);
565c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        }
575c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
585c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        @Override public void prepareTest(Object test) {
595c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin            ((CustomRobolectricTestRunnerTest) test).preparedTest = test;
605c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        }
615c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
625c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        @Override public void beforeTest(Method method) {
635c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin            testMethod = method;
645c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        }
655c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin
665c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        @Override public void afterTest(Method method) {
675c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin            afterTestCallCount++;
685c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin        }
697da78c22fdad07916b36e1f0f52291382e9b44c7Christian Williams & Phil Goodwin
707da78c22fdad07916b36e1f0f52291382e9b44c7Christian Williams & Phil Goodwin        @Override protected Application createApplication() {
717da78c22fdad07916b36e1f0f52291382e9b44c7Christian Williams & Phil Goodwin            return new CustomApplication();
727da78c22fdad07916b36e1f0f52291382e9b44c7Christian Williams & Phil Goodwin        }
737da78c22fdad07916b36e1f0f52291382e9b44c7Christian Williams & Phil Goodwin    }
747da78c22fdad07916b36e1f0f52291382e9b44c7Christian Williams & Phil Goodwin
757da78c22fdad07916b36e1f0f52291382e9b44c7Christian Williams & Phil Goodwin    public static class CustomApplication extends Application {
765c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin    }
775c3e3b0e999865255f9ce067097d74b8fbd56aa2Christian Williams & Phil Goodwin}
78