/* * Copyright (C) 2015 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 com.android.utils.traversal; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.test.suitebuilder.annotation.MediumTest; import com.android.utils.AccessibilityNodeInfoUtils; import com.googlecode.eyesfree.testing.TalkBackInstrumentationTestCase; import com.android.talkback.R; public class DirectionalTraversalStrategyTest extends TalkBackInstrumentationTestCase { /** * +-----+-------------+ * | | 2 | * | +--------+----+ * | 1 | 3 | 4 | * | | | | * | +--------+----+ * | |5 |6 | 7 | * +-----+--+--+-------+ */ private AccessibilityNodeInfoCompat mRoot; private AccessibilityNodeInfoCompat mNode1; private AccessibilityNodeInfoCompat mNode2; private AccessibilityNodeInfoCompat mNode3; private AccessibilityNodeInfoCompat mNode4; private AccessibilityNodeInfoCompat mNode5; private AccessibilityNodeInfoCompat mNode6; private AccessibilityNodeInfoCompat mNode7; private DirectionalTraversalStrategy mStrategy; @Override public void setUp() throws Exception { super.setUp(); setContentView(R.layout.directional_traversal); initStrategy(); } @Override public void tearDown() throws Exception { super.tearDown(); AccessibilityNodeInfoUtils.recycleNodes(mRoot, mNode1, mNode2, mNode3, mNode4, mNode5, mNode6, mNode7); if (mStrategy != null) { mStrategy.recycle(); } } @MediumTest public void testMoveRight1() { assertOrder(TraversalStrategy.SEARCH_FOCUS_RIGHT, mNode1, mNode3, mNode4); } @MediumTest public void testMoveRight2() { assertOrder(TraversalStrategy.SEARCH_FOCUS_RIGHT, mNode5, mNode6, mNode7); } @MediumTest public void testMoveRight3() { assertOrder(TraversalStrategy.SEARCH_FOCUS_RIGHT, mNode2, (AccessibilityNodeInfoCompat) null); } @MediumTest public void testMoveDown1() { assertOrder(TraversalStrategy.SEARCH_FOCUS_DOWN, mNode2, mNode3, mNode6); } @MediumTest public void testMoveDown2() { assertOrder(TraversalStrategy.SEARCH_FOCUS_DOWN, mNode4, mNode7); } @MediumTest public void testMoveLeft1() { assertOrder(TraversalStrategy.SEARCH_FOCUS_LEFT, mNode4, mNode3, mNode1); } @MediumTest public void testMoveLeft2() { assertOrder(TraversalStrategy.SEARCH_FOCUS_LEFT, mNode7, mNode6, mNode5, mNode1); } @MediumTest public void testMoveUp1() { assertOrder(TraversalStrategy.SEARCH_FOCUS_UP, mNode7, mNode4, mNode2); } @MediumTest public void testFocusInitialRight() { getService().getCursorController().setCursor(getNodeForId(R.id.directional_5)); assertEquals(mNode1, mStrategy.focusInitial(mRoot, TraversalStrategy.SEARCH_FOCUS_RIGHT)); } @MediumTest public void testFocusInitialLeft() { getService().getCursorController().setCursor(getNodeForId(R.id.directional_5)); assertEquals(mNode7, mStrategy.focusInitial(mRoot, TraversalStrategy.SEARCH_FOCUS_LEFT)); } @MediumTest public void testFocusInitialUp() { getService().getCursorController().setCursor(getNodeForId(R.id.directional_3)); assertEquals(mNode6, mStrategy.focusInitial(mRoot, TraversalStrategy.SEARCH_FOCUS_UP)); } @MediumTest public void testFocusInitialDown() { getService().getCursorController().setCursor(getNodeForId(R.id.directional_3)); assertEquals(mNode2, mStrategy.focusInitial(mRoot, TraversalStrategy.SEARCH_FOCUS_DOWN)); } private void initStrategy() { mRoot = getNodeForId(R.id.directional_root); mNode1 = getNodeForId(R.id.directional_1); mNode2 = getNodeForId(R.id.directional_2); mNode3 = getNodeForId(R.id.directional_3); mNode4 = getNodeForId(R.id.directional_4); mNode5 = getNodeForId(R.id.directional_5); mNode6 = getNodeForId(R.id.directional_6); mNode7 = getNodeForId(R.id.directional_7); mStrategy = new DirectionalTraversalStrategy(mRoot); } private void assertOrder(@TraversalStrategy.SearchDirection int direction, AccessibilityNodeInfoCompat fromNode, AccessibilityNodeInfoCompat... toNodes) { AccessibilityNodeInfoCompat currentNode = fromNode; int size = toNodes.length; for (int i = 0; i < size; ++i) { currentNode = mStrategy.findFocus(currentNode, direction); assertEquals(toNodes[i], currentNode); } } }