From e76b7e7bc2e228b2f3d485eb7bc97336fab2edd0 Mon Sep 17 00:00:00 2001 From: fufesou Date: Mon, 14 Sep 2026 08:37:57 +0800 Subject: [PATCH] test: share cursor painting recorders --- flutter/test/cursor_paint_scale_test.dart | 27 +++++------------------ flutter/test/cursor_scroll_edge_test.dart | 24 +++++--------------- flutter/test/cursor_test_utils.dart | 16 ++++++++++++++ 3 files changed, 26 insertions(+), 41 deletions(-) diff --git a/flutter/test/cursor_paint_scale_test.dart b/flutter/test/cursor_paint_scale_test.dart index 857bdf968..bc1ed7c50 100644 --- a/flutter/test/cursor_paint_scale_test.dart +++ b/flutter/test/cursor_paint_scale_test.dart @@ -4,13 +4,14 @@ import 'dart:ui' as ui; import 'package:flutter/widgets.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/pages/remote_page.dart'; -import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/utils/image.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; +import 'cursor_test_utils.dart'; + const _hotspot = Offset(4, 9); const _remotePosition = Offset(100.25, 80.75); const _canvasOffset = Offset(15.125, -10.25); @@ -54,11 +55,6 @@ class _ImageModel extends ChangeNotifier implements ImageModel { dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); } -class _TextureModel extends Fake implements TextureModel { - @override - RxInt getTextureId(int display) => 0.obs; -} - class _Display extends Display { _Display(this.scale, double left) { x = left; @@ -90,7 +86,7 @@ class _FFI extends Fake implements FFI { @override final _Peer ffiModel = _Peer(); @override - final textureModel = _TextureModel(); + final textureModel = CursorTestTexture(); @override late CanvasModel canvasModel; } @@ -145,19 +141,6 @@ class _ScrollbarCanvasModel extends _CanvasModel { double get scrollY => _ffi.ffiModel.rect.height * scale > size.height ? 0.2 : 0; } -class _Canvas extends Fake implements Canvas { - double factor = 1; - Offset? position; - - @override - void scale(double sx, [double? sy]) => factor *= sx; - - @override - void drawImage(ui.Image image, Offset offset, Paint paint) { - position = offset * factor; - } -} - Future _paintCursor(WidgetTester tester, CanvasModel canvas, {double dpr = 2, bool zoom = true, (int, int) source = (48, 64), Offset position = _remotePosition, double density = 0}) async { @@ -257,7 +240,7 @@ void main() { var imageOrigin = texture ? tester.getTopLeft(find.byType(Texture).first) : _canvasOffset; if (!texture) { - final background = _Canvas(); + final background = CursorTestDraw(); ImagePainter( image: painter.image, x: _canvasOffset.dx / canvasScale, @@ -270,7 +253,7 @@ void main() { final hotspot = (Offset(painter.x, painter.y) + _hotspot) * scale; expect(hotspot.dx, closeTo(target.dx, 1e-9)); expect(hotspot.dy, closeTo(target.dy, 1e-9)); - final canvas = _Canvas(); + final canvas = CursorTestDraw(); painter.paint(canvas, _viewport); final position = canvas.position! + _hotspot * canvas.factor; expect(position.dx, closeTo(target.dx, 1e-9)); diff --git a/flutter/test/cursor_scroll_edge_test.dart b/flutter/test/cursor_scroll_edge_test.dart index 9a7f4f1aa..cf1921935 100644 --- a/flutter/test/cursor_scroll_edge_test.dart +++ b/flutter/test/cursor_scroll_edge_test.dart @@ -3,7 +3,6 @@ import 'dart:ui' as ui; import 'package:flutter/widgets.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/pages/remote_page.dart'; -import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/utils/image.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -12,6 +11,8 @@ import 'package:provider/provider.dart'; import 'package:uuid/uuid.dart'; import 'package:vector_math/vector_math.dart' show Vector2; +import 'cursor_test_utils.dart'; + const _viewport = Size(200, 160); const _hotspot = Offset(4, 9); const _scrollDeltas = [80.0, -20.0, 1000.0, 1000.0, -1000.0, -1000.0, 80.0, 0.0]; @@ -41,11 +42,6 @@ class _Image extends ImageModel { final bool useTextureRender; } -class _Texture extends Fake implements TextureModel { - @override - RxInt getTextureId(int display) => 0.obs; -} - class _ScrollCanvas extends CanvasModel { _ScrollCanvas(FFI ffi, String style, this.scrollStyle) : viewStyle = ViewStyle( @@ -117,17 +113,7 @@ class _FFI extends Fake implements FFI { @override late final CursorModel cursorModel; @override - final textureModel = _Texture(); -} - -class _Draw extends Fake implements Canvas { - double factor = 1; - Offset? position; - @override - void scale(double sx, [double? sy]) => factor *= sx; - @override - void drawImage(ui.Image image, Offset offset, Paint paint) => - position = offset * factor; + final textureModel = CursorTestTexture(); } void main() { @@ -250,7 +236,7 @@ void _expectAlignment(WidgetTester tester, FFI ffi, Finder videoWidget) { final cursorWidget = _paintOf(cursor.image!); final painter = tester.widget(cursorWidget).painter! as ImagePainter; - final output = _Draw(); + final output = CursorTestDraw(); painter.paint(output, ffi.canvasModel.size); final hotspot = tester.getTopLeft(cursorWidget) + output.position! + @@ -258,7 +244,7 @@ void _expectAlignment(WidgetTester tester, FFI ffi, Finder videoWidget) { var videoOrigin = tester.getTopLeft(videoWidget); final video = tester.widget(videoWidget); if (video is CustomPaint) { - final drawnVideo = _Draw(); + final drawnVideo = CursorTestDraw(); video.painter!.paint(drawnVideo, ffi.canvasModel.size); videoOrigin += drawnVideo.position!; } diff --git a/flutter/test/cursor_test_utils.dart b/flutter/test/cursor_test_utils.dart index cc281ee21..92c3fead5 100644 --- a/flutter/test/cursor_test_utils.dart +++ b/flutter/test/cursor_test_utils.dart @@ -3,6 +3,7 @@ import 'dart:ui' as ui; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_hbb/common.dart' as common; +import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:flutter_hbb/models/input_model.dart'; import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -109,3 +110,18 @@ img.Image decodeNativeCursorRaster(Map args) { order: img.ChannelOrder.bgra) : img.decodePng(bytes)!; } + +class CursorTestTexture extends Fake implements TextureModel { + @override + RxInt getTextureId(int display) => 0.obs; +} + +class CursorTestDraw extends Fake implements Canvas { + double factor = 1; + Offset? position; + @override + void scale(double sx, [double? sy]) => factor *= sx; + @override + void drawImage(ui.Image image, Offset offset, Paint paint) => + position = offset * factor; +}