RobolectricTest.java revision 867bc14e9ed74617c4d2770d122231c29e4a02e3
1cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzpackage com.xtremelabs.robolectric;
2cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
3cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport android.content.Context;
4cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport android.view.View;
5cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport com.xtremelabs.robolectric.util.Implementation;
6cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport com.xtremelabs.robolectric.util.Implements;
7867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultzimport com.xtremelabs.robolectric.util.TestOnClickListener;
8cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport org.junit.After;
9cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport org.junit.Before;
10cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport org.junit.Test;
11cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport org.junit.runner.RunWith;
12cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
13cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport java.io.ByteArrayOutputStream;
14cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport java.io.PrintStream;
15867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz
16cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzimport static org.junit.Assert.assertEquals;
17867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultzimport static org.junit.Assert.assertTrue;
18cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
19cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz@RunWith(WithTestDefaultsRunner.class)
20cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultzpublic class RobolectricTest {
21cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
22cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    private PrintStream originalSystemOut;
23cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    private ByteArrayOutputStream buff;
24cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
25cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    @Before
26cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    public void setUp() {
27cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        originalSystemOut = System.out;
28cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        buff = new ByteArrayOutputStream();
29cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        PrintStream testOut = new PrintStream(buff);
30cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        System.setOut(testOut);
31cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    }
32cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
33cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    @After
34cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    public void tearDown() {
35cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        System.setOut(originalSystemOut);
36cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    }
37cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
38cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    @Test
39cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    public void shouldLogMissingInvokedShadowMethodsWhenRequested() throws Exception {
40cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        Robolectric.bindShadowClass(View.class, TestShadowView.class);
41cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        Robolectric.logMissingInvokedShadowMethods();
42cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
43cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
44cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        View aView = new View(null);
45cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        // There's a shadow method for this
46cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        aView.getContext();
47cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        String output = buff.toString();
48cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        assertEquals("", output);
49cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
50cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        aView.findViewById(27);
51cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        // No shadow here... should be logged
52cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        output = buff.toString();
53cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        assertEquals("No Shadow method found for View.findViewById(int)\n", output);
54cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    }
55cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
56cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    @Test // This is nasty because it depends on the test above having run first in order to fail
57cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    public void shouldNotLogMissingInvokedShadowMethodsByDefault() throws Exception {
58cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        Robolectric.bindShadowClass(View.class, ShadowWranglerTest.TestShadowView.class);
59cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
60cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        View aView = new View(null);
61cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        aView.findViewById(27);
62cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        String output = buff.toString();
63cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
64cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        assertEquals("", output);
65cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    }
66cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz
67867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz    @Test(expected= RuntimeException.class)
68867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz    public void clickOn_shouldThrowIfViewIsDisabled() throws Exception {
69867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz        View view = new View(null);
70867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz        view.setEnabled(false);
71867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz        Robolectric.clickOn(view);
72867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz    }
73867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz
74867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz    public void clickOn_shouldCallClickListener() throws Exception {
75867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz        View view = new View(null);
76867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz        TestOnClickListener testOnClickListener = new TestOnClickListener();
77867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz        view.setOnClickListener(testOnClickListener);
78867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz        Robolectric.clickOn(view);
79867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz        assertTrue(testOnClickListener.clicked);
80867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz    }
81867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz
82cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    @Implements(View.class)
83cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    public static class TestShadowView extends ShadowWranglerTest.TestShadowViewParent {
84cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        @SuppressWarnings({"UnusedDeclaration"})
85cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        @Implementation
86cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        public Context getContext() {
87cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz            return null;
88cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz        }
89cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz    }
90867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz
91867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz
92867bc14e9ed74617c4d2770d122231c29e4a02e3Phil Goodwin & Tyler Schultz
93cedd6ea60db4bf5744077021f20092005bb3d461Tyler Schultz}
94