// 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 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.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 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.focus, AndroidSemanticsAction.clearFocus, AndroidSemanticsAction.select, ], size: const Size(10.0, 10.0), ), ); }); }); }