/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view; import com.android.frameworks.coretests.R; import android.view.ViewGroupChildren; import android.test.ActivityInstrumentationTestCase; import android.test.suitebuilder.annotation.MediumTest; import android.test.ViewAsserts; import android.test.UiThreadTest; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; /** * Exercises {@link android.view.ViewGroup}'s ability to add/remove children. */ public class ViewGroupChildrenTest extends ActivityInstrumentationTestCase<ViewGroupChildren> { private ViewGroup mGroup; public ViewGroupChildrenTest() { super("com.android.frameworks.coretests", ViewGroupChildren.class); } @Override public void setUp() throws Exception { super.setUp(); final ViewGroupChildren a = getActivity(); mGroup = (ViewGroup) a.findViewById(R.id.group); } @MediumTest public void testSetUpConditions() throws Exception { assertNotNull(mGroup); } @MediumTest public void testStartsEmpty() throws Exception { assertEquals("A ViewGroup should have no child by default", 0, mGroup.getChildCount()); } @UiThreadTest @MediumTest public void testAddChild() throws Exception { View view = createView("1"); mGroup.addView(view); assertEquals(1, mGroup.getChildCount()); ViewAsserts.assertGroupIntegrity(mGroup); ViewAsserts.assertGroupContains(mGroup, view); } @UiThreadTest @MediumTest public void testAddChildAtFront() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT for (int i = 0; i < 24; i++) { View view = createView(String.valueOf(i + 1)); mGroup.addView(view); } View view = createView("X"); mGroup.addView(view, 0); assertEquals(25, mGroup.getChildCount()); ViewAsserts.assertGroupIntegrity(mGroup); ViewAsserts.assertGroupContains(mGroup, view); assertSame(view, mGroup.getChildAt(0)); } @UiThreadTest @MediumTest public void testAddChildInMiddle() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT for (int i = 0; i < 24; i++) { View view = createView(String.valueOf(i + 1)); mGroup.addView(view); } View view = createView("X"); mGroup.addView(view, 12); assertEquals(25, mGroup.getChildCount()); ViewAsserts.assertGroupIntegrity(mGroup); ViewAsserts.assertGroupContains(mGroup, view); assertSame(view, mGroup.getChildAt(12)); } @UiThreadTest @MediumTest public void testAddChildren() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT for (int i = 0; i < 24; i++) { View view = createView(String.valueOf(i + 1)); mGroup.addView(view); ViewAsserts.assertGroupContains(mGroup, view); } assertEquals(24, mGroup.getChildCount()); } @UiThreadTest @MediumTest public void testRemoveChild() throws Exception { View view = createView("1"); mGroup.addView(view); ViewAsserts.assertGroupIntegrity(mGroup); mGroup.removeView(view); ViewAsserts.assertGroupIntegrity(mGroup); ViewAsserts.assertGroupNotContains(mGroup, view); assertEquals(0, mGroup.getChildCount()); assertNull(view.getParent()); } @UiThreadTest @MediumTest public void testRemoveChildren() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT final View[] views = new View[24]; for (int i = 0; i < views.length; i++) { views[i] = createView(String.valueOf(i + 1)); mGroup.addView(views[i]); } for (int i = views.length - 1; i >= 0; i--) { mGroup.removeViewAt(i); ViewAsserts.assertGroupIntegrity(mGroup); ViewAsserts.assertGroupNotContains(mGroup, views[i]); assertNull(views[i].getParent()); } assertEquals(0, mGroup.getChildCount()); } @UiThreadTest @MediumTest public void testRemoveChildrenBulk() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT final View[] views = new View[24]; for (int i = 0; i < views.length; i++) { views[i] = createView(String.valueOf(i + 1)); mGroup.addView(views[i]); } mGroup.removeViews(6, 7); ViewAsserts.assertGroupIntegrity(mGroup); for (int i = 6; i < 13; i++) { ViewAsserts.assertGroupNotContains(mGroup, views[i]); assertNull(views[i].getParent()); } assertEquals(17, mGroup.getChildCount()); } @UiThreadTest @MediumTest public void testRemoveChildrenBulkAtFront() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT final View[] views = new View[24]; for (int i = 0; i < views.length; i++) { views[i] = createView(String.valueOf(i + 1)); mGroup.addView(views[i]); } mGroup.removeViews(0, 7); ViewAsserts.assertGroupIntegrity(mGroup); for (int i = 0; i < 7; i++) { ViewAsserts.assertGroupNotContains(mGroup, views[i]); assertNull(views[i].getParent()); } assertEquals("8", ((TextView) mGroup.getChildAt(0)).getText()); assertEquals(17, mGroup.getChildCount()); } @UiThreadTest @MediumTest public void testRemoveChildrenBulkAtEnd() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT final View[] views = new View[24]; for (int i = 0; i < views.length; i++) { views[i] = createView(String.valueOf(i + 1)); mGroup.addView(views[i]); } mGroup.removeViews(17, 7); ViewAsserts.assertGroupIntegrity(mGroup); for (int i = 17; i < 24; i++) { ViewAsserts.assertGroupNotContains(mGroup, views[i]); assertNull(views[i].getParent()); } assertEquals("17", ((TextView) mGroup.getChildAt(mGroup.getChildCount() - 1)).getText()); assertEquals(17, mGroup.getChildCount()); } @UiThreadTest @MediumTest public void testRemoveChildAtFront() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT final View[] views = new View[24]; for (int i = 0; i < views.length; i++) { views[i] = createView(String.valueOf(i + 1)); mGroup.addView(views[i]); } mGroup.removeViewAt(0); ViewAsserts.assertGroupIntegrity(mGroup); ViewAsserts.assertGroupNotContains(mGroup, views[0]); assertNull(views[0].getParent()); assertEquals(views.length - 1, mGroup.getChildCount()); } @UiThreadTest @MediumTest public void testRemoveChildInMiddle() throws Exception { // 24 should be greater than ViewGroup.ARRAY_CAPACITY_INCREMENT final View[] views = new View[24]; for (int i = 0; i < views.length; i++) { views[i] = createView(String.valueOf(i + 1)); mGroup.addView(views[i]); } mGroup.removeViewAt(12); ViewAsserts.assertGroupIntegrity(mGroup); ViewAsserts.assertGroupNotContains(mGroup, views[12]); assertNull(views[12].getParent()); assertEquals(views.length - 1, mGroup.getChildCount()); } private TextView createView(String text) { TextView view = new TextView(getActivity()); view.setText(text); view.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT )); return view; } }