Home | History | Annotate | Download | only in focus
      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.VerticalFocusSearch;
     20 
     21 import android.test.ActivityInstrumentationTestCase;
     22 import android.test.suitebuilder.annotation.Suppress;
     23 import android.view.FocusFinder;
     24 import android.view.View;
     25 import android.view.ViewGroup;
     26 import android.widget.Button;
     27 import android.widget.LinearLayout;
     28 
     29 /**
     30  * Tests that focus searching works on a vertical linear layout of buttons of
     31  * various widths and horizontal placements.
     32  */
     33 // Suppress until bug http://b/issue?id=1416545 is fixed
     34 @Suppress
     35 public class VerticalFocusSearchTest extends ActivityInstrumentationTestCase<VerticalFocusSearch> {
     36 
     37     private LinearLayout mLayout;
     38 
     39     private Button mTopWide;
     40     private Button mMidSkinny1Left;
     41     private Button mMidSkinny2Right;
     42     private Button mBottomWide;
     43 
     44     private FocusSearchAlg mFocusFinder;
     45 
     46     // helps test old and new impls when figuring out why something that used
     47     // to work doesn't anymore (or verifying that new works as well as old).
     48     interface FocusSearchAlg {
     49         View findNextFocus(ViewGroup root, View focused, int direction);
     50     }
     51 
     52     // calls new impl
     53     static class NewFocusSearchAlg implements FocusSearchAlg {
     54 
     55         public View findNextFocus(ViewGroup root, View focused, int direction) {
     56             return FocusFinder.getInstance()
     57                     .findNextFocus(root, focused, direction);
     58         }
     59     }
     60 
     61     public VerticalFocusSearchTest() {
     62         super("com.android.frameworks.coretests", VerticalFocusSearch.class);
     63     }
     64 
     65 
     66     @Override
     67     protected void setUp() throws Exception {
     68         super.setUp();
     69 
     70         mLayout = getActivity().getLayout();
     71         mTopWide = getActivity().getTopWide();
     72         mMidSkinny1Left = getActivity().getMidSkinny1Left();
     73         mMidSkinny2Right = getActivity().getMidSkinny2Right();
     74         mBottomWide = getActivity().getBottomWide();
     75 
     76         mFocusFinder = new NewFocusSearchAlg();
     77     }
     78 
     79     public void testPreconditions() {
     80         assertNotNull(mLayout);
     81         assertNotNull(mTopWide);
     82         assertNotNull(mMidSkinny1Left);
     83         assertNotNull(mMidSkinny2Right);
     84         assertNotNull(mBottomWide);
     85     }
     86 
     87     public void testSearchFromTopButton() {
     88         assertNull("going up from mTopWide.",
     89                 mFocusFinder.findNextFocus(mLayout, mTopWide, View.FOCUS_UP));
     90 
     91         assertNull("going left from mTopWide.",
     92                 mFocusFinder.findNextFocus(mLayout, mTopWide, View.FOCUS_LEFT));
     93 
     94         assertNull("going right from mTopWide.",
     95                 mFocusFinder.findNextFocus(mLayout, mTopWide, View.FOCUS_RIGHT));
     96 
     97         assertEquals("going down from mTopWide.",
     98                 mMidSkinny1Left,
     99                 mFocusFinder
    100                 .findNextFocus(mLayout, mTopWide, View.FOCUS_DOWN));
    101     }
    102 
    103     public void testSearchFromMidLeft() {
    104         assertNull("going left should have no next focus",
    105                 mFocusFinder.findNextFocus(mLayout, mMidSkinny1Left, View.FOCUS_LEFT));
    106 
    107         assertEquals("going right from mMidSkinny1Left should go to mMidSkinny2Right",
    108                 mMidSkinny2Right,
    109                 mFocusFinder.findNextFocus(mLayout, mMidSkinny1Left, View.FOCUS_RIGHT));
    110 
    111         assertEquals("going up from mMidSkinny1Left should go to mTopWide",
    112                 mTopWide,
    113                 mFocusFinder.findNextFocus(mLayout, mMidSkinny1Left, View.FOCUS_UP));
    114 
    115         assertEquals("going down from mMidSkinny1Left should go to mMidSkinny2Right",
    116                 mMidSkinny2Right,
    117                 mFocusFinder.findNextFocus(mLayout, mMidSkinny1Left, View.FOCUS_DOWN));
    118     }
    119 
    120     public void testSearchFromMidRight() {
    121         assertEquals("going left from mMidSkinny2Right should go to mMidSkinny1Left",
    122                 mMidSkinny1Left,
    123                 mFocusFinder.findNextFocus(mLayout, mMidSkinny2Right, View.FOCUS_LEFT));
    124 
    125         assertNull("going right should have no next focus",
    126                 mFocusFinder.findNextFocus(mLayout, mMidSkinny2Right, View.FOCUS_RIGHT));
    127 
    128         assertEquals("going up from mMidSkinny2Right should go to mMidSkinny1Left",
    129                 mMidSkinny1Left,
    130                 mFocusFinder.findNextFocus(mLayout, mMidSkinny2Right, View.FOCUS_UP));
    131 
    132         assertEquals("going down from mMidSkinny2Right should go to mBottomWide",
    133                 mBottomWide,
    134                 mFocusFinder.findNextFocus(mLayout, mMidSkinny2Right, View.FOCUS_DOWN));
    135 
    136     }
    137 
    138     public void testSearchFromFromBottom() {
    139         assertNull("going down from bottom button should have no next focus.",
    140                 mFocusFinder.findNextFocus(mLayout, mBottomWide, View.FOCUS_DOWN));
    141 
    142         assertNull("going left from bottom button should have no next focus.",
    143                 mFocusFinder.findNextFocus(mLayout, mBottomWide, View.FOCUS_LEFT));
    144 
    145         assertNull("going right from bottom button should have no next focus.",
    146                 mFocusFinder.findNextFocus(mLayout, mBottomWide, View.FOCUS_RIGHT));
    147 
    148         assertEquals("going up from bottom button should go to mMidSkinny2Right.",
    149                 mMidSkinny2Right,
    150                 mFocusFinder.findNextFocus(mLayout, mBottomWide, View.FOCUS_UP));
    151     }
    152 }
    153