/* * 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.widget.focus; import android.widget.focus.VerticalFocusSearch; import android.test.ActivityInstrumentationTestCase; import android.test.suitebuilder.annotation.Suppress; import android.view.FocusFinder; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; /** * Tests that focus searching works on a vertical linear layout of buttons of * various widths and horizontal placements. */ // Suppress until bug http://b/issue?id=1416545 is fixed @Suppress public class VerticalFocusSearchTest extends ActivityInstrumentationTestCase { private LinearLayout mLayout; private Button mTopWide; private Button mMidSkinny1Left; private Button mMidSkinny2Right; private Button mBottomWide; private FocusSearchAlg mFocusFinder; // helps test old and new impls when figuring out why something that used // to work doesn't anymore (or verifying that new works as well as old). interface FocusSearchAlg { View findNextFocus(ViewGroup root, View focused, int direction); } // calls new impl static class NewFocusSearchAlg implements FocusSearchAlg { public View findNextFocus(ViewGroup root, View focused, int direction) { return FocusFinder.getInstance() .findNextFocus(root, focused, direction); } } public VerticalFocusSearchTest() { super("com.android.frameworks.coretests", VerticalFocusSearch.class); } @Override protected void setUp() throws Exception { super.setUp(); mLayout = getActivity().getLayout(); mTopWide = getActivity().getTopWide(); mMidSkinny1Left = getActivity().getMidSkinny1Left(); mMidSkinny2Right = getActivity().getMidSkinny2Right(); mBottomWide = getActivity().getBottomWide(); mFocusFinder = new NewFocusSearchAlg(); } public void testPreconditions() { assertNotNull(mLayout); assertNotNull(mTopWide); assertNotNull(mMidSkinny1Left); assertNotNull(mMidSkinny2Right); assertNotNull(mBottomWide); } public void testSearchFromTopButton() { assertNull("going up from mTopWide.", mFocusFinder.findNextFocus(mLayout, mTopWide, View.FOCUS_UP)); assertNull("going left from mTopWide.", mFocusFinder.findNextFocus(mLayout, mTopWide, View.FOCUS_LEFT)); assertNull("going right from mTopWide.", mFocusFinder.findNextFocus(mLayout, mTopWide, View.FOCUS_RIGHT)); assertEquals("going down from mTopWide.", mMidSkinny1Left, mFocusFinder .findNextFocus(mLayout, mTopWide, View.FOCUS_DOWN)); } public void testSearchFromMidLeft() { assertNull("going left should have no next focus", mFocusFinder.findNextFocus(mLayout, mMidSkinny1Left, View.FOCUS_LEFT)); assertEquals("going right from mMidSkinny1Left should go to mMidSkinny2Right", mMidSkinny2Right, mFocusFinder.findNextFocus(mLayout, mMidSkinny1Left, View.FOCUS_RIGHT)); assertEquals("going up from mMidSkinny1Left should go to mTopWide", mTopWide, mFocusFinder.findNextFocus(mLayout, mMidSkinny1Left, View.FOCUS_UP)); assertEquals("going down from mMidSkinny1Left should go to mMidSkinny2Right", mMidSkinny2Right, mFocusFinder.findNextFocus(mLayout, mMidSkinny1Left, View.FOCUS_DOWN)); } public void testSearchFromMidRight() { assertEquals("going left from mMidSkinny2Right should go to mMidSkinny1Left", mMidSkinny1Left, mFocusFinder.findNextFocus(mLayout, mMidSkinny2Right, View.FOCUS_LEFT)); assertNull("going right should have no next focus", mFocusFinder.findNextFocus(mLayout, mMidSkinny2Right, View.FOCUS_RIGHT)); assertEquals("going up from mMidSkinny2Right should go to mMidSkinny1Left", mMidSkinny1Left, mFocusFinder.findNextFocus(mLayout, mMidSkinny2Right, View.FOCUS_UP)); assertEquals("going down from mMidSkinny2Right should go to mBottomWide", mBottomWide, mFocusFinder.findNextFocus(mLayout, mMidSkinny2Right, View.FOCUS_DOWN)); } public void testSearchFromFromBottom() { assertNull("going down from bottom button should have no next focus.", mFocusFinder.findNextFocus(mLayout, mBottomWide, View.FOCUS_DOWN)); assertNull("going left from bottom button should have no next focus.", mFocusFinder.findNextFocus(mLayout, mBottomWide, View.FOCUS_LEFT)); assertNull("going right from bottom button should have no next focus.", mFocusFinder.findNextFocus(mLayout, mBottomWide, View.FOCUS_RIGHT)); assertEquals("going up from bottom button should go to mMidSkinny2Right.", mMidSkinny2Right, mFocusFinder.findNextFocus(mLayout, mBottomWide, View.FOCUS_UP)); } }