// Author: fruit.com.cn import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:fruitshorts/pages/player/widgets/player_double_tap_hearts.dart'; void main() { testWidgets('should_show_three_develop_hearts_when_burst_starts', ( tester, ) async { await tester.pumpWidget( const MaterialApp( home: Scaffold(body: PlayerDoubleTapHeartBurst(onCompleted: _noop)), ), ); await tester.pump(const Duration(milliseconds: 200)); expect(find.byIcon(Icons.favorite_rounded), findsNWidgets(3)); expect(_size(tester, 0), 48); expect(_size(tester, 1), 36); expect(_size(tester, 2), 40); expect( tester .widgetList( find.descendant( of: find.byType(PlayerDoubleTapHeartBurst), matching: find.byType(Stack), ), ) .every((stack) => stack.clipBehavior == Clip.none), isTrue, ); }); testWidgets('develop heart burst completes after about 770ms', ( tester, ) async { var completed = false; var elapsedMs = 0; await tester.pumpWidget( MaterialApp( home: Scaffold( body: PlayerDoubleTapHeartBurst(onCompleted: () => completed = true), ), ), ); while (!completed && elapsedMs < 1200) { await tester.pump(const Duration(milliseconds: 16)); elapsedMs += 16; } expect(completed, isTrue); expect(elapsedMs, greaterThanOrEqualTo(752)); expect(elapsedMs, lessThanOrEqualTo(800)); }); } double _size(WidgetTester tester, int index) { return tester.widget(find.byKey(Key('double-tap-heart-$index'))).size!; } void _noop() {}