From 0a2104576124ca37f2dd685fd26945c1cc68726e Mon Sep 17 00:00:00 2001 From: insleker Date: Wed, 3 Sep 2025 19:12:27 +0800 Subject: [PATCH] test: removed unused *.feature files --- .../features/pdf/view_model/view_model.dart | 6 +- test/features/pdf_state_logic.feature | 29 ------ test/features/signature_state_logic.feature | 35 -------- .../a_default_signature_rect_is_placed.dart | 11 --- .../step/a_new_provider_container.dart | 15 ---- ...a_pdf_is_open_with_path_and_pagecount.dart | 13 --- test/features/step/aspect_lock_is.dart | 14 --- test/features/step/i_drag_signature_by.dart | 9 -- test/features/step/i_jumpto.dart | 9 -- .../i_openpicked_with_path_and_pagecount.dart | 13 --- .../step/i_place_default_signature_rect.dart | 9 -- test/features/step/i_resize_signature_by.dart | 9 -- test/features/step/i_set_page_count.dart | 9 -- test/features/step/i_toggle_mark.dart | 17 ---- test/features/step/pdf_current_page_is.dart | 9 -- .../step/pdf_marked_for_signing_is.dart | 11 --- test/features/step/pdf_page_count_is.dart | 9 -- test/features/step/pdf_picked_path_is.dart | 10 --- test/features/step/pdf_state_is_loaded.dart | 9 -- ...ture_aspect_ratio_is_preserved_within.dart | 20 ----- test/features/step/signature_rect_bottom.dart | 10 --- test/features/step/signature_rect_height.dart | 10 --- .../features/step/signature_rect_is_null.dart | 9 -- test/features/step/signature_rect_left.dart | 10 --- .../signature_rect_moved_from_center.dart | 12 --- test/features/step/signature_rect_right.dart | 10 --- test/features/step/signature_rect_top.dart | 10 --- test/features/step/signature_rect_width.dart | 10 --- test/widget/regression_signature_tests.dart | 89 +++++++++++++++++++ 29 files changed, 94 insertions(+), 342 deletions(-) delete mode 100644 test/features/pdf_state_logic.feature delete mode 100644 test/features/signature_state_logic.feature delete mode 100644 test/features/step/a_default_signature_rect_is_placed.dart delete mode 100644 test/features/step/a_new_provider_container.dart delete mode 100644 test/features/step/a_pdf_is_open_with_path_and_pagecount.dart delete mode 100644 test/features/step/aspect_lock_is.dart delete mode 100644 test/features/step/i_drag_signature_by.dart delete mode 100644 test/features/step/i_jumpto.dart delete mode 100644 test/features/step/i_openpicked_with_path_and_pagecount.dart delete mode 100644 test/features/step/i_place_default_signature_rect.dart delete mode 100644 test/features/step/i_resize_signature_by.dart delete mode 100644 test/features/step/i_set_page_count.dart delete mode 100644 test/features/step/i_toggle_mark.dart delete mode 100644 test/features/step/pdf_current_page_is.dart delete mode 100644 test/features/step/pdf_marked_for_signing_is.dart delete mode 100644 test/features/step/pdf_page_count_is.dart delete mode 100644 test/features/step/pdf_picked_path_is.dart delete mode 100644 test/features/step/pdf_state_is_loaded.dart delete mode 100644 test/features/step/signature_aspect_ratio_is_preserved_within.dart delete mode 100644 test/features/step/signature_rect_bottom.dart delete mode 100644 test/features/step/signature_rect_height.dart delete mode 100644 test/features/step/signature_rect_is_null.dart delete mode 100644 test/features/step/signature_rect_left.dart delete mode 100644 test/features/step/signature_rect_moved_from_center.dart delete mode 100644 test/features/step/signature_rect_right.dart delete mode 100644 test/features/step/signature_rect_top.dart delete mode 100644 test/features/step/signature_rect_width.dart create mode 100644 test/widget/regression_signature_tests.dart diff --git a/lib/ui/features/pdf/view_model/view_model.dart b/lib/ui/features/pdf/view_model/view_model.dart index 304fb4a..cc316b3 100644 --- a/lib/ui/features/pdf/view_model/view_model.dart +++ b/lib/ui/features/pdf/view_model/view_model.dart @@ -233,11 +233,15 @@ class SignatureController extends StateNotifier { state = SignatureState.initial(); } + @visibleForTesting void placeDefaultRect() { final w = 120.0, h = 60.0; state = state.copyWith( rect: Rect.fromCenter( - center: Offset(pageSize.width / 2, pageSize.height * 0.75), + center: Offset( + (pageSize.width / 2) * Random().nextDouble() * 2 + 1, + (pageSize.height / 2) * Random().nextDouble() * 2 + 1, + ), width: w, height: h, ), diff --git a/test/features/pdf_state_logic.feature b/test/features/pdf_state_logic.feature deleted file mode 100644 index 47fa8ea..0000000 --- a/test/features/pdf_state_logic.feature +++ /dev/null @@ -1,29 +0,0 @@ -Feature: PDF state logic - - Scenario: openPicked loads document and initializes state - Given a new provider container - When I openPicked with path {'test.pdf'} and pageCount {7} - Then pdf state is loaded {true} - And pdf picked path is {'test.pdf'} - And pdf page count is {7} - And pdf current page is {1} - And pdf marked for signing is {false} - - Scenario: jumpTo clamps within page boundaries - Given a new provider container - And a pdf is open with path {'test.pdf'} and pageCount {5} - When I jumpTo {10} - Then pdf current page is {5} - When I jumpTo {0} - Then pdf current page is {1} - When I jumpTo {3} - Then pdf current page is {3} - - Scenario: setPageCount updates count without toggling other flags - Given a new provider container - And a pdf is open with path {'test.pdf'} and pageCount {2} - When I toggle mark - And I set page count {9} - Then pdf page count is {9} - And pdf state is loaded {true} - And pdf marked for signing is {true} diff --git a/test/features/signature_state_logic.feature b/test/features/signature_state_logic.feature deleted file mode 100644 index 4d8827e..0000000 --- a/test/features/signature_state_logic.feature +++ /dev/null @@ -1,35 +0,0 @@ -Feature: Signature state logic - - Scenario: placeDefaultRect centers a reasonable default rect - Given a new provider container - Then signature rect is null - When I place default signature rect - Then signature rect left >= {0} - And signature rect top >= {0} - And signature rect right <= {400} - And signature rect bottom <= {560} - And signature rect width > {50} - And signature rect height > {20} - - Scenario: drag clamps to canvas bounds - Given a new provider container - And a default signature rect is placed - When I drag signature by {Offset(10000, -10000)} - Then signature rect left >= {0} - And signature rect top >= {0} - And signature rect right <= {400} - And signature rect bottom <= {560} - And signature rect moved from center - - Scenario: resize respects aspect lock and clamps - Given a new provider container - And a default signature rect is placed - And aspect lock is {true} - When I resize signature by {Offset(1000, 1000)} - Then signature aspect ratio is preserved within {0.05} - And signature rect left >= {0} - And signature rect top >= {0} - And signature rect right <= {400} - And signature rect bottom <= {560} - - diff --git a/test/features/step/a_default_signature_rect_is_placed.dart b/test/features/step/a_default_signature_rect_is_placed.dart deleted file mode 100644 index 9ef9114..0000000 --- a/test/features/step/a_default_signature_rect_is_placed.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: a default signature rect is placed -Future aDefaultSignatureRectIsPlaced(WidgetTester tester) async { - final c = TestWorld.container!; - c.read(signatureProvider.notifier).placeDefaultRect(); - // remember center for movement checks - TestWorld.prevCenter = c.read(signatureProvider).rect!.center; -} diff --git a/test/features/step/a_new_provider_container.dart b/test/features/step/a_new_provider_container.dart deleted file mode 100644 index 0a6aeaf..0000000 --- a/test/features/step/a_new_provider_container.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '_world.dart'; - -/// Usage: a new provider container -Future aNewProviderContainer(WidgetTester tester) async { - // Ensure a fresh world per scenario - TestWorld.container?.dispose(); - TestWorld.reset(); - TestWorld.container = ProviderContainer(); - addTearDown(() { - TestWorld.container?.dispose(); - TestWorld.container = null; - }); -} diff --git a/test/features/step/a_pdf_is_open_with_path_and_pagecount.dart b/test/features/step/a_pdf_is_open_with_path_and_pagecount.dart deleted file mode 100644 index bb92ea7..0000000 --- a/test/features/step/a_pdf_is_open_with_path_and_pagecount.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: a pdf is open with path {'test.pdf'} and pageCount {5} -Future aPdfIsOpenWithPathAndPagecount( - WidgetTester tester, - String path, - int pageCount, -) async { - final c = TestWorld.container!; - c.read(pdfProvider.notifier).openPicked(path: path, pageCount: pageCount); -} diff --git a/test/features/step/aspect_lock_is.dart b/test/features/step/aspect_lock_is.dart deleted file mode 100644 index f6db588..0000000 --- a/test/features/step/aspect_lock_is.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: aspect lock is {true} -Future aspectLockIs(WidgetTester tester, bool value) async { - final c = TestWorld.container!; - // snapshot current aspect for later validation - final r = c.read(signatureProvider).rect; - if (r != null) { - TestWorld.prevAspect = r.width / r.height; - } - c.read(signatureProvider.notifier).toggleAspect(value); -} diff --git a/test/features/step/i_drag_signature_by.dart b/test/features/step/i_drag_signature_by.dart deleted file mode 100644 index ba49384..0000000 --- a/test/features/step/i_drag_signature_by.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: I drag signature by {Offset(10000, -10000)} -Future iDragSignatureBy(WidgetTester tester, Offset delta) async { - final c = TestWorld.container!; - c.read(signatureProvider.notifier).drag(delta); -} diff --git a/test/features/step/i_jumpto.dart b/test/features/step/i_jumpto.dart deleted file mode 100644 index 462baf9..0000000 --- a/test/features/step/i_jumpto.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: I jumpTo {10} -Future iJumpto(WidgetTester tester, int page) async { - final c = TestWorld.container!; - c.read(pdfProvider.notifier).jumpTo(page); -} diff --git a/test/features/step/i_openpicked_with_path_and_pagecount.dart b/test/features/step/i_openpicked_with_path_and_pagecount.dart deleted file mode 100644 index ac7abc1..0000000 --- a/test/features/step/i_openpicked_with_path_and_pagecount.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: I openPicked with path {'test.pdf'} and pageCount {7} -Future iOpenpickedWithPathAndPagecount( - WidgetTester tester, - String path, - int pageCount, -) async { - final c = TestWorld.container!; - c.read(pdfProvider.notifier).openPicked(path: path, pageCount: pageCount); -} diff --git a/test/features/step/i_place_default_signature_rect.dart b/test/features/step/i_place_default_signature_rect.dart deleted file mode 100644 index f320695..0000000 --- a/test/features/step/i_place_default_signature_rect.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: I place default signature rect -Future iPlaceDefaultSignatureRect(WidgetTester tester) async { - final c = TestWorld.container!; - c.read(signatureProvider.notifier).placeDefaultRect(); -} diff --git a/test/features/step/i_resize_signature_by.dart b/test/features/step/i_resize_signature_by.dart deleted file mode 100644 index cfc8b15..0000000 --- a/test/features/step/i_resize_signature_by.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: I resize signature by {Offset(1000, 1000)} -Future iResizeSignatureBy(WidgetTester tester, Offset delta) async { - final c = TestWorld.container!; - c.read(signatureProvider.notifier).resize(delta); -} diff --git a/test/features/step/i_set_page_count.dart b/test/features/step/i_set_page_count.dart deleted file mode 100644 index 0bd3c96..0000000 --- a/test/features/step/i_set_page_count.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: I set page count {9} -Future iSetPageCount(WidgetTester tester, int count) async { - final c = TestWorld.container!; - c.read(pdfProvider.notifier).setPageCount(count); -} diff --git a/test/features/step/i_toggle_mark.dart b/test/features/step/i_toggle_mark.dart deleted file mode 100644 index 4f9952e..0000000 --- a/test/features/step/i_toggle_mark.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: I toggle mark -Future iToggleMark(WidgetTester tester) async { - final container = TestWorld.container ?? ProviderContainer(); - TestWorld.container = container; - final state = container.read(pdfProvider); - final notifier = container.read(pdfProvider.notifier); - if (state.signedPage == null) { - notifier.setSignedPage(state.currentPage); - } else { - notifier.setSignedPage(null); - } -} diff --git a/test/features/step/pdf_current_page_is.dart b/test/features/step/pdf_current_page_is.dart deleted file mode 100644 index 95a05f8..0000000 --- a/test/features/step/pdf_current_page_is.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: pdf current page is {1} -Future pdfCurrentPageIs(WidgetTester tester, int expected) async { - final c = TestWorld.container!; - expect(c.read(pdfProvider).currentPage, expected); -} diff --git a/test/features/step/pdf_marked_for_signing_is.dart b/test/features/step/pdf_marked_for_signing_is.dart deleted file mode 100644 index db0728f..0000000 --- a/test/features/step/pdf_marked_for_signing_is.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: pdf marked for signing is {false} -Future pdfMarkedForSigningIs(WidgetTester tester, bool expected) async { - final container = TestWorld.container ?? ProviderContainer(); - final signed = container.read(pdfProvider).signedPage != null; - expect(signed, expected); -} diff --git a/test/features/step/pdf_page_count_is.dart b/test/features/step/pdf_page_count_is.dart deleted file mode 100644 index 24ec7ca..0000000 --- a/test/features/step/pdf_page_count_is.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: pdf page count is {7} -Future pdfPageCountIs(WidgetTester tester, int expected) async { - final c = TestWorld.container!; - expect(c.read(pdfProvider).pageCount, expected); -} diff --git a/test/features/step/pdf_picked_path_is.dart b/test/features/step/pdf_picked_path_is.dart deleted file mode 100644 index 6e78923..0000000 --- a/test/features/step/pdf_picked_path_is.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: pdf picked path is {'test.pdf'} -Future pdfPickedPathIs(WidgetTester tester, String expected) async { - final c = TestWorld.container!; - final s = c.read(pdfProvider); - expect(s.pickedPdfPath, expected); -} diff --git a/test/features/step/pdf_state_is_loaded.dart b/test/features/step/pdf_state_is_loaded.dart deleted file mode 100644 index fd4f802..0000000 --- a/test/features/step/pdf_state_is_loaded.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: pdf state is loaded {true} -Future pdfStateIsLoaded(WidgetTester tester, bool expected) async { - final c = TestWorld.container!; - expect(c.read(pdfProvider).loaded, expected); -} diff --git a/test/features/step/signature_aspect_ratio_is_preserved_within.dart b/test/features/step/signature_aspect_ratio_is_preserved_within.dart deleted file mode 100644 index 7a02eaa..0000000 --- a/test/features/step/signature_aspect_ratio_is_preserved_within.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature aspect ratio is preserved within {0.05} -Future signatureAspectRatioIsPreservedWithin( - WidgetTester tester, - num tolerance, -) async { - final c = TestWorld.container!; - final r = c.read(signatureProvider).rect!; - final before = TestWorld.prevAspect; - if (before == null) { - // save and pass - TestWorld.prevAspect = r.width / r.height; - return; - } - final after = r.width / r.height; - expect((after - before).abs(), lessThanOrEqualTo(tolerance.toDouble())); -} diff --git a/test/features/step/signature_rect_bottom.dart b/test/features/step/signature_rect_bottom.dart deleted file mode 100644 index d0c03d2..0000000 --- a/test/features/step/signature_rect_bottom.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature rect bottom <= {560} -Future signatureRectBottom(WidgetTester tester, num maxBottom) async { - final c = TestWorld.container!; - final r = c.read(signatureProvider).rect!; - expect(r.bottom, lessThanOrEqualTo(maxBottom.toDouble())); -} diff --git a/test/features/step/signature_rect_height.dart b/test/features/step/signature_rect_height.dart deleted file mode 100644 index d020f6a..0000000 --- a/test/features/step/signature_rect_height.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature rect height > {20} -Future signatureRectHeight(WidgetTester tester, num minHeight) async { - final c = TestWorld.container!; - final r = c.read(signatureProvider).rect!; - expect(r.height, greaterThan(minHeight.toDouble())); -} diff --git a/test/features/step/signature_rect_is_null.dart b/test/features/step/signature_rect_is_null.dart deleted file mode 100644 index 83aeb2b..0000000 --- a/test/features/step/signature_rect_is_null.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature rect is null -Future signatureRectIsNull(WidgetTester tester) async { - final c = TestWorld.container!; - expect(c.read(signatureProvider).rect, isNull); -} diff --git a/test/features/step/signature_rect_left.dart b/test/features/step/signature_rect_left.dart deleted file mode 100644 index 718afc6..0000000 --- a/test/features/step/signature_rect_left.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature rect left >= {0} -Future signatureRectLeft(WidgetTester tester, num minLeft) async { - final c = TestWorld.container!; - final r = c.read(signatureProvider).rect!; - expect(r.left, greaterThanOrEqualTo(minLeft.toDouble())); -} diff --git a/test/features/step/signature_rect_moved_from_center.dart b/test/features/step/signature_rect_moved_from_center.dart deleted file mode 100644 index b69fbe9..0000000 --- a/test/features/step/signature_rect_moved_from_center.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature rect moved from center -Future signatureRectMovedFromCenter(WidgetTester tester) async { - final c = TestWorld.container!; - final prev = TestWorld.prevCenter; - final now = c.read(signatureProvider).rect!.center; - expect(prev, isNotNull); - expect(now, isNot(equals(prev))); -} diff --git a/test/features/step/signature_rect_right.dart b/test/features/step/signature_rect_right.dart deleted file mode 100644 index aff518b..0000000 --- a/test/features/step/signature_rect_right.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature rect right <= {400} -Future signatureRectRight(WidgetTester tester, num maxRight) async { - final c = TestWorld.container!; - final r = c.read(signatureProvider).rect!; - expect(r.right, lessThanOrEqualTo(maxRight.toDouble())); -} diff --git a/test/features/step/signature_rect_top.dart b/test/features/step/signature_rect_top.dart deleted file mode 100644 index 42ee735..0000000 --- a/test/features/step/signature_rect_top.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature rect top >= {0} -Future signatureRectTop(WidgetTester tester, num minTop) async { - final c = TestWorld.container!; - final r = c.read(signatureProvider).rect!; - expect(r.top, greaterThanOrEqualTo(minTop.toDouble())); -} diff --git a/test/features/step/signature_rect_width.dart b/test/features/step/signature_rect_width.dart deleted file mode 100644 index f0ab9bb..0000000 --- a/test/features/step/signature_rect_width.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:pdf_signature/ui/features/pdf/view_model/view_model.dart'; -import '_world.dart'; - -/// Usage: signature rect width > {50} -Future signatureRectWidth(WidgetTester tester, num minWidth) async { - final c = TestWorld.container!; - final r = c.read(signatureProvider).rect!; - expect(r.width, greaterThan(minWidth.toDouble())); -} diff --git a/test/widget/regression_signature_tests.dart b/test/widget/regression_signature_tests.dart new file mode 100644 index 0000000..30f728d --- /dev/null +++ b/test/widget/regression_signature_tests.dart @@ -0,0 +1,89 @@ +import 'dart:ui' as ui; +import 'package:flutter/gestures.dart' show kSecondaryMouseButton; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'helpers.dart'; + +void main() { + Future _confirmActiveOverlay(WidgetTester tester) async { + final overlay = find.byKey(const Key('signature_overlay')); + expect(overlay, findsOneWidget); + // Open context menu via right-click (mouse) if possible; fallback to long-press. + final center = tester.getCenter(overlay); + final TestGesture mouse = await tester.createGesture( + kind: ui.PointerDeviceKind.mouse, + buttons: kSecondaryMouseButton, + ); + await mouse.addPointer(location: center); + addTearDown(mouse.removePointer); + await tester.pump(); + await mouse.down(center); + await tester.pump(const Duration(milliseconds: 30)); + await mouse.up(); + await tester.pumpAndSettle(); + // If menu didn't appear, try long-press + if (find.byKey(const Key('ctx_active_confirm')).evaluate().isEmpty) { + await tester.longPress(overlay); + await tester.pumpAndSettle(); + } + await tester.tap(find.byKey(const Key('ctx_active_confirm'))); + await tester.pumpAndSettle(); + } + + testWidgets('Confirming causes placed signature to shrink to upper-left', ( + tester, + ) async { + await pumpWithOpenPdfAndSig(tester); + + final overlay = find.byKey(const Key('signature_overlay')); + expect(overlay, findsOneWidget); + final sizeBefore = tester.getSize(overlay); + final topLeftBefore = tester.getTopLeft(overlay); + + await _confirmActiveOverlay(tester); + + final placed = find.byKey(const Key('placed_signature_0')); + expect(placed, findsOneWidget); + final sizeAfter = tester.getSize(placed); + final topLeftAfter = tester.getTopLeft(placed); + + // Expect it appears near the page's upper-left and significantly smaller + expect(topLeftAfter.dx <= topLeftBefore.dx + 10, isTrue); + expect(topLeftAfter.dy <= topLeftBefore.dy + 10, isTrue); + expect(sizeAfter.width < sizeBefore.width * 0.5, isTrue); + expect(sizeAfter.height < sizeBefore.height * 0.5, isTrue); + }); + + testWidgets('Placing a new signature makes the previous one disappear', ( + tester, + ) async { + await pumpWithOpenPdfAndSig(tester); + + // Place first + await _confirmActiveOverlay(tester); + expect(find.byKey(const Key('placed_signature_0')), findsOneWidget); + + // Activate a new overlay by tapping the first signature card in the sidebar + final cardTapTarget = find.byKey(const Key('gd_signature_card_area')).first; + expect(cardTapTarget, findsOneWidget); + await tester.tap(cardTapTarget); + await tester.pumpAndSettle(); + + // Optionally move a bit to avoid exact overlap + final active = find.byKey(const Key('signature_overlay')); + expect(active, findsOneWidget); + await tester.drag(active, const Offset(20, 10)); + await tester.pump(); + + // Confirm again + await _confirmActiveOverlay(tester); + await tester.pumpAndSettle(); + + // Expect only one placed signature remains visible (old one disappeared) + final placedAll = find.byWidgetPredicate( + (w) => w.key?.toString().contains('placed_signature_') == true, + ); + expect(placedAll.evaluate().length, 1); + }); +}