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