LinkAccessibilityHelperTest.java revision d832154e333a3a45b5faecd518b664ddd297183c
1d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam/* 2d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * Copyright (C) 2016 The Android Open Source Project 3d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * 4d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * Licensed under the Apache License, Version 2.0 (the "License"); 5d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * you may not use this file except in compliance with the License. 6d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * You may obtain a copy of the License at 7d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * 8d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * http://www.apache.org/licenses/LICENSE-2.0 9d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * 10d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * Unless required by applicable law or agreed to in writing, software 11d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * distributed under the License is distributed on an "AS IS" BASIS, 12d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * See the License for the specific language governing permissions and 14d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam * limitations under the License. 15d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam */ 16d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 17d832154e333a3a45b5faecd518b664ddd297183cMaurice Lampackage com.android.setupwizardlib.test; 18d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 19d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.graphics.Rect; 20d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.os.Bundle; 21d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; 22d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.support.v4.widget.ExploreByTouchHelper; 23d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.test.AndroidTestCase; 24d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.test.suitebuilder.annotation.SmallTest; 25d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.text.SpannableStringBuilder; 26d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.view.accessibility.AccessibilityEvent; 27d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport android.widget.TextView; 28d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 29d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport com.android.setupwizardlib.span.LinkSpan; 30d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport com.android.setupwizardlib.util.LinkAccessibilityHelper; 31d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 32d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport java.util.ArrayList; 33d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport java.util.Collections; 34d832154e333a3a45b5faecd518b664ddd297183cMaurice Lamimport java.util.List; 35d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 36d832154e333a3a45b5faecd518b664ddd297183cMaurice Lampublic class LinkAccessibilityHelperTest extends AndroidTestCase { 37d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 38d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam private TextView mTextView; 39d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam private TestLinkAccessibilityHelper mHelper; 40d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam private LinkSpan mSpan; 41d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 42d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @Override 43d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam protected void setUp() throws Exception { 44d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam super.setUp(); 45d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mSpan = new LinkSpan("foobar"); 46d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam SpannableStringBuilder ssb = new SpannableStringBuilder("Hello world"); 47d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam ssb.setSpan(mSpan, 1, 2, 0 /* flags */); 48d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mTextView = new TextView(getContext()); 49d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mTextView.setText(ssb); 50d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mHelper = new TestLinkAccessibilityHelper(mTextView); 51d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 52d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mTextView.measure(500, 500); 53d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mTextView.layout(0, 0, 500, 500); 54d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 55d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 56d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @SmallTest 57d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void testGetVirtualViewAt() { 58d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam final int virtualViewId = mHelper.getVirtualViewAt(15, 10); 59d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertEquals("Virtual view ID should be 1", 1, virtualViewId); 60d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 61d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 62d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @SmallTest 63d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void testGetVirtualViewAtHost() { 64d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam final int virtualViewId = mHelper.getVirtualViewAt(100, 100); 65d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertEquals("Virtual view ID should be INVALID_ID", 66d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam ExploreByTouchHelper.INVALID_ID, virtualViewId); 67d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 68d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 69d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @SmallTest 70d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void testGetVisibleVirtualViews() { 71d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam List<Integer> virtualViewIds = new ArrayList<>(); 72d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mHelper.getVisibleVirtualViews(virtualViewIds); 73d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 74d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertEquals("VisibleVirtualViews should be [1]", 75d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam Collections.singletonList(1), virtualViewIds); 76d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 77d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 78d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @SmallTest 79d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void testOnPopulateEventForVirtualView() { 80d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam AccessibilityEvent event = AccessibilityEvent.obtain(); 81d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mHelper.onPopulateEventForVirtualView(1, event); 82d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 83d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam // LinkSpan is set on substring(1, 2) of "Hello world" --> "e" 84d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertEquals("LinkSpan description should be \"e\"", 85d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam "e", event.getContentDescription().toString()); 86d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 87d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam event.recycle(); 88d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 89d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 90d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @SmallTest 91d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void testOnPopulateEventForVirtualViewHost() { 92d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam AccessibilityEvent event = AccessibilityEvent.obtain(); 93d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mHelper.onPopulateEventForVirtualView(ExploreByTouchHelper.INVALID_ID, event); 94d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 95d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertEquals("Host view description should be \"Hello world\"", "Hello world", 96d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam event.getContentDescription().toString()); 97d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 98d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam event.recycle(); 99d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 100d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 101d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @SmallTest 102d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void testOnPopulateNodeForVirtualView() { 103d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam AccessibilityNodeInfoCompat info = AccessibilityNodeInfoCompat.obtain(); 104d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam mHelper.onPopulateNodeForVirtualView(1, info); 105d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 106d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertEquals("LinkSpan description should be \"e\"", 107d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam "e", info.getContentDescription().toString()); 108d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertTrue("LinkSpan should be focusable", info.isFocusable()); 109d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertTrue("LinkSpan should be clickable", info.isClickable()); 110d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam Rect bounds = new Rect(); 111d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam info.getBoundsInParent(bounds); 112d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam assertEquals("LinkSpan bounds should be (20, 0, 35, 38)", new Rect(20, 0, 35, 38), bounds); 113d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 114d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam info.recycle(); 115d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 116d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 117d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam private static class TestLinkAccessibilityHelper extends LinkAccessibilityHelper { 118d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 119d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public TestLinkAccessibilityHelper(TextView view) { 120d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam super(view); 121d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 122d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 123d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @Override 124d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public int getVirtualViewAt(float x, float y) { 125d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam return super.getVirtualViewAt(x, y); 126d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 127d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 128d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @Override 129d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void getVisibleVirtualViews(List<Integer> virtualViewIds) { 130d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam super.getVisibleVirtualViews(virtualViewIds); 131d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 132d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 133d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @Override 134d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void onPopulateEventForVirtualView(int virtualViewId, AccessibilityEvent event) { 135d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam super.onPopulateEventForVirtualView(virtualViewId, event); 136d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 137d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 138d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @Override 139d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public void onPopulateNodeForVirtualView(int virtualViewId, 140d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam AccessibilityNodeInfoCompat info) { 141d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam super.onPopulateNodeForVirtualView(virtualViewId, info); 142d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 143d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam 144d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam @Override 145d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam public boolean onPerformActionForVirtualView(int virtualViewId, int action, 146d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam Bundle arguments) { 147d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam return super.onPerformActionForVirtualView(virtualViewId, action, arguments); 148d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 149d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam } 150d832154e333a3a45b5faecd518b664ddd297183cMaurice Lam} 151