blob: 8dd872ae6f5b48c99986d2b31e3be861f58cb0a5 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:android_semantics_testing/android_semantics_testing.dart';
import 'package:flutter_test/flutter_test.dart';
// JSON matching a serialized Android AccessibilityNodeInfo.
const String source = r'''
{
"id": 23,
"flags": {
"isChecked": false,
"isCheckable": false,
"isEditable": false,
"isFocusable": false,
"isFocused": false,
"isPassword": false,
"isLongClickable": false
},
"text": "hello",
"contentDescription": "other hello",
"className": "android.view.View",
"rect": {
"left": 0,
"top": 0,
"right": 10,
"bottom": 10
},
"actions": [1, 2, 4]
}
''';
void main() {
group(AndroidSemanticsNode, () {
test('can be parsed from json data', () {
final AndroidSemanticsNode node = AndroidSemanticsNode.deserialize(source);
expect(node.isChecked, false);
expect(node.isCheckable, false);
expect(node.isEditable, false);
expect(node.isFocusable, false);
expect(node.isFocused, false);
expect(node.isPassword, false);
expect(node.isLongClickable, false);
expect(node.text, 'hello');
expect(node.contentDescription, 'other hello');
expect(node.id, 23);
expect(node.getRect(), const Rect.fromLTRB(0.0, 0.0, 10.0, 10.0));
expect(node.getActions(), <AndroidSemanticsAction>[
AndroidSemanticsAction.focus,
AndroidSemanticsAction.clearFocus,
AndroidSemanticsAction.select,
]);
expect(node.className, 'android.view.View');
expect(node.getSize(), const Size(10.0, 10.0));
});
});
group(AndroidSemanticsAction, () {
test('can be parsed from correct constant id', () {
expect(AndroidSemanticsAction.deserialize(0x1), AndroidSemanticsAction.focus);
});
test('returns null passed a bogus id', () {
expect(AndroidSemanticsAction.deserialize(23), isNull);
});
});
group('hasAndroidSemantics', () {
test('matches all android semantics properties', () {
final AndroidSemanticsNode node = AndroidSemanticsNode.deserialize(source);
expect(node, hasAndroidSemantics(
isChecked: false,
isCheckable: false,
isEditable: false,
isFocusable: false,
isFocused: false,
isPassword: false,
isLongClickable: false,
text: 'hello',
contentDescription: 'other hello',
className: 'android.view.View',
id: 23,
rect: const Rect.fromLTRB(0.0, 0.0, 10.0, 10.0),
actions: <AndroidSemanticsAction>[
AndroidSemanticsAction.focus,
AndroidSemanticsAction.clearFocus,
AndroidSemanticsAction.select,
],
size: const Size(10.0, 10.0),
));
});
});
}