From a7d01e0306f65698f95061e48b2418c1186adb7e Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Mon, 26 Oct 2026 18:57:04 +0800 Subject: [PATCH] =?UTF-8?q?test(player):=20=E5=A2=9E=E5=8A=A0=E9=A3=98?= =?UTF-8?q?=E5=BF=83=E5=83=8F=E7=B4=A0=E5=AE=9A=E4=BD=8D=E5=9B=9E=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/player/player_hearts_pixels_test.dart | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/player/player_hearts_pixels_test.dart diff --git a/test/player/player_hearts_pixels_test.dart b/test/player/player_hearts_pixels_test.dart new file mode 100644 index 0000000..704086b --- /dev/null +++ b/test/player/player_hearts_pixels_test.dart @@ -0,0 +1,66 @@ +// 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('heart pixels start at origin and move upward', (tester) async { + tester.view.physicalSize = const Size(400, 800); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + + var completedCalls = 0; + const origin = Offset(300, 546); + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: Stack( + fit: StackFit.expand, + clipBehavior: Clip.none, + children: [ + Positioned.fill( + child: PlayerDoubleTapHeartBurst( + burstId: 91, + origin: origin, + onCompleted: () => completedCalls++, + ), + ), + ], + ), + ), + ), + ); + + final firstHeart = find.byKey(const Key('double-tap-heart-0')); + expect(firstHeart, findsOneWidget); + final firstSize = tester.getSize(firstHeart); + final initialCenter = tester.getCenter(firstHeart); + debugPrint( + '[heart-pixels] initial size=${firstSize.width}x${firstSize.height} ' + 'center=${initialCenter.dx},${initialCenter.dy}', + ); + expect(firstSize.width, closeTo(48, 1)); + expect(firstSize.height, closeTo(48, 1)); + expect(firstSize.width, greaterThan(20)); + expect((initialCenter - origin).distance, lessThanOrEqualTo(1)); + expect( + (tester.getTopLeft(find.byKey(const Key('heart-burst-elapsed-debug'))) - + const Offset(308, 556)) + .distance, + lessThanOrEqualTo(1), + ); + + await tester.pump(const Duration(milliseconds: 400)); + final midpoint = tester.getCenter(firstHeart); + debugPrint( + '[heart-pixels] after400ms center=${midpoint.dx},${midpoint.dy}', + ); + expect(midpoint.dy, lessThan(origin.dy - 40)); + expect((midpoint.dx - origin.dx).abs(), lessThanOrEqualTo(30)); + + await tester.pump(const Duration(milliseconds: 1200)); + expect(completedCalls, 1); + }); +}