// 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:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_api_samples/material/menu_anchor/menu_accelerator_label.0.dart' as example; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('Can open menu', (WidgetTester tester) async { Finder findMenu(String label) { return find .ancestor(of: find.text(label, findRichText: true), matching: find.byType(FocusScope)) .first; } await tester.pumpWidget(const example.MenuAcceleratorApp()); await tester.sendKeyDownEvent(LogicalKeyboardKey.altLeft); await tester.pump(); await tester.sendKeyEvent(LogicalKeyboardKey.keyF, character: 'f'); await tester.pumpAndSettle(); await tester.pump(); expect(find.text('About', findRichText: true), findsOneWidget); expect(tester.getRect(findMenu('About')).left, equals(4.0)); expect(tester.getRect(findMenu('About')).top, equals(48.0)); expect(tester.getRect(findMenu('About')).right, closeTo(98.5, 0.1)); expect(tester.getRect(findMenu('About')).bottom, equals(208.0)); expect(find.text('Save', findRichText: true), findsOneWidget); expect(find.text('Quit', findRichText: true), findsOneWidget); expect(find.text('Magnify', findRichText: true), findsNothing); expect(find.text('Minify', findRichText: true), findsNothing); // Open the About dialog. await tester.sendKeyEvent(LogicalKeyboardKey.keyA, character: 'a'); await tester.sendKeyUpEvent(LogicalKeyboardKey.altLeft); await tester.pumpAndSettle(); expect(find.text('Save', findRichText: true), findsNothing); expect(find.text('Quit', findRichText: true), findsNothing); expect(find.text('Magnify', findRichText: true), findsNothing); expect(find.text('Minify', findRichText: true), findsNothing); expect(find.text('Close'), findsOneWidget); await tester.tap(find.text('Close')); await tester.pumpAndSettle(); expect(find.text('Close'), findsNothing); }); testWidgets('MenuBar is wrapped in a SafeArea', (WidgetTester tester) async { const double safeAreaPadding = 100.0; await tester.pumpWidget( const MediaQuery( data: MediaQueryData(padding: EdgeInsets.symmetric(vertical: safeAreaPadding)), child: example.MenuAcceleratorApp(), ), ); expect(tester.getTopLeft(find.byType(MenuBar)), const Offset(0.0, safeAreaPadding)); }); }