| // 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/widgets.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| class MyNotification extends Notification { } |
| |
| void main() { |
| testWidgets('Notification basics - toString', (WidgetTester tester) async { |
| expect(MyNotification(), hasOneLineDescription); |
| }); |
| |
| testWidgets('Notification basics - dispatch', (WidgetTester tester) async { |
| final List<dynamic> log = <dynamic>[]; |
| final GlobalKey key = GlobalKey(); |
| await tester.pumpWidget(NotificationListener<MyNotification>( |
| onNotification: (MyNotification value) { |
| log.add('a'); |
| log.add(value); |
| return true; |
| }, |
| child: NotificationListener<MyNotification>( |
| onNotification: (MyNotification value) { |
| log.add('b'); |
| log.add(value); |
| return false; |
| }, |
| child: Container(key: key), |
| ), |
| )); |
| expect(log, isEmpty); |
| final Notification notification = MyNotification(); |
| expect(() { notification.dispatch(key.currentContext); }, isNot(throwsException)); |
| expect(log, <dynamic>['b', notification, 'a', notification]); |
| }); |
| |
| testWidgets('Notification basics - cancel', (WidgetTester tester) async { |
| final List<dynamic> log = <dynamic>[]; |
| final GlobalKey key = GlobalKey(); |
| await tester.pumpWidget(NotificationListener<MyNotification>( |
| onNotification: (MyNotification value) { |
| log.add('a - error'); |
| log.add(value); |
| return true; |
| }, |
| child: NotificationListener<MyNotification>( |
| onNotification: (MyNotification value) { |
| log.add('b'); |
| log.add(value); |
| return true; |
| }, |
| child: Container(key: key), |
| ), |
| )); |
| expect(log, isEmpty); |
| final Notification notification = MyNotification(); |
| expect(() { notification.dispatch(key.currentContext); }, isNot(throwsException)); |
| expect(log, <dynamic>['b', notification]); |
| }); |
| |
| testWidgets('Notification basics - listener null return value', (WidgetTester tester) async { |
| final List<Type> log = <Type>[]; |
| final GlobalKey key = GlobalKey(); |
| await tester.pumpWidget(NotificationListener<MyNotification>( |
| onNotification: (MyNotification value) { |
| log.add(value.runtimeType); |
| return false; |
| }, |
| child: NotificationListener<MyNotification>( |
| onNotification: (MyNotification value) => false, |
| child: Container(key: key), |
| ), |
| )); |
| expect(() { MyNotification().dispatch(key.currentContext); }, isNot(throwsException)); |
| expect(log, <Type>[MyNotification]); |
| }); |
| } |