OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / frameworks / base / core / tests / coretests / src / android / widget / focus / FocusAfterRemovalTest.java
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package android.widget.focus;
18
19 import android.widget.focus.FocusAfterRemoval;
20 import com.android.frameworks.coretests.R;
21
22 import android.test.ActivityInstrumentationTestCase;
23 import android.test.suitebuilder.annotation.MediumTest;
24 import android.widget.Button;
25 import android.widget.LinearLayout;
26 import android.view.KeyEvent;
27 import android.view.View;
28
29 /**
30  * {@link FocusAfterRemoval} is set up to exercise cases where the views that
31  * have focus become invisible or GONE.
32  */
33 public class FocusAfterRemovalTest extends ActivityInstrumentationTestCase<FocusAfterRemoval> {
34
35     private LinearLayout mLeftLayout;
36     private Button mTopLeftButton;
37     private Button mBottomLeftButton;
38     private Button mTopRightButton;
39     private Button mBottomRightButton;
40
41     public FocusAfterRemovalTest() {
42         super("com.android.frameworks.coretests", FocusAfterRemoval.class);
43     }
44
45     @Override
46     public void setUp() throws Exception {
47         super.setUp();
48
49         final FocusAfterRemoval a = getActivity();
50         mLeftLayout = (LinearLayout) a.findViewById(R.id.leftLayout);
51         mTopLeftButton = (Button) a.findViewById(R.id.topLeftButton);
52         mBottomLeftButton = (Button) a.findViewById(R.id.bottomLeftButton);
53         mTopRightButton = (Button) a.findViewById(R.id.topRightButton);
54         mBottomRightButton = (Button) a.findViewById(R.id.bottomRightButton);
55     }
56
57     // Test that setUp did what we expect it to do.  These asserts
58     // can't go in SetUp, or the test will hang.
59     @MediumTest
60     public void testSetUpConditions() throws Exception {
61         assertNotNull(mLeftLayout);
62         assertNotNull(mTopLeftButton);
63         assertNotNull(mTopRightButton);
64         assertNotNull(mBottomLeftButton);
65         assertNotNull(mBottomRightButton);
66
67         assertTrue(mTopLeftButton.hasFocus());
68     }
69
70     // if a parent layout becomes GONE when one of its children has focus,
71     // make sure the focus moves to something visible (bug 827087)
72     @MediumTest
73     public void testFocusLeavesWhenParentLayoutIsGone() throws Exception {
74
75         // clicking on this button makes its parent linear layout GONE
76         sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
77         assertEquals(View.GONE, mLeftLayout.getVisibility());
78
79         assertTrue("focus should jump to visible button",
80                 mTopRightButton.hasFocus());
81
82     }
83
84     @MediumTest
85     public void testFocusLeavesWhenParentLayoutInvisible() throws Exception {
86
87         // move down to bottom left button
88         sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
89         assertTrue(mBottomLeftButton.hasFocus());
90
91         // clicking on this button makes its parent linear layout INVISIBLE
92         sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
93         assertEquals(View.INVISIBLE,
94                 getActivity().findViewById(R.id.leftLayout).getVisibility());
95
96         assertTrue("focus should jump to visible button",
97                 mTopRightButton.hasFocus());
98     }
99
100     @MediumTest
101     public void testFocusLeavesWhenFocusedViewBecomesGone() throws Exception {
102
103         // move to top right
104         sendKeys(KeyEvent.KEYCODE_DPAD_RIGHT);
105         assertTrue(mTopRightButton.hasFocus());
106
107         // click making it GONE
108         sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
109         assertEquals(View.GONE, mTopRightButton.getVisibility());
110
111         assertTrue("focus should jump to visible button",
112                 mTopLeftButton.hasFocus());
113     }
114
115     @MediumTest
116     public void testFocusLeavesWhenFocusedViewBecomesInvisible() throws Exception {
117
118         // move to bottom right
119         sendKeys(KeyEvent.KEYCODE_DPAD_RIGHT);
120         sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
121         assertTrue(mBottomRightButton.hasFocus());
122
123         // click making it INVISIBLE
124         sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
125         assertEquals(View.INVISIBLE, mBottomRightButton.getVisibility());
126
127         assertTrue("focus should jump to visible button",
128                 mTopLeftButton.hasFocus());
129     }
130
131 }