From 5e4edee2ca6655dcefb06ba777fa892b10771f35 Mon Sep 17 00:00:00 2001 From: Juan Campuzano Date: Tue, 2 Sep 2025 15:12:57 -0500 Subject: [PATCH 1/5] feat: Add animation testing capabilities to golden capture --- .gitignore | 1 + README.md | 46 +++++ .../animations/animation_golden_test.dart | 193 ++++++++++++++++++ .../goldens/simple_fade_animation.png | Bin 0 -> 27697 bytes .../goldens/spinner_rotation_animation.png | Bin 0 -> 21672 bytes .../failures/manual_golden_isolatedDiff.png | Bin 0 -> 5972 bytes .../failures/manual_golden_maskedDiff.png | Bin 0 -> 46492 bytes .../failures/manual_golden_masterImage.png | Bin 0 -> 45612 bytes .../home/failures/manual_golden_testImage.png | Bin 0 -> 45849 bytes .../home/home_page_golden_test.dart | 10 +- lib/bc_golden_plugin.dart | 2 + lib/src/capture/golden_animation_capture.dart | 134 ++++++++++++ lib/src/capture/golden_screenshot.dart | 188 +++++++++-------- lib/src/config/golden_animation_config.dart | 82 ++++++++ lib/src/testkit/golden_testing_tools.dart | 88 +++++++- test/src/capture/golden_screenshot_test.dart | 133 ++++-------- .../config/golden_animation_config_test.dart | 142 +++++++++++++ .../testkit/golden_testing_tools_test.dart | 2 - 18 files changed, 827 insertions(+), 194 deletions(-) create mode 100644 example/test/src/presentation/animations/animation_golden_test.dart create mode 100644 example/test/src/presentation/animations/goldens/simple_fade_animation.png create mode 100644 example/test/src/presentation/animations/goldens/spinner_rotation_animation.png create mode 100644 example/test/src/presentation/home/failures/manual_golden_isolatedDiff.png create mode 100644 example/test/src/presentation/home/failures/manual_golden_maskedDiff.png create mode 100644 example/test/src/presentation/home/failures/manual_golden_masterImage.png create mode 100644 example/test/src/presentation/home/failures/manual_golden_testImage.png create mode 100644 lib/src/capture/golden_animation_capture.dart create mode 100644 lib/src/config/golden_animation_config.dart create mode 100644 test/src/config/golden_animation_config_test.dart diff --git a/.gitignore b/.gitignore index e6fe372..57a4a36 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ migrate_working_dir/ /pubspec.lock /coverage /.vscode/ +**/coverage/ # Web related lib/generated_plugin_registrant.dart diff --git a/README.md b/README.md index 2f6cd3b..91114ee 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,52 @@ The `GoldenCaptureConfig` class allows you to customize how multiple screenshots - `maxScreensPerRow`: Maximum screenshots per row (for grid layout) - `device`: Optional device configuration +### Animation Testing 🎬 + +For testing animations at specific timestamps, use `BcGoldenCapture.animation`: + +```dart +BcGoldenCapture.animation( + 'Button scale animation', + AnimatedButton(), + [ + GoldenAnimationStep( + timestamp: Duration.zero, + frameName: 'start', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 150), + frameName: 'scaled', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 300), + frameName: 'end', + ), + ], + GoldenAnimationConfig( + testName: 'button_animation', + totalDuration: Duration(milliseconds: 300), + animationSteps: [...], // Same steps as above + layoutType: CaptureLayoutType.horizontal, + showTimelineLabels: true, + ), + animationSetup: (tester) async { + // Trigger the animation + await tester.tap(find.byType(AnimatedButton)); + await tester.pump(); + }, +); +``` + +The animation testing feature captures frames at specific moments in your animation timeline, creating a comprehensive visual test that shows the animation's progression. This is particularly useful for: + +- **UI Transitions**: Validating smooth transitions between states +- **Loading Animations**: Ensuring consistent spinner or progress animations +- **Gesture Animations**: Testing animations triggered by user interactions +- **Complex Animations**: Multi-step animations with precise timing requirements + +For detailed documentation on animation testing, see [Animation Testing Guide](doc/animation_testing.md). + ## bcGoldenTest (Legacy) 🏗 The is a legacy function that is still supported but deprecated. For new tests, please use `BcGoldenCapture.single` instead. This function is default tagged with "golden" and also has additional features for the tests, see the code below: diff --git a/example/test/src/presentation/animations/animation_golden_test.dart b/example/test/src/presentation/animations/animation_golden_test.dart new file mode 100644 index 0000000..2beacf9 --- /dev/null +++ b/example/test/src/presentation/animations/animation_golden_test.dart @@ -0,0 +1,193 @@ +import 'package:bc_golden_plugin/bc_golden_plugin.dart'; +import 'package:flutter/material.dart'; + +void main() { + // Test de ejemplo simple para demostrar la funcionalidad + BcGoldenCapture.animation( + 'Simple fade animation test', + const SimpleFadeAnimation(), + const [ + GoldenAnimationStep( + timestamp: Duration.zero, + frameName: 'start_invisible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 290), + frameName: 'half_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 300), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 400), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 500), + frameName: 'fully_visible', + ), + ], + GoldenAnimationConfig( + testName: 'simple_fade', + totalDuration: const Duration(milliseconds: 500), + animationSteps: const [ + GoldenAnimationStep( + timestamp: Duration.zero, + frameName: 'start_invisible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 290), + frameName: 'half_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 300), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 400), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 500), + frameName: 'fully_visible', + ), + ], + layoutType: CaptureLayoutType.horizontal, + spacing: 20.0, + showTimelineLabels: true, + device: GoldenDeviceData.iPhone13, + ), + ); + + BcGoldenCapture.animation( + 'Loading spinner rotation', + const CircularProgressIndicator(), + const [ + GoldenAnimationStep( + timestamp: Duration.zero, + frameName: '0_degrees', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 250), + frameName: '90_degrees', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 500), + frameName: '180_degrees', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 750), + frameName: '270_degrees', + ), + ], + const GoldenAnimationConfig( + testName: 'spinner_rotation', + totalDuration: Duration(milliseconds: 1000), + animationSteps: [ + GoldenAnimationStep( + timestamp: Duration.zero, + frameName: '0_degrees', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 250), + frameName: '90_degrees', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 500), + frameName: '180_degrees', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 750), + frameName: '270_degrees', + ), + ], // Mismos pasos + layoutType: CaptureLayoutType.grid, + maxScreensPerRow: 2, + ), + ); +} + +/// Widget de ejemplo simple con animación de fade +class SimpleFadeAnimation extends StatefulWidget { + const SimpleFadeAnimation({super.key}); + + @override + State createState() => _SimpleFadeAnimationState(); +} + +class _SimpleFadeAnimationState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _fadeAnimation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + duration: const Duration(milliseconds: 500), + vsync: this, + ); + + _fadeAnimation = Tween( + begin: 0.0, + end: 1.0, + ).animate(_controller); + + // Iniciar la animación automáticamente + WidgetsBinding.instance.addPostFrameCallback((_) { + _controller.forward(); + }); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + backgroundColor: Colors.white, + body: Center( + child: AnimatedBuilder( + animation: _fadeAnimation, + builder: (context, child) { + return Opacity( + opacity: _fadeAnimation.value, + child: Container( + width: 200, + height: 100, + decoration: BoxDecoration( + color: Colors.blue, + borderRadius: BorderRadius.circular(12), + boxShadow: [ + BoxShadow( + color: Colors.grey.withValues(alpha: 0.3), + spreadRadius: 2, + blurRadius: 8, + offset: const Offset(0, 4), + ), + ], + ), + child: const Center( + child: Text( + 'Fade Animation', + style: TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ); + }, + ), + ), + ), + ); + } +} diff --git a/example/test/src/presentation/animations/goldens/simple_fade_animation.png b/example/test/src/presentation/animations/goldens/simple_fade_animation.png new file mode 100644 index 0000000000000000000000000000000000000000..a37edc7801b30d37d3d7cd39fd5803f2a1ae1e39 GIT binary patch literal 27697 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

4i_P{;WlOZ&&|Aq>Bo)(6F#dXGvP( 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 literal 0 HcmV?d00001 diff --git a/example/test/src/presentation/home/failures/manual_golden_masterImage.png b/example/test/src/presentation/home/failures/manual_golden_masterImage.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb3c9cca2bbbb924914e896d60d4738719fa436 GIT binary patch literal 45612 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 X?_1~M^W*SB+=dbi%?*n5+^_r_)PPpi literal 0 HcmV?d00001 diff --git a/example/test/src/presentation/home/home_page_golden_test.dart b/example/test/src/presentation/home/home_page_golden_test.dart index 9316ec3..a4d11f1 100644 --- a/example/test/src/presentation/home/home_page_golden_test.dart +++ b/example/test/src/presentation/home/home_page_golden_test.dart @@ -64,10 +64,8 @@ void main() { ), ); - testWidgets('Manual golden test', (tester) async { + BcGoldenCapture.single('Manual golden test', (tester) async { await tester.runAsync(() async { - GoldenScreenshot screenshotter = GoldenScreenshot(); - tester.configureWindow( GoldenDeviceData.iPhone13, ); @@ -81,7 +79,7 @@ void main() { await tester.pumpAndSettle(); - await screenshotter.captureScreenshot(); + await tester.captureGoldenScreenshot(); await tester.tap( find.byKey( @@ -91,9 +89,9 @@ void main() { await tester.pumpAndSettle(); - await screenshotter.captureScreenshot(); + await tester.captureGoldenScreenshot(); - final combinedScreenshot = await screenshotter.combineScreenshots( + final combinedScreenshot = await tester.combineGoldenScreenshots( GoldenCaptureConfig( testName: 'manual_golden', device: GoldenDeviceData.iPhone13, diff --git a/lib/bc_golden_plugin.dart b/lib/bc_golden_plugin.dart index c38764b..7cb4ff7 100644 --- a/lib/bc_golden_plugin.dart +++ b/lib/bc_golden_plugin.dart @@ -5,8 +5,10 @@ library bc_golden_plugin; export 'package:logger/src/log_level.dart'; +export 'src/capture/golden_animation_capture.dart'; export 'src/capture/golden_screenshot.dart'; export 'src/config/bc_golden_configuration.dart'; +export 'src/config/golden_animation_config.dart'; export 'src/config/golden_capture_config.dart'; export 'src/config/golden_device_data.dart'; export 'src/config/window_configuration.dart'; diff --git a/lib/src/capture/golden_animation_capture.dart b/lib/src/capture/golden_animation_capture.dart new file mode 100644 index 0000000..1932e71 --- /dev/null +++ b/lib/src/capture/golden_animation_capture.dart @@ -0,0 +1,134 @@ +// ignore_for_file: avoid-ignoring-return-values, avoid-non-null-assertion + +import 'dart:typed_data'; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../config/golden_animation_config.dart'; +import '../helpers/logger.dart'; +import 'golden_screenshot.dart'; + +/// ## GoldenAnimationCapture +/// Extension on WidgetTester for capturing golden tests of Flutter animations. +/// +/// This extension provides functionality to capture multiple frames of an animation +/// at specific timestamps, creating a comprehensive visual test that shows +/// the animation's progression over time. +/// +/// ## Usage +/// ```dart +/// await tester.captureAnimation( +/// widget: MyAnimatedWidget(), +/// config: GoldenAnimationConfig( +/// testName: 'button_bounce_animation', +/// totalDuration: Duration(milliseconds: 500), +/// animationSteps: [ +/// GoldenAnimationStep( +/// timestamp: Duration(milliseconds: 0), +/// frameName: 'start', +/// ), +/// GoldenAnimationStep( +/// timestamp: Duration(milliseconds: 250), +/// frameName: 'peak', +/// ), +/// GoldenAnimationStep( +/// timestamp: Duration(milliseconds: 500), +/// frameName: 'end', +/// ), +/// ], +/// ), +/// animationSetup: (tester) async { +/// // Optional setup code +/// }, +/// ); +/// ``` +extension GoldenAnimationCapture on WidgetTester { + /// Captures an animation by taking screenshots at specified timestamps. + /// + /// This method pumps the widget, starts the animation, and captures frames + /// at the timestamps defined in the configuration. + /// + /// * [widget] The animated widget to test. + /// * [config] Configuration containing animation steps and settings. + /// * [animationSetup] Optional function to set up the animation before starting. + /// + /// Returns the combined image containing all captured frames. + Future captureAnimation({ + required Widget widget, + required GoldenAnimationConfig config, + Future Function(WidgetTester)? animationSetup, + }) async { + if (!config.isValid) { + throw ArgumentError( + 'Animation configuration is invalid. All steps must be within totalDuration.', + ); + } + + logDebug('[animation] Starting animation capture for: ${config.testName}'); + logDebug( + '[animation] Total duration: ${config.totalDuration.inMilliseconds}ms', + ); + logDebug('[animation] Steps count: ${config.animationSteps.length}'); + + // Clear any previous captures + clearGoldenScreenshots(); + + // Pump the widget + await pumpWidget(widget); + + // Execute animation setup if provided + if (animationSetup != null) { + await animationSetup(this); + } + + // Sort steps by timestamp to ensure proper order + final sortedSteps = config.sortedSteps; + + Duration previousTimestamp = Duration.zero; + + for (int i = 0; i < sortedSteps.length; i++) { + final step = sortedSteps[i]; + final timeDiff = step.timestamp - previousTimestamp; + + logDebug( + '[animation] Capturing frame at ${step.timestamp.inMilliseconds}ms: ${step.frameName}', + ); + + // Pump to the specific timestamp + if (timeDiff > Duration.zero) { + await pump(timeDiff); + } + + // Execute setup action for this step if provided + if (step.setupAction != null) { + await step.setupAction!(this); + } + + // Capture the frame using the extension + await captureGoldenScreenshot(); + + // Execute verification action for this step if provided + if (step.verifyAction != null) { + await step.verifyAction!(this); + } + + previousTimestamp = step.timestamp; + } + + logDebug('[animation] Combining ${goldenScreenshots.length} frames'); + + // Create step names for the combined image + final stepNames = sortedSteps.map((step) => step.frameName).toList(); + + // Combine all captured frames into a single image using the extension + final combinedImage = await combineGoldenScreenshots( + config, + stepNames, + ); + + logDebug('[animation] Animation capture completed successfully'); + + return combinedImage; + } +} diff --git a/lib/src/capture/golden_screenshot.dart b/lib/src/capture/golden_screenshot.dart index 840f7f8..318a7ab 100644 --- a/lib/src/capture/golden_screenshot.dart +++ b/lib/src/capture/golden_screenshot.dart @@ -1,38 +1,29 @@ -/// A class that handles capturing and managing golden screenshots. +/// An extension on WidgetTester that handles capturing and managing golden screenshots. /// -/// This class provides functionality to capture screenshots, add them to a collection, +/// This extension provides functionality to capture screenshots, add them to a collection, /// crop images, and combine multiple screenshots into a single image. It also includes /// methods for calculating canvas dimensions based on the layout configuration and /// positioning images on the canvas. /// /// ## Usage -/// To use the `GoldenScreenshot` class, create an instance and call its methods -/// to capture and manage screenshots as needed. +/// To use the `GoldenScreenshot` extension, call its methods directly on a WidgetTester +/// instance within your tests. /// /// ### Example /// ```dart -/// final goldenScreenshot = GoldenScreenshot(); -/// final screenshot = await goldenScreenshot.captureScreenshot(); +/// testWidgets('My golden test', (tester) async { +/// await tester.captureGoldenScreenshot(); /// -/// goldenScreenshot.add(screenshot); -/// -/// final combinedImage = await goldenScreenshot.combineScreenshots( -/// config, -/// stepNames, -/// ); +/// final combinedImage = await tester.combineGoldenScreenshots( +/// config, +/// stepNames, +/// ); +/// }); /// ``` /// /// ## Methods -/// - `add(Uint8List screenshot)`: Adds a screenshot to the collection. -/// - `List get screenshots`: Retrieves the list of captured screenshots. -/// - `Future captureScreenshot()`: Captures a screenshot of the current widget. -/// - `Future combineScreenshots(List screenshots, GoldenCaptureConfig config, List stepNames)`: Combines multiple screenshots into a single image. -/// -/// ## Private Methods -/// - `Future _cropImage(ui.Image image, Offset topLeft, Size size)`: Crops the given image to the specified size. -/// - `Future _decodeImage(Uint8List bytes)`: Decodes the image from the provided byte data. -/// - `Size _calculateCanvasDimensions(int screenCount, double screenWidth, double screenHeight, GoldenCaptureConfig config)`: Calculates the dimensions of the canvas based on the number of screens and layout configuration. -/// - `Offset _calculateImagePosition(int index, double screenWidth, double screenHeight, GoldenCaptureConfig config)`: Calculates the position of an image on the canvas based on its index and layout configuration. +/// - `Future captureGoldenScreenshot()`: Captures a screenshot of the current widget and returns it. +/// - `Future combineGoldenScreenshots(GoldenCaptureConfig config, List stepNames)`: Combines multiple screenshots into a single image. library; import 'dart:async'; @@ -47,12 +38,16 @@ import 'package:flutter_test/flutter_test.dart'; import '../config/golden_capture_config.dart'; import '../helpers/logger.dart'; -class GoldenScreenshot { - final _screenshots = []; +// Global storage for screenshots per test session +final Map> _screenshotStorage = {}; - List get screenshots => _screenshots; +extension GoldenScreenshot on WidgetTester { + /// Gets the list of captured screenshots for this tester instance. + List get goldenScreenshots => _screenshotStorage[this] ?? []; - Future captureScreenshot() async { + /// Captures a screenshot of the current widget and adds it to the collection. + /// Returns the captured screenshot as Uint8List. + Future captureGoldenScreenshot() async { final RenderRepaintBoundary boundary = find .byElementPredicate( (element) => element.renderObject is RenderRepaintBoundary, @@ -69,7 +64,7 @@ class GoldenScreenshot { '[flows][captureScreenshot] Screenshot captured, converting to bytes...', ); - final ui.Image croppedImage = await _cropImage( + final ui.Image croppedImage = await _cropImageToSize( image, Offset.zero, Size( @@ -97,71 +92,27 @@ class GoldenScreenshot { logDebug('[flows][captureScreenshot] Screenshot converted to bytes.'); - screenshots.add( - byteData.buffer.asUint8List(), - ); - } - - Future _cropImage( - ui.Image image, - Offset topLeft, - Size size, - ) async { - final top = topLeft.dy.round(); - final left = topLeft.dx.round(); - final width = size.width.round(); - final height = size.height.round(); - - logDebug('[flows][_cropImage] Cropping image: ' - 'top: $top, left: $left, width: $width, height: $height'); - - final byteData = await image.toByteData(format: ui.ImageByteFormat.rawRgba); - if (byteData == null) { - throw Exception('Failed to get byte data from image'); - } + final screenshot = byteData.buffer.asUint8List(); - const bytesPerPixel = 4; - - final originalBytes = byteData.buffer.asUint8List(); - final originalWidth = image.width; + // Initialize the list if it doesn't exist + _screenshotStorage[this] ??= []; + _screenshotStorage[this]!.add(screenshot); - final croppedBytes = Uint8List(width * height * bytesPerPixel); - - logDebug('[flows][_cropImage] Creating cropped bytes buffer: ' - '${croppedBytes.length} bytes'); - - for (int row = 0; row < height; row++) { - final srcStart = ((top + row) * originalWidth + left) * bytesPerPixel; - final destStart = row * width * bytesPerPixel; - croppedBytes.setRange( - destStart, - destStart + width * bytesPerPixel, - originalBytes, - srcStart, - ); - } - - logDebug('[flows][_cropImage] Cropped bytes created successfully.'); - - final completer = Completer(); - - ui.decodeImageFromPixels( - croppedBytes, - width, - height, - ui.PixelFormat.rgba8888, - completer.complete as ui.ImageDecoderCallback, - ); - - logDebug('[flows][_cropImage] Decoding cropped image from pixels...'); + return screenshot; + } - return completer.future; + /// Clears all captured screenshots for this tester instance. + void clearGoldenScreenshots() { + _screenshotStorage[this]?.clear(); } - Future combineScreenshots( + /// Combines multiple screenshots into a single image. + Future combineGoldenScreenshots( GoldenCaptureConfig config, List stepNames, ) async { + final screenshots = goldenScreenshots; + logDebug( '[flows][combineScreenshots] Starting combineScreenshots with ${screenshots.length} screenshots', ); @@ -176,7 +127,7 @@ class GoldenScreenshot { '[flows][combineScreenshots] Decoding first image to get dimensions...', ); final firstImage = - await _decodeImage(screenshots.firstOrNull ?? Uint8List(0)); + await _decodeImageBytes(screenshots.firstOrNull ?? Uint8List(0)); final screenWidth = firstImage.width.toDouble(); final screenHeight = firstImage.height.toDouble(); @@ -228,7 +179,7 @@ class GoldenScreenshot { ); try { - final image = await _decodeImage(screenshots[index]); + final image = await _decodeImageBytes(screenshots[index]); final position = _calculateImagePosition( index, screenWidth * scaleFactor, @@ -312,13 +263,67 @@ class GoldenScreenshot { } } - Future _decodeImage(Uint8List bytes) async { + /// Crops an image to the specified dimensions. + Future _cropImageToSize( + ui.Image image, + Offset topLeft, + Size size, + ) async { + final top = topLeft.dy.round(); + final left = topLeft.dx.round(); + final width = size.width.round(); + final height = size.height.round(); + + logDebug('[flows][_cropImage] Cropping image: ' + 'top: $top, left: $left, width: $width, height: $height'); + + final byteData = await image.toByteData(format: ui.ImageByteFormat.rawRgba); + if (byteData == null) { + throw Exception('Failed to get byte data from image'); + } + + const bytesPerPixel = 4; + final originalBytes = byteData.buffer.asUint8List(); + final originalWidth = image.width; + final croppedBytes = Uint8List(width * height * bytesPerPixel); + + logDebug('[flows][_cropImage] Creating cropped bytes buffer: ' + '${croppedBytes.length} bytes'); + + for (int row = 0; row < height; row++) { + final srcStart = ((top + row) * originalWidth + left) * bytesPerPixel; + final destStart = row * width * bytesPerPixel; + croppedBytes.setRange( + destStart, + destStart + width * bytesPerPixel, + originalBytes, + srcStart, + ); + } + + logDebug('[flows][_cropImage] Cropped bytes created successfully.'); + + final completer = Completer(); + ui.decodeImageFromPixels( + croppedBytes, + width, + height, + ui.PixelFormat.rgba8888, + completer.complete as ui.ImageDecoderCallback, + ); + + logDebug('[flows][_cropImage] Decoding cropped image from pixels...'); + return completer.future; + } + + /// Decodes an image from byte data. + Future _decodeImageBytes(Uint8List bytes) async { final codec = await ui.instantiateImageCodec(bytes); final frame = await codec.getNextFrame(); - return frame.image; } + /// Calculates the dimensions of the canvas based on layout configuration. Size _calculateCanvasDimensions( int screenCount, double screenWidth, @@ -351,6 +356,7 @@ class GoldenScreenshot { } } + /// Calculates the position of an image on the canvas. Offset _calculateImagePosition( int index, double screenWidth, @@ -383,6 +389,7 @@ class GoldenScreenshot { } } + /// Draws the step title on the canvas. void _drawStepTitle( Canvas canvas, String title, @@ -408,7 +415,7 @@ class GoldenScreenshot { textPainter.layout(maxWidth: screenWidth); - // Fondo para el texto + // Background for the text canvas.drawRect( Rect.fromLTWH( position.dx, @@ -419,7 +426,7 @@ class GoldenScreenshot { Paint()..color = Colors.grey.shade100, ); - // Texto + // Text textPainter.paint( canvas, Offset( @@ -431,6 +438,7 @@ class GoldenScreenshot { textPainter.dispose(); } + /// Draws a border around the screenshot. void _drawBorder( Canvas canvas, Offset position, diff --git a/lib/src/config/golden_animation_config.dart b/lib/src/config/golden_animation_config.dart new file mode 100644 index 0000000..358b89b --- /dev/null +++ b/lib/src/config/golden_animation_config.dart @@ -0,0 +1,82 @@ +// ignore_for_file: prefer-match-file-name +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'golden_capture_config.dart'; + +/// ## GoldenAnimationStep +/// Represents a specific frame in an animation timeline to be captured. +/// +/// This class defines when to capture a frame during an animation and allows +/// for optional setup and verification actions at that specific timestamp. +/// +/// * [timestamp] The exact time in the animation when this frame should be captured. +/// * [frameName] A descriptive name for this frame (e.g., "start", "peak", "end"). +/// * [setupAction] Optional function to execute before capturing this frame. +/// * [verifyAction] Optional function to verify the state after capturing this frame. +/// +/// {@category Configuration} +class GoldenAnimationStep { + const GoldenAnimationStep({ + required this.timestamp, + required this.frameName, + this.setupAction, + this.verifyAction, + }); + + final Duration timestamp; + final String frameName; + final Future Function(WidgetTester)? setupAction; + final Future Function(WidgetTester)? verifyAction; +} + +/// ## GoldenAnimationConfig +/// Configuration class for capturing golden tests of animations. +/// +/// This class extends `GoldenCaptureConfig` to provide animation-specific +/// configuration options including timeline settings and frame capture details. +/// +/// * [testName] The name of the test, used to identify the golden file. +/// * [totalDuration] The total duration of the animation to be tested. +/// * [animationSteps] List of specific frames to capture during the animation. +/// * [showTimelineLabels] Whether to display timestamp labels on the combined image. +/// * [timelineColor] Color for the timeline visualization in the golden image. +/// * [layoutType] How to arrange the captured frames (vertical, horizontal, grid). +/// * [maxScreensPerRow] Maximum frames per row when using grid layout. +/// * [spacing] Space between frames in the combined image. +/// * [device] Optional device configuration for consistent rendering. +/// +/// {@category Configuration} +class GoldenAnimationConfig extends GoldenCaptureConfig { + const GoldenAnimationConfig({ + required super.testName, + required this.totalDuration, + required this.animationSteps, + this.showTimelineLabels = true, + this.timelineColor = Colors.blue, + super.layoutType = CaptureLayoutType.horizontal, + super.maxScreensPerRow = 5, + super.spacing = 24.0, + super.device, + }); + + final Duration totalDuration; + final List animationSteps; + final bool showTimelineLabels; + final Color timelineColor; + + /// Validates that all animation steps are within the total duration. + bool get isValid { + return animationSteps.every( + (step) => step.timestamp <= totalDuration, + ); + } + + /// Gets the animation steps sorted by timestamp. + List get sortedSteps { + final steps = List.from(animationSteps); + steps.sort((a, b) => a.timestamp.compareTo(b.timestamp)); + + return steps; + } +} diff --git a/lib/src/testkit/golden_testing_tools.dart b/lib/src/testkit/golden_testing_tools.dart index 863940a..ac2ebfe 100644 --- a/lib/src/testkit/golden_testing_tools.dart +++ b/lib/src/testkit/golden_testing_tools.dart @@ -5,6 +5,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:logger/logger.dart'; import 'package:meta/meta.dart'; +import '../capture/golden_animation_capture.dart'; +import '../config/golden_animation_config.dart'; import '../config/golden_capture_config.dart'; import '../helpers/helpers.dart'; import '../helpers/logger.dart'; @@ -89,7 +91,6 @@ class BcGoldenCapture { Level logLevel = Level.off, bool shouldUseRealShadows = true, }) { - final GoldenScreenshot screenshotter = GoldenScreenshot(); setLogLevel(logLevel); testWidgets(description, (tester) async { @@ -146,7 +147,7 @@ class BcGoldenCapture { ); await tester.runAsync(() async { - await screenshotter.captureScreenshot(); + await tester.captureGoldenScreenshot(); logDebug( '[flows][multiple] ✓ Captured screenshot for step ${index + 1}/${steps.length}: ${step.stepName}', ); @@ -159,7 +160,7 @@ class BcGoldenCapture { } await tester.runAsync(() async { - final combinedImage = await screenshotter.combineScreenshots( + final combinedImage = await tester.combineGoldenScreenshots( config, steps.map((s) => s.stepName).toList(), ); @@ -178,6 +179,87 @@ class BcGoldenCapture { }); }); } + + /// ## animation + /// Function to capture golden tests of animations at specific timestamps. + /// This function is tagged with 'golden'. + /// + /// Creates a comprehensive visual test that shows an animation's progression + /// by capturing frames at specified timestamps and combining them into a single image. + /// + /// - [description] A brief description of the animation test. + /// - [widget] The animated widget to test. + /// - [steps] List of animation steps defining when to capture frames. + /// - [config] Configuration for the animation capture including layout and timing. + /// - [animationSetup] Optional function to set up the animation before starting. + /// - [shouldUseRealShadows] Whether to render shadows or not. + /// - [logLevel] The log level for the test, defaulting to `Level.off`. + @isTest + static void animation( + String description, + Widget widget, + List steps, + GoldenAnimationConfig config, { + Future Function(WidgetTester)? animationSetup, + bool shouldUseRealShadows = true, + Level logLevel = Level.off, + }) { + setLogLevel(logLevel); + + testWidgets( + description, + (widgetTester) async { + //ignore: always_declare_return_types + body() async { + logDebug('[golden][animation] Starting animation test: $description'); + + if (steps.isEmpty) { + throw ArgumentError('Animation steps cannot be empty'); + } + + if (!config.isValid) { + throw ArgumentError( + 'Animation configuration is invalid. All steps must be within totalDuration.', + ); + } + + final initialDebugDisableShadowsValue = debugDisableShadows; + debugDisableShadows = !shouldUseRealShadows; + + try { + logDebug('[golden][animation] Setting up animation capture...'); + + final combinedImage = await widgetTester.captureAnimation( + widget: TestBase.appGoldenTest( + widget: widget, + key: GlobalKey(), + ), + config: config, + animationSetup: animationSetup, + ); + + logDebug('[golden][animation] Comparing with golden file...'); + final testPath = + (goldenFileComparator as LocalFileComparator).basedir.path; + await localFileComparator(testPath); + + await expectLater( + combinedImage, + matchesGoldenFile('goldens/${config.testName}_animation.png'), + ); + + logDebug( + '[golden][animation] ✓ Animation test completed: $description'); + } finally { + debugDisableShadows = initialDebugDisableShadowsValue; + } + } + + await widgetTester.runAsync(body); + }, + tags: ['golden'], + ); + } } /// ## bcGoldenTest diff --git a/test/src/capture/golden_screenshot_test.dart b/test/src/capture/golden_screenshot_test.dart index 93367a5..686c314 100644 --- a/test/src/capture/golden_screenshot_test.dart +++ b/test/src/capture/golden_screenshot_test.dart @@ -14,79 +14,45 @@ void main() { return frame.image; } - group('GoldenScreenshot.add', () { - test('add valid screenshots and rejects empty ones', () { - final goldenScreenshot = GoldenScreenshot(); - - expect(goldenScreenshot.screenshots, isEmpty); - - expect(goldenScreenshot.screenshots, isA>()); - }); - }); + Widget createColorWidget(Color color, Size size) { + return Directionality( + textDirection: TextDirection.ltr, + child: Align( + alignment: Alignment.topLeft, + child: RepaintBoundary( + child: SizedBox( + width: size.width, + height: size.height, + child: ColoredBox(color: color), + ), + ), + ), + ); + } - group('GoldenScreenshot.captureScreenshot', () { + group('GoldenScreenshot extension', () { testWidgets( 'captures a PNG image from RepaintBoundary widget.', (tester) async { await tester.runAsync(() async { - final goldenScreenshot = GoldenScreenshot(); - const size = Size(120, 80); - await tester.pumpWidget( - Directionality( - textDirection: TextDirection.ltr, - child: Align( - alignment: Alignment.topLeft, - child: RepaintBoundary( - child: SizedBox( - width: size.width, - height: size.height, - child: const ColoredBox(color: Colors.blue), - ), - ), - ), - ), - ); - + await tester.pumpWidget(createColorWidget(Colors.blue, size)); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); - - expect(goldenScreenshot.screenshots, hasLength(1)); + final screenshot = await tester.captureGoldenScreenshot(); - final bytes = goldenScreenshot.screenshots.first; - expect(bytes, isNotEmpty); + expect(screenshot, isNotEmpty); - final img = await decode(bytes); + final img = await decode(screenshot); expect(img.width, equals(size.width.toInt())); expect(img.height, equals(size.height.toInt())); img.dispose(); }); }, ); - }); - - group('GoldenScreenshot.combineScreenshots', () { - Widget createColorWidget(Color color, Size size) { - return Directionality( - textDirection: TextDirection.ltr, - child: Align( - alignment: Alignment.topLeft, - child: RepaintBoundary( - child: SizedBox( - width: size.width, - height: size.height, - child: ColoredBox(color: color), - ), - ), - ), - ); - } testWidgets('throws ArgumentError if the list is empty.', (tester) async { - final goldenScreenshot = GoldenScreenshot(); - const config = GoldenCaptureConfig( testName: 'Test', layoutType: CaptureLayoutType.vertical, @@ -95,24 +61,22 @@ void main() { ); expect( - () => goldenScreenshot.combineScreenshots(config, []), + () => tester.combineGoldenScreenshots(config, []), throwsA(isA()), ); }); testWidgets('combines in vertical layout', (tester) async { await tester.runAsync(() async { - final goldenScreenshot = GoldenScreenshot(); - await tester .pumpWidget(createColorWidget(Colors.red, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); await tester .pumpWidget(createColorWidget(Colors.green, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); const config = GoldenCaptureConfig( testName: 'Test', @@ -121,7 +85,7 @@ void main() { maxScreensPerRow: 2, ); - final combined = await goldenScreenshot.combineScreenshots( + final combined = await tester.combineGoldenScreenshots( config, ['Step A', 'Step B'], ); @@ -137,22 +101,20 @@ void main() { testWidgets('combines in horizontal layout', (tester) async { await tester.runAsync(() async { - final goldenScreenshot = GoldenScreenshot(); - await tester .pumpWidget(createColorWidget(Colors.red, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); await tester .pumpWidget(createColorWidget(Colors.green, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); await tester .pumpWidget(createColorWidget(Colors.blue, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); const config = GoldenCaptureConfig( testName: 'Test', @@ -161,7 +123,7 @@ void main() { maxScreensPerRow: 3, ); - final combined = await goldenScreenshot.combineScreenshots( + final combined = await tester.combineGoldenScreenshots( config, ['A', 'B', 'C'], ); @@ -178,26 +140,20 @@ void main() { 'combines in grid layout with maxScreensPerRow', (tester) async { await tester.runAsync(() async { - final goldenScreenshot = GoldenScreenshot(); - await tester .pumpWidget(createColorWidget(Colors.red, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); await tester.pumpWidget( - createColorWidget( - Colors.green, - const Size(100, 180), - ), - ); + createColorWidget(Colors.green, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); await tester .pumpWidget(createColorWidget(Colors.blue, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); const config = GoldenCaptureConfig( testName: 'Test', @@ -206,7 +162,7 @@ void main() { maxScreensPerRow: 2, ); - final combined = await goldenScreenshot.combineScreenshots( + final combined = await tester.combineGoldenScreenshots( config, ['1', '2', '3'], ); @@ -222,8 +178,6 @@ void main() { testWidgets('respects canvas limit and expands if needed', (tester) async { await tester.runAsync(() async { - final goldenScreenshot = GoldenScreenshot(); - for (int i = 0; i < 5; i++) { await tester.pumpWidget( createColorWidget( @@ -232,7 +186,7 @@ void main() { ), ); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); } const config = GoldenCaptureConfig( @@ -242,12 +196,11 @@ void main() { maxScreensPerRow: 2, ); final names = List.generate( - goldenScreenshot.screenshots.length, + tester.goldenScreenshots.length, (i) => 'Step ${i + 1}', ); - final combined = - await goldenScreenshot.combineScreenshots(config, names); + final combined = await tester.combineGoldenScreenshots(config, names); final img = await decode(combined); expect(img.width, lessThanOrEqualTo(4096)); @@ -260,21 +213,15 @@ void main() { 'fails if stepnames list is shorter than screenshots', (tester) async { await tester.runAsync(() async { - final goldenScreenshot = GoldenScreenshot(); - await tester .pumpWidget(createColorWidget(Colors.red, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); await tester.pumpWidget( - createColorWidget( - Colors.green, - const Size(100, 180), - ), - ); + createColorWidget(Colors.green, const Size(100, 180))); await tester.pumpAndSettle(); - await goldenScreenshot.captureScreenshot(); + await tester.captureGoldenScreenshot(); const config = GoldenCaptureConfig( testName: 'Test', @@ -284,7 +231,7 @@ void main() { ); expect( - () => goldenScreenshot.combineScreenshots( + () => tester.combineGoldenScreenshots( config, ['Only one'], ), diff --git a/test/src/config/golden_animation_config_test.dart b/test/src/config/golden_animation_config_test.dart new file mode 100644 index 0000000..df5fc3e --- /dev/null +++ b/test/src/config/golden_animation_config_test.dart @@ -0,0 +1,142 @@ +import 'package:bc_golden_plugin/bc_golden_plugin.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('GoldenAnimationConfig', () { + test('should validate animation steps within total duration', () { + const config = GoldenAnimationConfig( + testName: 'test_animation', + totalDuration: Duration(milliseconds: 500), + animationSteps: [ + GoldenAnimationStep( + timestamp: Duration.zero, + frameName: 'start', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 250), + frameName: 'middle', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 500), + frameName: 'end', + ), + ], + ); + + expect(config.isValid, isTrue); + }); + + test('should invalidate animation steps beyond total duration', () { + const config = GoldenAnimationConfig( + testName: 'test_animation', + totalDuration: Duration(milliseconds: 500), + animationSteps: [ + GoldenAnimationStep( + timestamp: Duration.zero, + frameName: 'start', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 600), // Beyond totalDuration + frameName: 'invalid', + ), + ], + ); + + expect(config.isValid, isFalse); + }); + + test('should sort animation steps by timestamp', () { + const config = GoldenAnimationConfig( + testName: 'test_animation', + totalDuration: Duration(milliseconds: 500), + animationSteps: [ + GoldenAnimationStep( + timestamp: Duration(milliseconds: 300), + frameName: 'third', + ), + GoldenAnimationStep( + timestamp: Duration.zero, + frameName: 'first', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 150), + frameName: 'second', + ), + ], + ); + + final sortedSteps = config.sortedSteps; + + expect(sortedSteps[0].frameName, equals('first')); + expect(sortedSteps[1].frameName, equals('second')); + expect(sortedSteps[2].frameName, equals('third')); + }); + + test('should have correct default values', () { + const config = GoldenAnimationConfig( + testName: 'test_animation', + totalDuration: Duration(milliseconds: 500), + animationSteps: [], + ); + + expect(config.showTimelineLabels, isTrue); + expect(config.timelineColor, equals(Colors.blue)); + expect(config.layoutType, equals(CaptureLayoutType.horizontal)); + expect(config.maxScreensPerRow, equals(5)); + expect(config.spacing, equals(24.0)); + }); + }); + + group('GoldenAnimationStep', () { + test('should create step with required parameters', () { + const step = GoldenAnimationStep( + timestamp: Duration(milliseconds: 100), + frameName: 'test_frame', + ); + + expect(step.timestamp, equals(const Duration(milliseconds: 100))); + expect(step.frameName, equals('test_frame')); + expect(step.setupAction, isNull); + expect(step.verifyAction, isNull); + }); + + test('should create step with optional actions', () { + Future mockSetupAction(WidgetTester tester) async {} + Future mockVerifyAction(WidgetTester tester) async {} + + final step = GoldenAnimationStep( + timestamp: const Duration(milliseconds: 100), + frameName: 'test_frame', + setupAction: mockSetupAction, + verifyAction: mockVerifyAction, + ); + + expect(step.setupAction, isNotNull); + expect(step.verifyAction, isNotNull); + }); + }); + + group('GoldenAnimationCapture', () { + testWidgets('should throw error for invalid configuration', (tester) async { + const invalidConfig = GoldenAnimationConfig( + testName: 'test_animation', + totalDuration: Duration(milliseconds: 100), + animationSteps: [ + GoldenAnimationStep( + timestamp: Duration(milliseconds: 200), // Beyond totalDuration + frameName: 'invalid', + ), + ], + ); + + expect( + () async => await tester.captureAnimation( + widget: const SizedBox(), + config: invalidConfig, + ), + throwsArgumentError, + ); + }); + }); +} diff --git a/test/src/testkit/golden_testing_tools_test.dart b/test/src/testkit/golden_testing_tools_test.dart index b0f3b60..70bf34b 100644 --- a/test/src/testkit/golden_testing_tools_test.dart +++ b/test/src/testkit/golden_testing_tools_test.dart @@ -1,12 +1,10 @@ import 'package:bc_golden_plugin/bc_golden_plugin.dart'; -import 'package:bc_golden_plugin/src/capture/golden_screenshot.dart'; import 'package:bc_golden_plugin/src/testkit/window_size.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; @GenerateNiceMocks([ - MockSpec(), MockSpec(), ]) class FakeGoldenStep implements GoldenStep { From 7a65faf0b6f9ed619f8afeeda0d86576bdedf59e Mon Sep 17 00:00:00 2001 From: Juan Campuzano Date: Mon, 8 Sep 2025 15:13:13 -0500 Subject: [PATCH 2/5] Refactor animation capture and update dependencies Refactored animation capture logic to use a new helpers.dart for image decoding and border drawing. Improved screenshot combination and layout for animation tests, updated logger usage, and fixed method signatures for consistency. Updated dependencies in pubspec.yaml and regenerated mock files to match API changes. --- .../animations/animation_golden_test.dart | 71 ++--- .../goldens/simple_fade_animation.png | Bin 27697 -> 89108 bytes .../goldens/spinner_rotation_animation.png | Bin 21672 -> 21013 bytes lib/bc_golden_plugin.dart | 2 +- lib/src/capture/golden_animation_capture.dart | 282 +++++++++++++++++- lib/src/capture/golden_screenshot.dart | 33 +- lib/src/capture/helpers.dart | 26 ++ lib/src/config/golden_animation_config.dart | 2 +- lib/src/helpers/logger.dart | 4 +- lib/src/testkit/golden_testing_tools.dart | 154 +++++----- pubspec.yaml | 10 +- .../config/golden_animation_config_test.dart | 5 +- test/src/helpers/logger_test.dart | 4 +- test/src/helpers/logger_test.mocks.dart | 181 ++++------- .../golden_testing_tools_test.mocks.dart | 106 ++----- 15 files changed, 500 insertions(+), 380 deletions(-) create mode 100644 lib/src/capture/helpers.dart diff --git a/example/test/src/presentation/animations/animation_golden_test.dart b/example/test/src/presentation/animations/animation_golden_test.dart index 2beacf9..e623f88 100644 --- a/example/test/src/presentation/animations/animation_golden_test.dart +++ b/example/test/src/presentation/animations/animation_golden_test.dart @@ -6,28 +6,6 @@ void main() { BcGoldenCapture.animation( 'Simple fade animation test', const SimpleFadeAnimation(), - const [ - GoldenAnimationStep( - timestamp: Duration.zero, - frameName: 'start_invisible', - ), - GoldenAnimationStep( - timestamp: Duration(milliseconds: 290), - frameName: 'half_visible', - ), - GoldenAnimationStep( - timestamp: Duration(milliseconds: 300), - frameName: 'fully_visible', - ), - GoldenAnimationStep( - timestamp: Duration(milliseconds: 400), - frameName: 'fully_visible', - ), - GoldenAnimationStep( - timestamp: Duration(milliseconds: 500), - frameName: 'fully_visible', - ), - ], GoldenAnimationConfig( testName: 'simple_fade', totalDuration: const Duration(milliseconds: 500), @@ -41,13 +19,41 @@ void main() { frameName: 'half_visible', ), GoldenAnimationStep( - timestamp: Duration(milliseconds: 300), + timestamp: Duration(milliseconds: 320), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 340), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 360), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 380), frameName: 'fully_visible', ), GoldenAnimationStep( timestamp: Duration(milliseconds: 400), frameName: 'fully_visible', ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 420), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 440), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 460), + frameName: 'fully_visible', + ), + GoldenAnimationStep( + timestamp: Duration(milliseconds: 480), + frameName: 'fully_visible', + ), GoldenAnimationStep( timestamp: Duration(milliseconds: 500), frameName: 'fully_visible', @@ -63,27 +69,10 @@ void main() { BcGoldenCapture.animation( 'Loading spinner rotation', const CircularProgressIndicator(), - const [ - GoldenAnimationStep( - timestamp: Duration.zero, - frameName: '0_degrees', - ), - GoldenAnimationStep( - timestamp: Duration(milliseconds: 250), - frameName: '90_degrees', - ), - GoldenAnimationStep( - timestamp: Duration(milliseconds: 500), - frameName: '180_degrees', - ), - GoldenAnimationStep( - timestamp: Duration(milliseconds: 750), - frameName: '270_degrees', - ), - ], const GoldenAnimationConfig( testName: 'spinner_rotation', totalDuration: Duration(milliseconds: 1000), + showTimelineLabels: true, animationSteps: [ GoldenAnimationStep( timestamp: Duration.zero, diff --git a/example/test/src/presentation/animations/goldens/simple_fade_animation.png b/example/test/src/presentation/animations/goldens/simple_fade_animation.png index a37edc7801b30d37d3d7cd39fd5803f2a1ae1e39..97cf6e9c2747421e0c73d7fefcf0b1eafbbd028f 100644 GIT binary patch literal 89108 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