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