[go: nahoru, domu]

blob: fe129ba4a7c4dc3012df5a09f4f03549b9d027a9 [file] [log] [blame]
/*
* Copyright 2018 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 androidx.core.view.accessibility;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;
import android.graphics.Region;
import android.os.Build;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat;
import androidx.test.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SdkSuppress;
import androidx.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.HashMap;
import java.util.Map;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class AccessibilityNodeInfoCompatTest {
@Test
public void testSetCollectionInfoIsNullable() throws Exception {
AccessibilityNodeInfoCompat accessibilityNodeInfoCompat = obtainedWrappedNodeCompat();
accessibilityNodeInfoCompat.setCollectionInfo(null);
}
@Test
public void testSetCollectionItemInfoIsNullable() throws Exception {
AccessibilityNodeInfoCompat accessibilityNodeInfoCompat = obtainedWrappedNodeCompat();
accessibilityNodeInfoCompat.setCollectionItemInfo(null);
}
@Test
public void testGetSetHintText() {
final CharSequence hintText = (Build.VERSION.SDK_INT >= 19) ? "hint text" : null;
AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
nodeCompat.setHintText(hintText);
assertThat(nodeCompat.getHintText(), equalTo(hintText));
}
@Test
public void testGetSetPaneTitle() {
final CharSequence paneTitle = (Build.VERSION.SDK_INT >= 19) ? "pane title" : null;
AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
nodeCompat.setPaneTitle(paneTitle);
assertThat(nodeCompat.getPaneTitle(), equalTo(paneTitle));
}
@Test
public void testGetSetTooltipText() {
final CharSequence tooltipText = (Build.VERSION.SDK_INT >= 19) ? "tooltip" : null;
AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
nodeCompat.setTooltipText(tooltipText);
assertThat(nodeCompat.getTooltipText(), equalTo(tooltipText));
}
@SdkSuppress(minSdkVersion = 19)
@Test
public void testGetSetShowingHintText() {
AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
nodeCompat.setShowingHintText(true);
assertThat(nodeCompat.isShowingHintText(), is(true));
nodeCompat.setShowingHintText(false);
assertThat(nodeCompat.isShowingHintText(), is(false));
}
@SdkSuppress(minSdkVersion = 19)
@Test
public void testGetSetScreenReaderFocusable() {
AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
nodeCompat.setScreenReaderFocusable(true);
assertThat(nodeCompat.isScreenReaderFocusable(), is(true));
nodeCompat.setScreenReaderFocusable(false);
assertThat(nodeCompat.isScreenReaderFocusable(), is(false));
}
@SdkSuppress(minSdkVersion = 19)
@Test
public void testGetSetHeading() {
AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
nodeCompat.setHeading(true);
assertThat(nodeCompat.isHeading(), is(true));
nodeCompat.setHeading(false);
assertThat(nodeCompat.isHeading(), is(false));
AccessibilityNodeInfoCompat.CollectionItemInfoCompat collectionItemInfo =
AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(0, 1, 0, 1, true);
nodeCompat.setCollectionItemInfo(collectionItemInfo);
assertThat(nodeCompat.isHeading(), is(true));
}
@SdkSuppress(minSdkVersion = 19)
@Test
public void testGetSetTextEntryKey() {
AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
nodeCompat.setTextEntryKey(true);
assertThat(nodeCompat.isTextEntryKey(), is(true));
nodeCompat.setTextEntryKey(false);
assertThat(nodeCompat.isTextEntryKey(), is(false));
}
@SdkSuppress(minSdkVersion = 19)
@Test
public void testAccessibilityActionsNotNull() {
try {
AccessibilityActionCompat actionCompat;
actionCompat = AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionShowOnScreen)));
actionCompat = AccessibilityActionCompat.ACTION_SCROLL_TO_POSITION;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionScrollToPosition)));
actionCompat = AccessibilityActionCompat.ACTION_SCROLL_UP;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionScrollUp)));
actionCompat = AccessibilityActionCompat.ACTION_SCROLL_LEFT;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionScrollLeft)));
actionCompat = AccessibilityActionCompat.ACTION_SCROLL_DOWN;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionScrollDown)));
actionCompat = AccessibilityActionCompat.ACTION_SCROLL_RIGHT;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionScrollRight)));
actionCompat = AccessibilityActionCompat.ACTION_CONTEXT_CLICK;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionContextClick)));
actionCompat = AccessibilityActionCompat.ACTION_SET_PROGRESS;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionSetProgress)));
actionCompat = AccessibilityActionCompat.ACTION_MOVE_WINDOW;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionMoveWindow)));
actionCompat = AccessibilityActionCompat.ACTION_SHOW_TOOLTIP;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionShowTooltip)));
actionCompat = AccessibilityActionCompat.ACTION_HIDE_TOOLTIP;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionHideTooltip)));
actionCompat = AccessibilityActionCompat.ACTION_PRESS_AND_HOLD;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionPressAndHold)));
actionCompat = AccessibilityActionCompat.ACTION_IME_ENTER;
assertThat(actionCompat.getId(),
is(getExpectedActionId(android.R.id.accessibilityActionImeEnter)));
} catch (NullPointerException e) {
Assert.fail("Expected no NullPointerException, but got: " + e.getMessage());
}
}
@Test
public void testTouchDelegateInfo() {
final Map<Region, View> targetMap = new HashMap<>(1);
final Region region = new Region(1, 1, 10, 10);
targetMap.put(region, new View(InstrumentationRegistry.getContext()));
final TouchDelegateInfoCompat delegateInfo = new TouchDelegateInfoCompat(targetMap);
final AccessibilityNodeInfoCompat accessibilityNodeInfoCompat =
obtainedWrappedNodeCompat();
accessibilityNodeInfoCompat.setTouchDelegateInfo(delegateInfo);
final TouchDelegateInfoCompat touchDelegateInfoResult =
accessibilityNodeInfoCompat.getTouchDelegateInfo();
if (Build.VERSION.SDK_INT >= 29) {
assertThat(touchDelegateInfoResult.getRegionCount(), is(1));
assertThat(touchDelegateInfoResult.getRegionAt(0), is(region));
// getTargetForRegion return null, since we are not a11y service
assertThat(touchDelegateInfoResult.getTargetForRegion(region), is(nullValue()));
} else {
assertThat(touchDelegateInfoResult, is(nullValue()));
assertThat(delegateInfo.getRegionCount(), is(0));
assertThat(delegateInfo.getRegionAt(0), is(nullValue()));
assertThat(delegateInfo.getTargetForRegion(region), is(nullValue()));
}
}
@SdkSuppress(minSdkVersion = 21)
@Test
public void testWrappedActionEqualsStaticAction() {
// Static AccessibilityActionCompat
AccessibilityActionCompat staticAction =
AccessibilityActionCompat.ACTION_LONG_CLICK;
// Wrapped AccessibilityAction
AccessibilityActionCompat wrappedAction = new AccessibilityActionCompat(
AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK);
assertThat(staticAction.equals(wrappedAction), equalTo(true));
assertThat(staticAction.hashCode() == wrappedAction.hashCode(), equalTo(true));
}
@SdkSuppress(minSdkVersion = 21)
@Test
public void testActionIdAndLabelEqualsStaticAction() {
AccessibilityActionCompat staticAction =
AccessibilityActionCompat.ACTION_LONG_CLICK;
// AccessibilityActionCompat defined by id and label
AccessibilityActionCompat wrappedIdAndLabelAction = new AccessibilityActionCompat(
AccessibilityNodeInfoCompat.ACTION_LONG_CLICK, "label", null);
assertThat(staticAction.equals(wrappedIdAndLabelAction), equalTo(true));
assertThat(staticAction.hashCode() == wrappedIdAndLabelAction.hashCode(), equalTo(true));
}
@SdkSuppress(minSdkVersion = 21)
@Test
public void testDifferentActionIdsNotEquals() {
AccessibilityActionCompat staticLongClickAction =
AccessibilityActionCompat.ACTION_LONG_CLICK;
AccessibilityActionCompat staticClickAction = AccessibilityActionCompat.ACTION_CLICK;
assertThat(staticLongClickAction.equals(staticClickAction), equalTo(false));
assertThat(staticLongClickAction.hashCode() == staticClickAction.hashCode(),
equalTo(false));
// AccessibilityActionCompat defined by id
AccessibilityActionCompat wrappedIdLongClickAction = new AccessibilityActionCompat(
AccessibilityNodeInfoCompat.ACTION_LONG_CLICK, null, null);
assertThat(wrappedIdLongClickAction.equals(staticClickAction), equalTo(false));
assertThat(wrappedIdLongClickAction.hashCode() == staticClickAction.hashCode(),
equalTo(false));
// Wrapped AccessibilityAction
AccessibilityActionCompat wrappedLongClickAction = new AccessibilityActionCompat(
AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK);
assertThat(wrappedLongClickAction.equals(staticClickAction), equalTo(false));
assertThat(wrappedLongClickAction.hashCode() == staticClickAction.hashCode(),
equalTo(false));
}
private AccessibilityNodeInfoCompat obtainedWrappedNodeCompat() {
AccessibilityNodeInfo accessibilityNodeInfo = AccessibilityNodeInfo.obtain();
return AccessibilityNodeInfoCompat.wrap(accessibilityNodeInfo);
}
private int getExpectedActionId(int id) {
return Build.VERSION.SDK_INT >= 21 ? id : 0;
}
}