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