// Copyright 2017 The Chromium 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_test/flutter_test.dart'; import 'feedback_tester.dart'; void main () { const Duration kWaitDuration = const Duration(seconds: 1); FeedbackTester feedback; setUp(() { feedback = new FeedbackTester(); }); tearDown(() { feedback?.dispose(); }); group('Feedback on Android', () { testWidgets('forTap', (WidgetTester tester) async { await tester.pumpWidget(new TestWidget( tapHandler: (BuildContext context) { return () => Feedback.forTap(context); }, )); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 0); expect(feedback.clickSoundCount, 0); await tester.tap(find.text('X')); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 0); expect(feedback.clickSoundCount, 1); }); testWidgets('forTap Wrapper', (WidgetTester tester) async { int callbackCount = 0; final VoidCallback callback = () { callbackCount++; }; await tester.pumpWidget(new TestWidget( tapHandler: (BuildContext context) { return Feedback.wrapForTap(callback, context); }, )); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 0); expect(feedback.clickSoundCount, 0); expect(callbackCount, 0); await tester.tap(find.text('X')); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 0); expect(feedback.clickSoundCount, 1); expect(callbackCount, 1); }); testWidgets('forLongPress', (WidgetTester tester) async { await tester.pumpWidget(new TestWidget( longPressHandler: (BuildContext context) { return () => Feedback.forLongPress(context); }, )); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 0); expect(feedback.clickSoundCount, 0); await tester.longPress(find.text('X')); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 1); expect(feedback.clickSoundCount, 0); }); testWidgets('forLongPress Wrapper', (WidgetTester tester) async { int callbackCount = 0; final VoidCallback callback = () { callbackCount++; }; await tester.pumpWidget(new TestWidget( longPressHandler: (BuildContext context) { return Feedback.wrapForLongPress(callback, context); }, )); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 0); expect(feedback.clickSoundCount, 0); expect(callbackCount, 0); await tester.longPress(find.text('X')); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 1); expect(feedback.clickSoundCount, 0); expect(callbackCount, 1); }); }); group('Feedback on iOS', () { testWidgets('forTap', (WidgetTester tester) async { await tester.pumpWidget(new Theme( data: new ThemeData(platform: TargetPlatform.iOS), child: new TestWidget( tapHandler: (BuildContext context) { return () => Feedback.forTap(context); }, ), )); await tester.tap(find.text('X')); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 0); expect(feedback.clickSoundCount, 0); }); testWidgets('forLongPress', (WidgetTester tester) async { await tester.pumpWidget(new Theme( data: new ThemeData(platform: TargetPlatform.iOS), child: new TestWidget( longPressHandler: (BuildContext context) { return () => Feedback.forLongPress(context); }, ), )); await tester.longPress(find.text('X')); await tester.pumpAndSettle(kWaitDuration); expect(feedback.hapticCount, 0); expect(feedback.clickSoundCount, 0); }); }); } class TestWidget extends StatelessWidget { TestWidget({ this.tapHandler: nullHandler, this.longPressHandler: nullHandler, }); final HandlerCreator tapHandler; final HandlerCreator longPressHandler; static VoidCallback nullHandler(BuildContext context) => null; @override Widget build(BuildContext context) { return new GestureDetector( onTap: tapHandler(context), onLongPress: longPressHandler(context), child: const Text('X'), ); } } typedef VoidCallback HandlerCreator(BuildContext context);