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; 62c9c757ef2fb2ffd9dffb5b4227144d15922bcf4adriancowhamimport android.view.animation.Animation; 72c9c757ef2fb2ffd9dffb5b4227144d15922bcf4adriancowhamimport android.view.animation.Animation.AnimationListener; 8a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzimport android.widget.FrameLayout; 9b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport android.widget.LinearLayout; 1086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport com.xtremelabs.robolectric.R; 11b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport com.xtremelabs.robolectric.Robolectric; 1207257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwinimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 1386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport com.xtremelabs.robolectric.res.ResourceLoader; 14b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport org.junit.After; 15b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport org.junit.Before; 16b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport org.junit.Test; 17b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport org.junit.runner.RunWith; 18b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 19b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport java.io.ByteArrayOutputStream; 20b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport java.io.PrintStream; 21b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 22b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 23b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport static org.hamcrest.CoreMatchers.equalTo; 24b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport static org.hamcrest.CoreMatchers.sameInstance; 25b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport static org.hamcrest.MatcherAssert.assertThat; 26b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport static org.hamcrest.core.IsNull.nullValue; 27b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultzimport static org.junit.Assert.*; 28a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 2907257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class) 30a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultzpublic class ViewGroupTest { 3140c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams private String defaultLineSeparator; 329729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private ViewGroup root; 339729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private View child1; 349729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private View child2; 359729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private ViewGroup child3; 369729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private View child3a; 379729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin private View child3b; 38b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz private Application context; 39a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 40b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz @Before 41b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz public void setUp() throws Exception { 42b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz context = new Application(); 43e04e87dd1d1b5399264d7be0ed3ae8670dc175a8Ryan Richard ShadowApplication.bind(context, new ResourceLoader(10, R.class, null, null)); 4486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 4586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams root = new FrameLayout(context); 469729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 4786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child1 = new View(context); 4886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child2 = new View(context); 4986e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child3 = new FrameLayout(context); 5086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child3a = new View(context); 5186e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child3b = new View(context); 529729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 539729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.addView(child1); 549729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.addView(child2); 559729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.addView(child3); 569729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 579729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3.addView(child3a); 589729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3.addView(child3b); 5940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 60f68306afa7b75d4e375d00d433f3432ffb68d4e4unknown defaultLineSeparator = System.getProperty("line.separator"); 61f68306afa7b75d4e375d00d433f3432ffb68d4e4unknown System.setProperty("line.separator", "\n"); 62f68306afa7b75d4e375d00d433f3432ffb68d4e4unknown } 6340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 64f68306afa7b75d4e375d00d433f3432ffb68d4e4unknown @After 65f68306afa7b75d4e375d00d433f3432ffb68d4e4unknown public void tearDown() throws Exception { 6640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams System.setProperty("line.separator", defaultLineSeparator); 67a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz } 68a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 69a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz @Test 702c9c757ef2fb2ffd9dffb5b4227144d15922bcf4adriancowham public void testLayoutAnimationListener() { 71b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat(root.getLayoutAnimationListener(), nullValue()); 72b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 73b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz AnimationListener animationListener = new AnimationListener() { 74b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz @Override 75b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz public void onAnimationEnd(Animation a) { } 76b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 77b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz @Override 78b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz public void onAnimationRepeat(Animation a) { } 79b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 80b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz @Override 81b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz public void onAnimationStart(Animation a) { } 82b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz }; 83b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.setLayoutAnimationListener(animationListener); 84b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 85b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat(root.getLayoutAnimationListener(), sameInstance(animationListener)); 862c9c757ef2fb2ffd9dffb5b4227144d15922bcf4adriancowham } 87b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 882c9c757ef2fb2ffd9dffb5b4227144d15922bcf4adriancowham @Test 89a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz public void testRemoveChildAt() throws Exception { 909729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.removeViewAt(1); 91a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 929729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertThat(root.getChildCount(), equalTo(2)); 939729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertThat(root.getChildAt(0), sameInstance(child1)); 949729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertThat(root.getChildAt(1), sameInstance((View) child3)); 95a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 96a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz assertThat(child2.getParent(), nullValue()); 97a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz } 989729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 999729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin @Test 100adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams public void testAddViewAt() throws Exception { 101adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams root.removeAllViews(); 102adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams root.addView(child1); 103adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams root.addView(child2); 104adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams root.addView(child3, 1); 105adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams assertThat(root.getChildAt(0), sameInstance(child1)); 106adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams assertThat(root.getChildAt(1), sameInstance((View) child3)); 107adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams assertThat(root.getChildAt(2), sameInstance(child2)); 108adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams } 109b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 110593543dfecc0d06e016c66504f24cd361b353a44Chris Van Vranken @Test 111593543dfecc0d06e016c66504f24cd361b353a44Chris Van Vranken public void shouldfindViewWithTag() { 112b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.removeAllViews(); 113b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child1.setTag("tag1"); 114b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child2.setTag("tag2"); 115b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child3.setTag("tag3"); 116b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child1); 117b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child2); 118b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child3, 1); 119b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat(root.findViewWithTag("tag1"), sameInstance(child1)); 12010afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias assertThat(root.findViewWithTag("tag2"), sameInstance(child2)); 121b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat((ViewGroup) root.findViewWithTag("tag3"), sameInstance(child3)); 122593543dfecc0d06e016c66504f24cd361b353a44Chris Van Vranken } 123b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 12488fd0dbccc29a37545c186115f2a6b6f91302a56Chris Van Vranken @Test 12588fd0dbccc29a37545c186115f2a6b6f91302a56Chris Van Vranken public void shouldNotfindViewWithTagReturnNull() { 126b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.removeAllViews(); 127b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child1.setTag("tag1"); 128b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child2.setTag("tag2"); 129b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child3.setTag("tag3"); 130b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child1); 131b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child2); 132b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child3, 1); 133b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat(root.findViewWithTag("tag21"), equalTo(null)); 134b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat((ViewGroup) root.findViewWithTag("tag23"), equalTo(null)); 13588fd0dbccc29a37545c186115f2a6b6f91302a56Chris Van Vranken } 136b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 13788fd0dbccc29a37545c186115f2a6b6f91302a56Chris Van Vranken @Test 13888fd0dbccc29a37545c186115f2a6b6f91302a56Chris Van Vranken public void shouldfindViewWithTagFromCorrectViewGroup() { 139b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.removeAllViews(); 140b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child1.setTag("tag1"); 141b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child2.setTag("tag2"); 142b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child3.setTag("tag3"); 143b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child1); 144b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child2); 145b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz root.addView(child3); 146b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 147b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child3a.setTag("tag1"); 148b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz child3b.setTag("tag2"); 149b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 150b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz //can find views by tag from root 151b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat(root.findViewWithTag("tag1"), sameInstance(child1)); 15210afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias assertThat(root.findViewWithTag("tag2"), sameInstance(child2)); 153b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat((ViewGroup) root.findViewWithTag("tag3"), sameInstance(child3)); 154b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 155b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz //can find views by tag from child3 156b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat(child3.findViewWithTag("tag1"), sameInstance(child3a)); 157b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat(child3.findViewWithTag("tag2"), sameInstance(child3b)); 158b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz } 159b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 160b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz @Test 161b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz public void shouldFindViewWithTag_whenViewGroupOverridesGetTag() throws Exception { 162b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz ViewGroup viewGroup = new LinearLayout(Robolectric.application) { 163b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz @Override 164b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz public Object getTag() { 165b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz return "blarg"; 166b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz } 167b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz }; 168b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz assertThat((ViewGroup) viewGroup.findViewWithTag("blarg"), sameInstance(viewGroup)); 16988fd0dbccc29a37545c186115f2a6b6f91302a56Chris Van Vranken } 170b551a870eb9fb9acae0f8a6632fefea12a5f8598Ryan Richard & Tyler Schultz 171adc0e08f20f0c0df8303e304c460865f1b25e190Christian Williams @Test 1729729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin public void hasFocus_shouldReturnTrueIfAnyChildHasFocus() throws Exception { 1739729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 1749729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 1759729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child1.requestFocus(); 1769729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertTrue(root.hasFocus()); 1779729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 1789729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child1.clearFocus(); 1799729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 1809729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 1819729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3b.requestFocus(); 1829729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertTrue(root.hasFocus()); 1839729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 1849729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3b.clearFocus(); 1859729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 1869729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 1879729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.requestFocus(); 1889729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertTrue(root.hasFocus()); 1899729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 1909729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 1919729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin @Test 1929729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin public void clearFocus_shouldRecursivelyClearTheFocusOfAllChildren() throws Exception { 1939729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child3a.requestFocus(); 1949729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 1959729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.clearFocus(); 1969729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 1979729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(child3a.hasFocus()); 1989729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(child3.hasFocus()); 1999729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 2009729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 2019729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.requestFocus(); 2029729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin root.clearFocus(); 2039729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin assertFalse(root.hasFocus()); 2049729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 20586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 20686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams @Test 20710afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias public void findFocus_shouldRecursivelyFindTheViewWithFocus() { 20810afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias child3a.requestFocus(); 20910afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias 21010afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias assertSame(child3a, root.findFocus()); 21110afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias } 21210afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias 21310afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias @Test 21410afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias public void findFocus_shouldReturnThisBeforeChildrenWithFocus() { 21510afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias child3a.requestFocus(); 21610afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias child3.requestFocus(); 21710afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias 21810afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias assertSame(child3, root.findFocus()); 21910afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias } 22010afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias 22110afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias @Test 22286e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams public void dump_shouldDumpStructure() throws Exception { 22386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams child3.setId(R.id.snippet_text); 224adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams 22586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams ByteArrayOutputStream out = new ByteArrayOutputStream(); 22686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams shadowOf(root).dump(new PrintStream(out), 0); 22786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams assertEquals("<FrameLayout>\n" + 22886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <View/>\n" + 22986e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <View/>\n" + 23086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <FrameLayout id=\"id/snippet_text\">\n" + 23186e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <View/>\n" + 23286e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " <View/>\n" + 23386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams " </FrameLayout>\n" + 23486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams "</FrameLayout>\n", out.toString()); 23586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 236dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 237dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo @Test 238dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo public void testRemoveView() { 239dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeView(new View(context)); 240dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(3)); 241dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 242dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeView(child2); 243dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(2)); 244dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child1)); 245dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(1), sameInstance((View) child3)); 246dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 247dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeView(child2); 248dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(2)); 249dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child1)); 250dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(1), sameInstance((View) child3)); 251dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 252dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeView(child1); 253dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeView(child3); 254dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(0)); 255dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo } 256dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 257dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo @Test 258dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo public void testRemoveViewInLayout() { 259dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewInLayout(new View(context)); 260dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(3)); 261dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 262dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewInLayout(child2); 263dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(2)); 264dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child1)); 265dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(1), sameInstance((View) child3)); 266dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 267dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewInLayout(child2); 268dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(2)); 269dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child1)); 270dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(1), sameInstance((View) child3)); 271dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 272dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewInLayout(child1); 273dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewInLayout(child3); 274dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(0)); 275dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo } 276dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 277dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo @Test 278dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo public void testRemoveViews() { 279dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViews(0, 0); 280dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(3)); 281dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 282dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViews(2, 1); 283dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(2)); 284dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child1)); 285dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(1), sameInstance(child2)); 286dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 287dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViews(0, 1); 288dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(1)); 289dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child2)); 290dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 291dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViews(0, 1); 292dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(0)); 293dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 294dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.addView(child1); 295dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.addView(child2); 296dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.addView(child3); 297dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 298dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViews(1, 1); 299dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(2)); 300dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child1)); 301dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(1), sameInstance((View) child3)); 302dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 303dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViews(0, 2); 304dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(0)); 305dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo } 306dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 307dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo @Test 308dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo public void testRemoveViewsInLayout() { 309dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewsInLayout(0, 0); 310dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(3)); 311dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 312dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewsInLayout(2, 1); 313dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(2)); 314dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child1)); 315dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(1), sameInstance(child2)); 316dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 317dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewsInLayout(0, 1); 318dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(1)); 319dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child2)); 320dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 321dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewsInLayout(0, 1); 322dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(0)); 323dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 324dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.addView(child1); 325dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.addView(child2); 326dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.addView(child3); 327dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 328dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewsInLayout(1, 1); 329dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(2)); 330dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(0), sameInstance(child1)); 331dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildAt(1), sameInstance((View) child3)); 332dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo 333dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo root.removeViewsInLayout(0, 2); 334dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo assertThat(root.getChildCount(), equalTo(0)); 335dfd21b7f55f0f13f01db5b46170f779b5149da20Farand Koo } 336a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz} 337