A11y fixes and tests for PopUpMenu (#17446)

This commit is contained in:
Michael Goderbauer 2018-05-09 16:05:20 -07:00 committed by GitHub
parent 5d8d14b781
commit dcb47f62ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 58 additions and 13 deletions

View file

@ -262,12 +262,10 @@ class PopupMenuItemState<T, W extends PopupMenuItem<T>> extends State<W> {
return new InkWell(
onTap: widget.enabled ? handleTap : null,
child: new MergeSemantics(
child: new Container(
height: widget.height,
padding: const EdgeInsets.symmetric(horizontal: _kMenuHorizontalPadding),
child: item,
),
child: new Container(
height: widget.height,
padding: const EdgeInsets.symmetric(horizontal: _kMenuHorizontalPadding),
child: item,
),
);
}

View file

@ -430,15 +430,18 @@ void main() {
expect(MediaQuery.of(popupContext).padding, EdgeInsets.zero);
});
testWidgets('PopupMenu includes route semantics', (WidgetTester tester) async {
testWidgets('open PopupMenu has correct semantics', (WidgetTester tester) async {
final SemanticsTester semantics = new SemanticsTester(tester);
await tester.pumpWidget(new MaterialApp(
home: new Material(
child: new PopupMenuButton<int>(
itemBuilder: (BuildContext context) {
return <PopupMenuItem<int>>[
const PopupMenuItem<int>(value: 1, child: const Text('1')),
const PopupMenuItem<int>(value: 2, child: const Text('2')),
const PopupMenuItem<int>(value: 3, child: const Text('3')),
const PopupMenuItem<int>(value: 4, child: const Text('4')),
const PopupMenuItem<int>(value: 5, child: const Text('5')),
];
},
child: const SizedBox(
@ -452,12 +455,56 @@ void main() {
await tester.tap(find.text('XXX'));
await tester.pumpAndSettle();
expect(semantics, includesNodeWith(
label: 'Popup menu',
flags: <SemanticsFlag>[
SemanticsFlag.namesRoute,
SemanticsFlag.scopesRoute,
],
expect(semantics, hasSemantics(
new TestSemantics.root(
children: <TestSemantics>[
new TestSemantics(
textDirection: TextDirection.ltr,
children: <TestSemantics>[
new TestSemantics(
flags: <SemanticsFlag>[
SemanticsFlag.scopesRoute,
SemanticsFlag.namesRoute,
],
label: 'Popup menu',
textDirection: TextDirection.ltr,
children: <TestSemantics>[
new TestSemantics(
children: <TestSemantics>[
new TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap],
label: '1',
textDirection: TextDirection.ltr,
),
new TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap],
label: '2',
textDirection: TextDirection.ltr,
),
new TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap],
label: '3',
textDirection: TextDirection.ltr,
),
new TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap],
label: '4',
textDirection: TextDirection.ltr,
),
new TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap],
label: '5',
textDirection: TextDirection.ltr,
),
],
),
],
),
],
),
],
),
ignoreId: true, ignoreTransform: true, ignoreRect: true,
));
semantics.dispose();