ViewGroupTest.java revision adfaceabbda4c8c51f24a0def8926075bd7306ad
133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport android.app.Application; 4a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport android.view.View; 5a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport android.view.ViewGroup; 6a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport android.widget.FrameLayout; 786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport com.xtremelabs.robolectric.R; 8638a930898ff7ff4d62b8a3028439142af65e4b4Christian Williamsimport com.xtremelabs.robolectric.Robolectric; 907257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwinimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 1086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport com.xtremelabs.robolectric.res.ResourceLoader; 11a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport org.junit.Before; 12a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport org.junit.Test; 13a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport org.junit.runner.RunWith; 14a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 1586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport java.io.ByteArrayOutputStream; 1686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport java.io.PrintStream; 1786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 1886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 19a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport static org.hamcrest.CoreMatchers.equalTo; 20a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport static org.hamcrest.CoreMatchers.sameInstance; 21a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport static org.hamcrest.MatcherAssert.assertThat; 22a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport static org.hamcrest.core.IsNull.nullValue; 2386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport static org.junit.Assert.*; 24a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 2507257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class) 26a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzpublic class ViewGroupTest { 279729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private ViewGroup root; 289729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private View child1; 299729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private View child2; 309729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private ViewGroup child3; 319729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private View child3a; 329729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private View child3b; 33a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 34a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz @Before public void setUp() throws Exception { 35638a930898ff7ff4d62b8a3028439142af65e4b4Christian Williams Robolectric.bindDefaultShadowClasses(); 36638a930898ff7ff4d62b8a3028439142af65e4b4Christian Williams 3786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams Application context = new Application(); 3886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams ShadowApplication.bind(context, new ResourceLoader(R.class, null)); 3986e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 4086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams root = new FrameLayout(context); 419729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 4286e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child1 = new View(context); 4386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child2 = new View(context); 4486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child3 = new FrameLayout(context); 4586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child3a = new View(context); 4686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child3b = new View(context); 479729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 489729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.addView(child1); 499729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.addView(child2); 509729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.addView(child3); 519729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 529729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3.addView(child3a); 539729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3.addView(child3b); 54a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz } 55a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 56a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz @Test 57a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz public void testRemoveChildAt() throws Exception { 589729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.removeViewAt(1); 59a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 609729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertThat(root.getChildCount(), equalTo(2)); 619729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertThat(root.getChildAt(0), sameInstance(child1)); 629729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertThat(root.getChildAt(1), sameInstance((View) child3)); 63a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 64a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz assertThat(child2.getParent(), nullValue()); 65a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz } 669729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 679729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin @Test 689729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin public void hasFocus_shouldReturnTrueIfAnyChildHasFocus() throws Exception { 699729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 709729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 719729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child1.requestFocus(); 729729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertTrue(root.hasFocus()); 739729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 749729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child1.clearFocus(); 759729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 769729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 779729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3b.requestFocus(); 789729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertTrue(root.hasFocus()); 799729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 809729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3b.clearFocus(); 819729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 829729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 839729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.requestFocus(); 849729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertTrue(root.hasFocus()); 859729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 869729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 879729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin @Test 889729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin public void clearFocus_shouldRecursivelyClearTheFocusOfAllChildren() throws Exception { 899729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3a.requestFocus(); 909729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 919729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.clearFocus(); 929729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 939729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(child3a.hasFocus()); 949729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(child3.hasFocus()); 959729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 969729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 979729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.requestFocus(); 989729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.clearFocus(); 999729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 1009729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 10186e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 10286e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams @Test 10386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams public void dump_shouldDumpStructure() throws Exception { 10486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child3.setId(R.id.snippet_text); 105adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams 10686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams ByteArrayOutputStream out = new ByteArrayOutputStream(); 10786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams shadowOf(root).dump(new PrintStream(out), 0); 10886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams assertEquals("<FrameLayout>\n" + 10986e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <View/>\n" + 11086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <View/>\n" + 11186e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <FrameLayout id=\"id/snippet_text\">\n" + 11286e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <View/>\n" + 11386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <View/>\n" + 11486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " </FrameLayout>\n" + 11586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams "</FrameLayout>\n", out.toString()); 11686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 117a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz} 118