diff --git a/analysis_options.yaml b/analysis_options.yaml index 513eaef7..ab11b7b5 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -21,4 +21,4 @@ analyzer: exclude: - lib/src/**.pb*.dart - lib/**.g.dart - - test/**.mocks.dart \ No newline at end of file + - test/**.mocks.dart diff --git a/lib/core/commands/command_factory/command_factory.dart b/lib/core/commands/command_factory/command_factory.dart index 220b530e..521aeb26 100644 --- a/lib/core/commands/command_factory/command_factory.dart +++ b/lib/core/commands/command_factory/command_factory.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/clip_area_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/shape/ellipse_shape_command.dart'; @@ -23,16 +24,14 @@ class CommandFactory { PathWithActionHistory path, Paint paint, { bool isCursor = false, - }) => - PathCommand(path, paint, isCursorPath: isCursor); + }) => PathCommand(path, paint, isCursorPath: isCursor); LineCommand createLineCommand( PathWithActionHistory path, Paint paint, Offset startPoint, Offset endPoint, - ) => - LineCommand(path, paint, startPoint, endPoint); + ) => LineCommand(path, paint, startPoint, endPoint); SquareShapeCommand createSquareShapeCommand( Paint paint, @@ -41,9 +40,14 @@ class CommandFactory { Offset bottomLeft, Offset bottomRight, ShapeStyle style, - ) => - SquareShapeCommand( - paint, topLeft, topRight, bottomLeft, bottomRight, style); + ) => SquareShapeCommand( + paint, + topLeft, + topRight, + bottomLeft, + bottomRight, + style, + ); EllipseShapeCommand createEllipseShapeCommand( Paint paint, @@ -52,15 +56,7 @@ class CommandFactory { Offset center, ShapeStyle style, double angle, - ) => - EllipseShapeCommand( - paint, - radiusX, - radiusY, - center, - style, - angle, - ); + ) => EllipseShapeCommand(paint, radiusX, radiusY, center, style, angle); ClipboardCommand createClipboardCommand( Paint paint, @@ -68,14 +64,7 @@ class CommandFactory { ui.Offset offset, double scale, double rotation, - ) => - ClipboardCommand( - paint, - imageData, - offset, - scale, - rotation, - ); + ) => ClipboardCommand(paint, imageData, offset, scale, rotation); TextCommand createTextCommand( Offset point, @@ -86,17 +75,16 @@ class CommandFactory { double rotationAngle, { double scaleX = 1.0, double scaleY = 1.0, - }) => - TextCommand( - point, - text, - style, - fontSize, - paint, - rotationAngle: rotationAngle, - scaleX: scaleX, - scaleY: scaleY, - ); + }) => TextCommand( + point, + text, + style, + fontSize, + paint, + rotationAngle: rotationAngle, + scaleX: scaleX, + scaleY: scaleY, + ); StarShapeCommand createStarShapeCommand( Paint paint, @@ -106,16 +94,15 @@ class CommandFactory { ShapeStyle style, double radiusX, double radiusY, - ) => - StarShapeCommand( - paint, - numPoints, - angle, - center, - style, - radiusX, - radiusY, - ); + ) => StarShapeCommand( + paint, + numPoints, + angle, + center, + style, + radiusX, + radiusY, + ); HeartShapeCommand createHeartShapeCommand( Paint paint, @@ -124,8 +111,7 @@ class CommandFactory { double angle, Offset center, ShapeStyle style, - ) => - HeartShapeCommand(paint, width, height, angle, center, style); + ) => HeartShapeCommand(paint, width, height, angle, center, style); SprayCommand createSprayCommand(List points, Paint paint) { return SprayCommand(points, paint); @@ -139,6 +125,12 @@ class CommandFactory { region, ); + ClipAreaCommand createClipAreaCommand( + PathWithActionHistory path, + Paint paint, + ) => + ClipAreaCommand(path, paint); + ColorChangedCommand createColorChangedCommand( Color oldColor, Color newColor, diff --git a/lib/core/commands/command_implementation/command.dart b/lib/core/commands/command_implementation/command.dart index 63afcda1..67cb97e9 100644 --- a/lib/core/commands/command_implementation/command.dart +++ b/lib/core/commands/command_implementation/command.dart @@ -1,6 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/clip_area_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/shape/ellipse_shape_command.dart'; @@ -39,6 +40,8 @@ abstract class Command with EquatableMixin { return HeartShapeCommand.fromJson(json); case SerializerType.STAR_SHAPE_COMMAND: return StarShapeCommand.fromJson(json); + case SerializerType.CLIP_AREA_COMMAND: + return ClipAreaCommand.fromJson(json); case SerializerType.COLOR_CHANGED_COMMAND: return ColorChangedCommand.fromJson(json); default: diff --git a/lib/core/commands/command_implementation/graphic/clip_area_command.dart b/lib/core/commands/command_implementation/graphic/clip_area_command.dart new file mode 100644 index 00000000..a90e64ad --- /dev/null +++ b/lib/core/commands/command_implementation/graphic/clip_area_command.dart @@ -0,0 +1,65 @@ +import 'dart:ui'; + +import 'package:json_annotation/json_annotation.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart'; +import 'package:paintroid/core/commands/path_with_action_history.dart'; +import 'package:paintroid/core/json_serialization/converter/paint_converter.dart'; +import 'package:paintroid/core/json_serialization/converter/path_with_action_history_converter.dart'; +import 'package:paintroid/core/json_serialization/versioning/serializer_version.dart'; +import 'package:paintroid/core/json_serialization/versioning/version_strategy.dart'; + +part 'clip_area_command.g.dart'; + +@JsonSerializable() +class ClipAreaCommand extends GraphicCommand { + final String type; + final int version; + + @PathWithActionHistoryConverter() + final PathWithActionHistory clipPathData; + + ClipAreaCommand( + this.clipPathData, + Paint paint, { + this.type = SerializerType.CLIP_AREA_COMMAND, + int? version, + }) : version = version ?? + VersionStrategyManager.strategy.getClipAreaCommandVersion(), + super(paint); + + @override + void call(Canvas canvas) { + final Rect canvasBounds = canvas.getLocalClipBounds(); + + canvas.saveLayer(canvasBounds, Paint()..blendMode = BlendMode.dstIn); + + canvas.drawPath( + clipPathData.path, + Paint() + ..color = const Color(0xFF000000) + ..style = PaintingStyle.fill); + + canvas.restore(); + } + + @override + List get props => [paint, clipPathData, type, version]; + + factory ClipAreaCommand.fromJson(Map json) { + int version = json['version'] as int; + + switch (version) { + case Version.v1: + return _$ClipAreaCommandFromJson(json); + case Version.v2: + // For different versions of ClipAreaCommand the deserialization + // has to be implemented manually. + // Autogenerated code can only be used for one version + default: + return _$ClipAreaCommandFromJson(json); + } + } + + @override + Map toJson() => _$ClipAreaCommandToJson(this); +} diff --git a/lib/core/commands/command_implementation/graphic/clip_area_command.g.dart b/lib/core/commands/command_implementation/graphic/clip_area_command.g.dart new file mode 100644 index 00000000..c8c75133 --- /dev/null +++ b/lib/core/commands/command_implementation/graphic/clip_area_command.g.dart @@ -0,0 +1,25 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'clip_area_command.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +ClipAreaCommand _$ClipAreaCommandFromJson(Map json) => + ClipAreaCommand( + const PathWithActionHistoryConverter() + .fromJson(json['clipPathData'] as Map), + const PaintConverter().fromJson(json['paint'] as Map), + type: json['type'] as String? ?? SerializerType.CLIP_AREA_COMMAND, + version: (json['version'] as num?)?.toInt(), + ); + +Map _$ClipAreaCommandToJson(ClipAreaCommand instance) => + { + 'paint': const PaintConverter().toJson(instance.paint), + 'type': instance.type, + 'version': instance.version, + 'clipPathData': + const PathWithActionHistoryConverter().toJson(instance.clipPathData), + }; diff --git a/lib/core/commands/command_implementation/graphic/delete_region_command.dart b/lib/core/commands/command_implementation/graphic/delete_region_command.dart index fa70404d..82f239cd 100644 --- a/lib/core/commands/command_implementation/graphic/delete_region_command.dart +++ b/lib/core/commands/command_implementation/graphic/delete_region_command.dart @@ -29,10 +29,12 @@ class DeleteRegionCommand extends GraphicCommand { @override void call(ui.Canvas canvas) { + canvas.saveLayer(region, ui.Paint()..blendMode = ui.BlendMode.src); final clearPaint = ui.Paint() ..blendMode = ui.BlendMode.clear ..style = ui.PaintingStyle.fill; canvas.drawRect(region, clearPaint); + canvas.restore(); } @override diff --git a/lib/core/commands/command_manager/command_manager.dart b/lib/core/commands/command_manager/command_manager.dart index dc3a00e5..cb3a6024 100644 --- a/lib/core/commands/command_manager/command_manager.dart +++ b/lib/core/commands/command_manager/command_manager.dart @@ -2,6 +2,7 @@ import 'dart:ui'; import 'package:paintroid/core/commands/command_implementation/command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/clip_area_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart'; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart'; @@ -28,13 +29,19 @@ class CommandManager { _undoStack.add(command); } + void removeCommand(Command commandToRemove) { + _undoStack.remove(commandToRemove); + } + void setUndoStack(List commands) { _undoStack.clear(); _undoStack.addAll(commands); } void executeLastCommand(Canvas canvas) { - if (_undoStack.isEmpty) return; + if (_undoStack.isEmpty) { + return; + } final lastCommand = _undoStack.last; if (lastCommand is GraphicCommand) { lastCommand.call(canvas); @@ -50,7 +57,9 @@ class CommandManager { } void discardLastCommand() { - if (_undoStack.isNotEmpty) _undoStack.removeLast(); + if (_undoStack.isNotEmpty) { + _undoStack.removeLast(); + } } void clearUndoStack({Iterable? newCommands}) { @@ -128,6 +137,8 @@ class CommandManager { return ToolData.SHAPES; } else if (command.runtimeType == HeartShapeCommand) { return ToolData.SHAPES; + } else if (command.runtimeType == ClipAreaCommand) { + return ToolData.CLIPPING; } else if (command is PathCommand) { if (command.isCursorPath) { return ToolData.CURSOR; diff --git a/lib/core/commands/command_painter.dart b/lib/core/commands/command_painter.dart index aca3588f..3299a506 100644 --- a/lib/core/commands/command_painter.dart +++ b/lib/core/commands/command_painter.dart @@ -10,6 +10,7 @@ import 'package:paintroid/core/tools/implementation/clipboard_tool.dart'; import 'package:paintroid/core/tools/implementation/cursor_tool.dart'; import 'package:paintroid/core/tools/implementation/shapes_tool.dart'; import 'package:paintroid/core/tools/implementation/text_tool.dart'; +import 'package:paintroid/core/tools/implementation/clipping_tool.dart'; import 'package:paintroid/core/tools/implementation/brush_tool.dart'; import 'package:paintroid/core/tools/line_tool/line_tool.dart'; import 'package:paintroid/core/tools/tool.dart'; @@ -65,9 +66,13 @@ class CommandPainter extends CustomPainter { break; case ToolType.CLIPBOARD: (currentTool as ClipboardTool).paint(canvas, size); + break; case ToolType.TEXT: (currentTool as TextTool).drawGuides(canvas, ref.read(paintProvider)); break; + case ToolType.CLIPPING: + (currentTool as ClippingTool).draw(canvas, ref.read(paintProvider)); + break; default: if (currentTool is BrushTool) { if ((currentTool as BrushTool).isDrawing || isCachingCommand) { diff --git a/lib/core/json_serialization/versioning/serializer_version.dart b/lib/core/json_serialization/versioning/serializer_version.dart index 28d88e89..c8e2ded4 100644 --- a/lib/core/json_serialization/versioning/serializer_version.dart +++ b/lib/core/json_serialization/versioning/serializer_version.dart @@ -11,6 +11,7 @@ class SerializerVersion { static const int SPRAY_COMMAND_VERSION = Version.v1; static const int CLIPBOARD_COMMAND_VERSION = Version.v1; static const int DELETE_REGION_COMMAND_VERSION = Version.v1; + static const int CLIP_AREA_COMMAND_VERSION = Version.v1; static const int COLOR_CHANGED_COMMAND_VERSION = Version.v1; } @@ -34,5 +35,6 @@ class SerializerType { static const String SPRAY_COMMAND = 'SprayCommand'; static const String CLIPBOARD_COMMAND = 'ClipboardCommand'; static const String DELETE_REGION_COMMAND = 'DeleteRegionCommand'; + static const String CLIP_AREA_COMMAND = 'ClipAreaCommand'; static const String COLOR_CHANGED_COMMAND = 'ColorChangedCommand'; } diff --git a/lib/core/json_serialization/versioning/version_strategy.dart b/lib/core/json_serialization/versioning/version_strategy.dart index 42bf991e..e8646e69 100644 --- a/lib/core/json_serialization/versioning/version_strategy.dart +++ b/lib/core/json_serialization/versioning/version_strategy.dart @@ -23,6 +23,8 @@ abstract class IVersionStrategy { int getDeleteRegionCommandVersion(); + int getClipAreaCommandVersion(); + int getColorChangedCommandVersion(); } @@ -66,6 +68,10 @@ class ProductionVersionStrategy implements IVersionStrategy { int getDeleteRegionCommandVersion() => SerializerVersion.DELETE_REGION_COMMAND_VERSION; + @override + int getClipAreaCommandVersion() => + SerializerVersion.CLIP_AREA_COMMAND_VERSION; + @override int getColorChangedCommandVersion() => SerializerVersion.COLOR_CHANGED_COMMAND_VERSION; diff --git a/lib/core/providers/object/tools/clipping_tool_provider.dart b/lib/core/providers/object/tools/clipping_tool_provider.dart new file mode 100644 index 00000000..402b5faa --- /dev/null +++ b/lib/core/providers/object/tools/clipping_tool_provider.dart @@ -0,0 +1,26 @@ +import 'package:riverpod_annotation/riverpod_annotation.dart'; + +import 'package:paintroid/core/commands/command_factory/command_factory_provider.dart'; +import 'package:paintroid/core/commands/command_manager/command_manager_provider.dart'; +import 'package:paintroid/core/commands/graphic_factory/graphic_factory_provider.dart'; +import 'package:paintroid/core/enums/tool_types.dart'; +import 'package:paintroid/core/tools/implementation/clipping_tool.dart'; +import 'package:paintroid/core/providers/object/tools/clipping_tool_state_provider.dart'; +import 'package:paintroid/core/providers/state/canvas_state_provider.dart'; + +part 'clipping_tool_provider.g.dart'; + +@riverpod +class ClippingToolProvider extends _$ClippingToolProvider { + @override + ClippingTool build() { + return ClippingTool( + commandManager: ref.watch(commandManagerProvider), + commandFactory: ref.watch(commandFactoryProvider), + graphicFactory: ref.watch(graphicFactoryProvider), + clippingToolState: ref.watch(clippingToolState.notifier), + canvasStateProvider: ref.watch(canvasStateProvider.notifier), + type: ToolType.CLIPPING, + ); + } +} diff --git a/lib/core/providers/object/tools/clipping_tool_provider.g.dart b/lib/core/providers/object/tools/clipping_tool_provider.g.dart new file mode 100644 index 00000000..dc896e05 --- /dev/null +++ b/lib/core/providers/object/tools/clipping_tool_provider.g.dart @@ -0,0 +1,27 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'clipping_tool_provider.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +String _$clippingToolProviderHash() => + r'10381b6a787aef98e726b246d488001814bcb1e5'; + +/// See also [ClippingToolProvider]. +@ProviderFor(ClippingToolProvider) +final clippingToolProvider = + AutoDisposeNotifierProvider.internal( + ClippingToolProvider.new, + name: r'clippingToolProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$clippingToolProviderHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$ClippingToolProvider = AutoDisposeNotifier; +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/core/providers/object/tools/clipping_tool_state_provider.dart b/lib/core/providers/object/tools/clipping_tool_state_provider.dart new file mode 100644 index 00000000..203d4381 --- /dev/null +++ b/lib/core/providers/object/tools/clipping_tool_state_provider.dart @@ -0,0 +1,21 @@ +import 'package:riverpod_annotation/riverpod_annotation.dart'; + +part 'clipping_tool_state_provider.g.dart'; + +@riverpod +class ClippingToolState extends _$ClippingToolState { + @override + bool build() { + return false; + } + + void setHasActiveClipPath(bool hasActive) { + state = hasActive; + } + + void clearClipPath() { + state = false; + } + + bool get hasActiveClipPath => state; +} diff --git a/lib/core/providers/object/tools/clipping_tool_state_provider.g.dart b/lib/core/providers/object/tools/clipping_tool_state_provider.g.dart new file mode 100644 index 00000000..02d95441 --- /dev/null +++ b/lib/core/providers/object/tools/clipping_tool_state_provider.g.dart @@ -0,0 +1,26 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'clipping_tool_state_provider.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +String _$clippingToolStateHash() => r'd6a9d9e023dc616a6a7eb99c55b38590d14b2311'; + +/// See also [ClippingToolState]. +@ProviderFor(ClippingToolState) +final clippingToolState = + AutoDisposeNotifierProvider.internal( + ClippingToolState.new, + name: r'clippingToolState', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$clippingToolStateHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$ClippingToolState = AutoDisposeNotifier; +// ignore_for_file: type=lint +// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/core/providers/state/canvas_state_provider.g.dart b/lib/core/providers/state/canvas_state_provider.g.dart index 7c12698d..65e70ea5 100644 --- a/lib/core/providers/state/canvas_state_provider.g.dart +++ b/lib/core/providers/state/canvas_state_provider.g.dart @@ -7,7 +7,7 @@ part of 'canvas_state_provider.dart'; // ************************************************************************** String _$canvasStateProviderHash() => - r'6fa5c88a3b5be5465d87823e71be449753bb911a'; + r'e0cd5a879590dfa2b4e9e45a896624927f0e9541'; /// See also [CanvasStateProvider]. @ProviderFor(CanvasStateProvider) diff --git a/lib/core/providers/state/toolbox_state_provider.dart b/lib/core/providers/state/toolbox_state_provider.dart index b7fb5e47..f656c606 100644 --- a/lib/core/providers/state/toolbox_state_provider.dart +++ b/lib/core/providers/state/toolbox_state_provider.dart @@ -5,6 +5,7 @@ import 'package:paintroid/core/enums/tool_types.dart'; import 'package:paintroid/core/providers/object/canvas_painter_provider.dart'; import 'package:paintroid/core/providers/object/tools/brush_tool_provider.dart'; import 'package:paintroid/core/providers/object/tools/clipboard_tool_provider.dart'; +import 'package:paintroid/core/providers/object/tools/clipping_tool_provider.dart'; import 'package:paintroid/core/providers/object/tools/cursor_tool_provider.dart'; import 'package:paintroid/core/providers/object/tools/eraser_tool_provider.dart'; import 'package:paintroid/core/providers/object/tools/hand_tool_provider.dart'; @@ -95,6 +96,9 @@ class ToolBoxStateProvider extends _$ToolBoxStateProvider { state = state.copyWith(currentTool: ref.read(clipboardToolProvider)); ref.read(canvasPainterProvider.notifier).repaint(); break; + case ToolType.CLIPPING: + state = state.copyWith(currentTool: ref.read(clippingToolProvider)); + break; case ToolType.PIPETTE: state = state.copyWith(currentTool: ref.read(pipetteToolProvider)); break; diff --git a/lib/core/providers/state/toolbox_state_provider.g.dart b/lib/core/providers/state/toolbox_state_provider.g.dart index f6c224e0..90eef711 100644 --- a/lib/core/providers/state/toolbox_state_provider.g.dart +++ b/lib/core/providers/state/toolbox_state_provider.g.dart @@ -7,7 +7,7 @@ part of 'toolbox_state_provider.dart'; // ************************************************************************** String _$toolBoxStateProviderHash() => - r'c6fa1661445899c5abd6725b49ccbaf6ca3340e8'; + r'242cfc260d10c40c100d4b44b3e65bc0c2328887'; /// See also [ToolBoxStateProvider]. @ProviderFor(ToolBoxStateProvider) diff --git a/lib/core/tools/implementation/clipping_tool.dart b/lib/core/tools/implementation/clipping_tool.dart new file mode 100644 index 00000000..dfe66600 --- /dev/null +++ b/lib/core/tools/implementation/clipping_tool.dart @@ -0,0 +1,163 @@ +import 'dart:ui'; + +import 'package:flutter/foundation.dart'; +import 'package:paintroid/core/commands/graphic_factory/graphic_factory.dart'; +import 'package:paintroid/core/commands/path_with_action_history.dart'; +import 'package:paintroid/core/providers/state/canvas_state_provider.dart'; +import 'package:paintroid/core/tools/tool.dart'; +import 'package:paintroid/core/enums/tool_types.dart'; +import 'package:paintroid/core/providers/object/tools/clipping_tool_state_provider.dart'; + +import 'package:path_drawing/path_drawing.dart'; + +class ClippingTool extends Tool { + static const double _outerStrokeWidthOffset = 5.0; + static const double _dashLengthMultiplier = 2.0; + static const double _dashGapMultiplier = 2.0; + + final GraphicFactory graphicFactory; + final ClippingToolState clippingToolState; + final CanvasStateProvider canvasStateProvider; + + @visibleForTesting + PathWithActionHistory? pathToDraw; + + ClippingTool({ + required super.commandFactory, + required super.commandManager, + required this.graphicFactory, + required this.clippingToolState, + required this.canvasStateProvider, + super.type = ToolType.CLIPPING, + super.hasAddFunctionality = false, + super.hasFinalizeFunctionality = true, + }); + + @override + void onDown(Offset point, Paint paint) { + if (clippingToolState.hasActiveClipPath) { + clippingToolState.clearClipPath(); + pathToDraw = null; + } + + pathToDraw = + graphicFactory.createPathWithActionHistory() + ..moveTo(point.dx, point.dy); + + canvasStateProvider.resetCanvasWithExistingCommands(); + } + + @override + void onDrag(Offset point, Paint paint) { + pathToDraw?.lineTo(point.dx, point.dy); + } + + @override + Future onUp(Offset point, Paint paint) async { + final path = pathToDraw; + if (path == null) { + return; + } + + if (path.actions.isNotEmpty) { + final lastAction = path.actions.last; + bool isSameAsLastPoint = false; + + if (lastAction is LineToAction) { + isSameAsLastPoint = + (lastAction.x == point.dx && lastAction.y == point.dy); + } else if (lastAction is MoveToAction) { + isSameAsLastPoint = + (lastAction.x == point.dx && lastAction.y == point.dy); + } + + if (!isSameAsLastPoint) { + path.lineTo(point.dx, point.dy); + } + } + + if (path.actions.length <= 1) { + pathToDraw = null; + await canvasStateProvider.resetCanvasWithExistingCommands(); + return; + } + + path.close(); + clippingToolState.setHasActiveClipPath(true); + + await canvasStateProvider.resetCanvasWithExistingCommands(); + await canvasStateProvider.updateCachedImage(); + } + + @override + void onCancel() {} + + @override + void onCheckmark(Paint paint) { + final path = pathToDraw; + if (path != null && path.actions.isNotEmpty) { + final cropCommand = commandFactory.createClipAreaCommand(path, paint); + commandManager.addGraphicCommand(cropCommand); + + clippingToolState.clearClipPath(); + pathToDraw = null; + + canvasStateProvider.resetCanvasWithExistingCommands(); + } + } + + void draw(Canvas canvas, Paint paint) { + final pathData = pathToDraw; + if (pathData == null) return; + + final double baseStrokeWidth = paint.strokeWidth; + final double outerStrokeWidth = baseStrokeWidth + _outerStrokeWidthOffset; + + final double dashLength = baseStrokeWidth * _dashLengthMultiplier; + final double dashGap = baseStrokeWidth * _dashGapMultiplier; + final dashArray = CircularIntervalList([dashLength, dashGap]); + + final Color contrastColor = + (paint.color.toARGB32() & 0x00FFFFFF) == 0 + ? Color(0xFFFFFFFF) + : Color(0xFF000000); + + final borderPaint = + Paint() + ..color = contrastColor + ..style = PaintingStyle.stroke + ..strokeWidth = outerStrokeWidth + ..strokeCap = paint.strokeCap + ..strokeJoin = paint.strokeJoin; + + final innerPaint = + Paint() + ..color = paint.color + ..style = PaintingStyle.stroke + ..strokeWidth = baseStrokeWidth + ..strokeCap = paint.strokeCap + ..strokeJoin = paint.strokeJoin; + + final path = Path()..addPath(pathData.path, Offset.zero); + + final dashedPath = dashPath(path, dashArray: dashArray); + + canvas.drawPath(dashedPath, borderPaint); + canvas.drawPath(dashedPath, innerPaint); + } + + @override + void onPlus() {} + + @override + void onRedo() { + commandManager.redo(); + canvasStateProvider.resetCanvasWithExistingCommands(); + } + + @override + void onUndo() { + commandManager.undo(); + canvasStateProvider.resetCanvasWithExistingCommands(); + } +} diff --git a/lib/ui/pages/workspace_page/components/bottom_bar/tool_options/tool_options.dart b/lib/ui/pages/workspace_page/components/bottom_bar/tool_options/tool_options.dart index d1343033..1b89adf5 100644 --- a/lib/ui/pages/workspace_page/components/bottom_bar/tool_options/tool_options.dart +++ b/lib/ui/pages/workspace_page/components/bottom_bar/tool_options/tool_options.dart @@ -39,6 +39,7 @@ class ToolOptions extends ConsumerWidget { ToolType.SPRAY => const SprayToolOptions(), ToolType.CLIPBOARD => const ClipboardToolOptions(), ToolType.TEXT => const TextToolOptions(), + ToolType.CLIPPING => const StrokeToolOptions(), _ => Container(), }, ), diff --git a/lib/ui/pages/workspace_page/components/drawing_surface/canvas_painter.dart b/lib/ui/pages/workspace_page/components/drawing_surface/canvas_painter.dart index 70756c8a..3066f3d4 100644 --- a/lib/ui/pages/workspace_page/components/drawing_surface/canvas_painter.dart +++ b/lib/ui/pages/workspace_page/components/drawing_surface/canvas_painter.dart @@ -47,7 +47,7 @@ class BackgroundLayer extends ConsumerWidget { return RepaintBoundary( child: CheckerboardPattern( child: - backgroundImage != null ? RawImage(image: backgroundImage) : null, + backgroundImage != null ? RawImage(image: backgroundImage) : null, ), ); } @@ -67,27 +67,29 @@ class PaintingLayer extends ConsumerWidget { final cachedImage = ref.watch( canvasStateProvider.select((state) => state.cachedImage), ); - - final currentTool = ref.watch(toolBoxStateProvider.select((state) => state.currentTool)); - final isCachingCommand = ref.watch(canvasStateProvider.select((state) => state.isCachingCommand)); - + + final currentTool = + ref.watch(toolBoxStateProvider.select((state) => state.currentTool)); + final isCachingCommand = ref + .watch(canvasStateProvider.select((state) => state.isCachingCommand)); + bool isEraserDrawing = false; if (currentTool.type == ToolType.ERASER && currentTool is BrushTool) { isEraserDrawing = currentTool.isDrawing || isCachingCommand; } return RepaintBoundary( - child: CustomPaint( - foregroundPainter: CommandPainter(ref, cachedImage: cachedImage), - child: cachedImage != null && !isEraserDrawing - ? Opacity( - opacity: 0.99, - child: RawImage( - image: cachedImage, - filterQuality: FilterQuality.none, - ), - ) - : null, + child: Opacity( + opacity: isEraserDrawing ? 0.99 : 1.0, + child: CustomPaint( + foregroundPainter: CommandPainter(ref, cachedImage: cachedImage), + child: cachedImage != null && !isEraserDrawing + ? RawImage( + image: cachedImage, + filterQuality: FilterQuality.none, + ) + : null, + ), ), ); } diff --git a/lib/ui/pages/workspace_page/components/top_bar/top_app_bar.dart b/lib/ui/pages/workspace_page/components/top_bar/top_app_bar.dart index 319a2f39..e0039ff7 100644 --- a/lib/ui/pages/workspace_page/components/top_bar/top_app_bar.dart +++ b/lib/ui/pages/workspace_page/components/top_bar/top_app_bar.dart @@ -74,7 +74,7 @@ class TopAppBar extends ConsumerWidget implements PreferredSizeWidget { currentTool is LineTool && currentTool.vertexStack.isNotEmpty; final isShapeTool = currentTool.type == ToolType.SHAPES; final isTextTool = currentTool is TextTool; - if (isLineTool || isShapeTool || isTextTool) { + if (isLineTool || isShapeTool || isTextTool || currentTool.type == ToolType.CLIPPING) { return () { currentTool.onCheckmark(ref.read(paintProvider)); ref.read(appBarProvider.notifier).update(); diff --git a/test/integration/clipping_tool_test.dart b/test/integration/clipping_tool_test.dart new file mode 100644 index 00000000..ad9310b5 --- /dev/null +++ b/test/integration/clipping_tool_test.dart @@ -0,0 +1,140 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; +import 'package:paintroid/app.dart'; +import 'package:paintroid/core/tools/tool_data.dart'; +import 'package:paintroid/core/utils/color_utils.dart'; + +import '../utils/canvas_positions.dart'; +import '../utils/ui_interaction.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + const String testIDStr = String.fromEnvironment('id', defaultValue: '-1'); + final testID = int.tryParse(testIDStr) ?? testIDStr; + + late Widget sut; + + setUp(() async { + sut = ProviderScope( + child: App( + showOnboardingPage: false, + ), + ); + }); + + if (testID == -1 || testID == 0) { + testWidgets('[CLIPPING_TOOL]: clip a part of the image', + (WidgetTester tester) async { + UIInteraction.initialize(tester); + await tester.pumpWidget(sut); + await UIInteraction.createNewImage(); + UIInteraction.setColor(Colors.black); + await UIInteraction.selectTool(ToolData.BRUSH.name); + + await UIInteraction.dragFromTo( + CanvasPosition.topLeft, + CanvasPosition.bottomRight, + ); + + await UIInteraction.selectTool(ToolData.CLIPPING.name); + + final Offset center = CanvasPosition.center; + final Offset p1 = center + const Offset(-50, -50); + final Offset p2 = center + const Offset(50, -50); + final Offset p3 = center + const Offset(50, 50); + final Offset p4 = center + const Offset(-50, 50); + + final TestGesture gesture = await tester.startGesture(p1); + await tester.pumpAndSettle(); + await gesture.moveTo(p2); + await tester.pumpAndSettle(); + await gesture.moveTo(p3); + await tester.pumpAndSettle(); + await gesture.moveTo(p4); + await tester.pumpAndSettle(); + await gesture.moveTo(p1); + await tester.pumpAndSettle(); + await gesture.up(); + await tester.pumpAndSettle(); + + await UIInteraction.clickCheckmark(); + + var centerColor = await UIInteraction.getPixelColor( + CanvasPosition.centerX, + CanvasPosition.centerY, + ); + expect(centerColor.toValue(), Colors.black.toValue()); + + var topLeftColor = await UIInteraction.getPixelColor( + CanvasPosition.left, + CanvasPosition.top, + ); + expect(topLeftColor.toValue(), Colors.transparent.toValue()); + + var bottomRightColor = await UIInteraction.getPixelColor( + CanvasPosition.right, + CanvasPosition.bottom, + ); + expect(bottomRightColor.toValue(), Colors.transparent.toValue()); + }); + } + + if (testID == -1 || testID == 1) { + testWidgets('[CLIPPING_TOOL]: cancel clipping', + (WidgetTester tester) async { + UIInteraction.initialize(tester); + await tester.pumpWidget(sut); + await UIInteraction.createNewImage(); + UIInteraction.setColor(Colors.black); + await UIInteraction.selectTool(ToolData.BRUSH.name); + + await UIInteraction.dragFromTo( + CanvasPosition.topLeft, + CanvasPosition.bottomRight, + ); + + await UIInteraction.selectTool(ToolData.CLIPPING.name); + + final Offset center = CanvasPosition.center; + final Offset p1 = center + const Offset(-50, -50); + final Offset p2 = center + const Offset(50, -50); + final Offset p3 = center + const Offset(50, 50); + final Offset p4 = center + const Offset(-50, 50); + + final TestGesture gesture = await tester.startGesture(p1); + await tester.pumpAndSettle(); + await gesture.moveTo(p2); + await tester.pumpAndSettle(); + await gesture.moveTo(p3); + await tester.pumpAndSettle(); + await gesture.moveTo(p4); + await tester.pumpAndSettle(); + await gesture.moveTo(p1); + await tester.pumpAndSettle(); + await gesture.up(); + await tester.pumpAndSettle(); + await UIInteraction.clickBackButton(); + + var centerColor = await UIInteraction.getPixelColor( + CanvasPosition.centerX, + CanvasPosition.centerY, + ); + expect(centerColor.toValue(), Colors.black.toValue()); + + var topLeftColor = await UIInteraction.getPixelColor( + CanvasPosition.left, + CanvasPosition.top, + ); + expect(topLeftColor.toValue(), Colors.black.toValue()); + + var bottomRightColor = await UIInteraction.getPixelColor( + CanvasPosition.right, + CanvasPosition.bottom, + ); + expect(bottomRightColor.toValue(), Colors.black.toValue()); + }); + } +} diff --git a/test/unit/serialization/utils/dummy_version_strategy.dart b/test/unit/serialization/utils/dummy_version_strategy.dart index 0ccc3a37..8a683d6e 100644 --- a/test/unit/serialization/utils/dummy_version_strategy.dart +++ b/test/unit/serialization/utils/dummy_version_strategy.dart @@ -13,6 +13,7 @@ class DummyVersionStrategy implements IVersionStrategy { final int clipboardCommandVersion; final int deleteRegionCommandVersion; final int textCommandVersion; + final int clipAreaCommandVersion; final int colorChangedCommandVersion; DummyVersionStrategy({ @@ -31,6 +32,7 @@ class DummyVersionStrategy implements IVersionStrategy { this.deleteRegionCommandVersion = SerializerVersion.DELETE_REGION_COMMAND_VERSION, this.textCommandVersion = SerializerVersion.TEXT_COMMAND_VERSION, + this.clipAreaCommandVersion = SerializerVersion.CLIP_AREA_COMMAND_VERSION, this.colorChangedCommandVersion = SerializerVersion.COLOR_CHANGED_COMMAND_VERSION, }); @@ -68,6 +70,9 @@ class DummyVersionStrategy implements IVersionStrategy { @override int getTextCommandVersion() => textCommandVersion; + @override + int getClipAreaCommandVersion() => clipAreaCommandVersion; + @override int getColorChangedCommandVersion() => colorChangedCommandVersion; } diff --git a/test/unit/tools/clipboard_tool_test.mocks.dart b/test/unit/tools/clipboard_tool_test.mocks.dart index c7c26633..b8871b46 100644 --- a/test/unit/tools/clipboard_tool_test.mocks.dart +++ b/test/unit/tools/clipboard_tool_test.mocks.dart @@ -3,26 +3,28 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i29; -import 'dart:typed_data' as _i27; +import 'dart:async' as _i30; +import 'dart:typed_data' as _i28; import 'dart:ui' as _i2; -import 'package:flutter/material.dart' as _i28; -import 'package:logging/logging.dart' as _i16; +import 'package:flutter/material.dart' as _i29; +import 'package:logging/logging.dart' as _i17; import 'package:mockito/mockito.dart' as _i1; -import 'package:mockito/src/dummies.dart' as _i20; +import 'package:mockito/src/dummies.dart' as _i21; import 'package:paintroid/core/commands/command_factory/command_factory.dart' - as _i24; + as _i25; import 'package:paintroid/core/commands/command_implementation/command.dart' as _i3; +import 'package:paintroid/core/commands/command_implementation/graphic/clip_area_command.dart' + as _i15; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart' as _i9; import 'package:paintroid/core/commands/command_implementation/graphic/color_changed_command.dart' - as _i15; + as _i16; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart' as _i14; import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart' - as _i22; + as _i23; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart' as _i6; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart' @@ -40,13 +42,13 @@ import 'package:paintroid/core/commands/command_implementation/graphic/spray_com import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart' as _i10; import 'package:paintroid/core/commands/command_manager/command_manager.dart' - as _i21; -import 'package:paintroid/core/commands/path_with_action_history.dart' as _i25; -import 'package:paintroid/core/enums/bounding_box_action.dart' as _i18; -import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i19; -import 'package:paintroid/core/enums/shape_style.dart' as _i26; -import 'package:paintroid/core/tools/bounding_box.dart' as _i17; -import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i23; + as _i22; +import 'package:paintroid/core/commands/path_with_action_history.dart' as _i26; +import 'package:paintroid/core/enums/bounding_box_action.dart' as _i19; +import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i20; +import 'package:paintroid/core/enums/shape_style.dart' as _i27; +import 'package:paintroid/core/tools/bounding_box.dart' as _i18; +import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i24; import 'package:paintroid/core/tools/tool_data.dart' as _i4; // ignore_for_file: type=lint @@ -208,9 +210,9 @@ class _FakeDeleteRegionCommand_13 extends _i1.SmartFake ); } -class _FakeColorChangedCommand_14 extends _i1.SmartFake - implements _i15.ColorChangedCommand { - _FakeColorChangedCommand_14( +class _FakeClipAreaCommand_14 extends _i1.SmartFake + implements _i15.ClipAreaCommand { + _FakeClipAreaCommand_14( Object parent, Invocation parentInvocation, ) : super( @@ -219,8 +221,9 @@ class _FakeColorChangedCommand_14 extends _i1.SmartFake ); } -class _FakeLogger_15 extends _i1.SmartFake implements _i16.Logger { - _FakeLogger_15( +class _FakeColorChangedCommand_15 extends _i1.SmartFake + implements _i16.ColorChangedCommand { + _FakeColorChangedCommand_15( Object parent, Invocation parentInvocation, ) : super( @@ -229,8 +232,18 @@ class _FakeLogger_15 extends _i1.SmartFake implements _i16.Logger { ); } -class _FakeImage_16 extends _i1.SmartFake implements _i2.Image { - _FakeImage_16( +class _FakeLogger_16 extends _i1.SmartFake implements _i17.Logger { + _FakeLogger_16( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeImage_17 extends _i1.SmartFake implements _i2.Image { + _FakeImage_17( Object parent, Invocation parentInvocation, ) : super( @@ -242,7 +255,7 @@ class _FakeImage_16 extends _i1.SmartFake implements _i2.Image { /// A class which mocks [BoundingBox]. /// /// See the documentation for Mockito's code generation for more information. -class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { +class MockBoundingBox extends _i1.Mock implements _i18.BoundingBox { MockBoundingBox() { _i1.throwOnMissingStub(this); } @@ -311,13 +324,13 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { ); @override - _i18.BoundingBoxAction get currentAction => (super.noSuchMethod( + _i19.BoundingBoxAction get currentAction => (super.noSuchMethod( Invocation.getter(#currentAction), - returnValue: _i18.BoundingBoxAction.none, - ) as _i18.BoundingBoxAction); + returnValue: _i19.BoundingBoxAction.none, + ) as _i19.BoundingBoxAction); @override - set currentAction(_i18.BoundingBoxAction? _currentAction) => + set currentAction(_i19.BoundingBoxAction? _currentAction) => super.noSuchMethod( Invocation.setter( #currentAction, @@ -327,15 +340,15 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { ); @override - _i19.BoundingBoxResizeAction get currentBoundingBoxResizeAction => + _i20.BoundingBoxResizeAction get currentBoundingBoxResizeAction => (super.noSuchMethod( Invocation.getter(#currentBoundingBoxResizeAction), - returnValue: _i19.BoundingBoxResizeAction.none, - ) as _i19.BoundingBoxResizeAction); + returnValue: _i20.BoundingBoxResizeAction.none, + ) as _i20.BoundingBoxResizeAction); @override set currentBoundingBoxResizeAction( - _i19.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => + _i20.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => super.noSuchMethod( Invocation.setter( #currentBoundingBoxResizeAction, @@ -383,7 +396,7 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { @override _i2.Paint get boxPaint => (super.noSuchMethod( Invocation.getter(#boxPaint), - returnValue: _i20.dummyValue<_i2.Paint>( + returnValue: _i21.dummyValue<_i2.Paint>( this, Invocation.getter(#boxPaint), ), @@ -401,7 +414,7 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { @override _i2.Paint get handlePaint => (super.noSuchMethod( Invocation.getter(#handlePaint), - returnValue: _i20.dummyValue<_i2.Paint>( + returnValue: _i21.dummyValue<_i2.Paint>( this, Invocation.getter(#handlePaint), ), @@ -419,7 +432,7 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { @override _i2.Paint get rotationHandlePaint => (super.noSuchMethod( Invocation.getter(#rotationHandlePaint), - returnValue: _i20.dummyValue<_i2.Paint>( + returnValue: _i21.dummyValue<_i2.Paint>( this, Invocation.getter(#rotationHandlePaint), ), @@ -508,7 +521,7 @@ class MockBoundingBox extends _i1.Mock implements _i17.BoundingBox { /// A class which mocks [CommandManager]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandManager extends _i1.Mock implements _i21.CommandManager { +class MockCommandManager extends _i1.Mock implements _i22.CommandManager { MockCommandManager() { _i1.throwOnMissingStub(this); } @@ -526,7 +539,7 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { ) as List<_i3.Command>); @override - void addGraphicCommand(_i22.GraphicCommand? command) => super.noSuchMethod( + void addGraphicCommand(_i23.GraphicCommand? command) => super.noSuchMethod( Invocation.method( #addGraphicCommand, [command], @@ -534,6 +547,15 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { returnValueForMissingStub: null, ); + @override + void removeCommand(_i3.Command? commandToRemove) => super.noSuchMethod( + Invocation.method( + #removeCommand, + [commandToRemove], + ), + returnValueForMissingStub: null, + ); + @override void setUndoStack(List<_i3.Command>? commands) => super.noSuchMethod( Invocation.method( @@ -611,7 +633,7 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { @override void drawLineToolVertices( _i2.Canvas? canvas, - _i23.VertexStack? vertexStack, + _i24.VertexStack? vertexStack, ) => super.noSuchMethod( Invocation.method( @@ -649,7 +671,7 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { ); @override - _i4.ToolData getNextTool(_i21.ActionType? actionType) => (super.noSuchMethod( + _i4.ToolData getNextTool(_i22.ActionType? actionType) => (super.noSuchMethod( Invocation.method( #getNextTool, [actionType], @@ -676,14 +698,14 @@ class MockCommandManager extends _i1.Mock implements _i21.CommandManager { /// A class which mocks [CommandFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { +class MockCommandFactory extends _i1.Mock implements _i25.CommandFactory { MockCommandFactory() { _i1.throwOnMissingStub(this); } @override _i5.PathCommand createPathCommand( - _i25.PathWithActionHistory? path, + _i26.PathWithActionHistory? path, _i2.Paint? paint, { bool? isCursor = false, }) => @@ -711,7 +733,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { @override _i6.LineCommand createLineCommand( - _i25.PathWithActionHistory? path, + _i26.PathWithActionHistory? path, _i2.Paint? paint, _i2.Offset? startPoint, _i2.Offset? endPoint, @@ -747,7 +769,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { _i2.Offset? topRight, _i2.Offset? bottomLeft, _i2.Offset? bottomRight, - _i26.ShapeStyle? style, + _i27.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -783,7 +805,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { double? radiusX, double? radiusY, _i2.Offset? center, - _i26.ShapeStyle? style, + _i27.ShapeStyle? style, double? angle, ) => (super.noSuchMethod( @@ -817,7 +839,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { @override _i9.ClipboardCommand createClipboardCommand( _i2.Paint? paint, - _i27.Uint8List? imageData, + _i28.Uint8List? imageData, _i2.Offset? offset, double? scale, double? rotation, @@ -852,7 +874,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { _i10.TextCommand createTextCommand( _i2.Offset? point, String? text, - _i28.TextStyle? style, + _i29.TextStyle? style, double? fontSize, _i2.Paint? paint, double? rotationAngle, { @@ -901,7 +923,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { int? numPoints, double? angle, _i2.Offset? center, - _i26.ShapeStyle? style, + _i27.ShapeStyle? style, double? radiusX, double? radiusY, ) => @@ -942,7 +964,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { double? height, double? angle, _i2.Offset? center, - _i26.ShapeStyle? style, + _i27.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -1014,7 +1036,32 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { ) as _i14.DeleteRegionCommand); @override - _i15.ColorChangedCommand createColorChangedCommand( + _i15.ClipAreaCommand createClipAreaCommand( + _i26.PathWithActionHistory? path, + _i2.Paint? paint, + ) => + (super.noSuchMethod( + Invocation.method( + #createClipAreaCommand, + [ + path, + paint, + ], + ), + returnValue: _FakeClipAreaCommand_14( + this, + Invocation.method( + #createClipAreaCommand, + [ + path, + paint, + ], + ), + ), + ) as _i15.ClipAreaCommand); + + @override + _i16.ColorChangedCommand createColorChangedCommand( _i2.Color? oldColor, _i2.Color? newColor, _i2.Paint? paint, @@ -1028,7 +1075,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { paint, ], ), - returnValue: _FakeColorChangedCommand_14( + returnValue: _FakeColorChangedCommand_15( this, Invocation.method( #createColorChangedCommand, @@ -1039,7 +1086,7 @@ class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { ], ), ), - ) as _i15.ColorChangedCommand); + ) as _i16.ColorChangedCommand); } /// A class which mocks [ClipboardCommand]. @@ -1051,10 +1098,10 @@ class MockClipboardCommand extends _i1.Mock implements _i9.ClipboardCommand { } @override - _i27.Uint8List get imageData => (super.noSuchMethod( + _i28.Uint8List get imageData => (super.noSuchMethod( Invocation.getter(#imageData), - returnValue: _i27.Uint8List(0), - ) as _i27.Uint8List); + returnValue: _i28.Uint8List(0), + ) as _i28.Uint8List); @override _i2.Offset get offset => (super.noSuchMethod( @@ -1086,7 +1133,7 @@ class MockClipboardCommand extends _i1.Mock implements _i9.ClipboardCommand { @override String get type => (super.noSuchMethod( Invocation.getter(#type), - returnValue: _i20.dummyValue( + returnValue: _i21.dummyValue( this, Invocation.getter(#type), ), @@ -1101,30 +1148,30 @@ class MockClipboardCommand extends _i1.Mock implements _i9.ClipboardCommand { @override _i2.Paint get paint => (super.noSuchMethod( Invocation.getter(#paint), - returnValue: _i20.dummyValue<_i2.Paint>( + returnValue: _i21.dummyValue<_i2.Paint>( this, Invocation.getter(#paint), ), ) as _i2.Paint); @override - _i16.Logger get logger => (super.noSuchMethod( + _i17.Logger get logger => (super.noSuchMethod( Invocation.getter(#logger), - returnValue: _FakeLogger_15( + returnValue: _FakeLogger_16( this, Invocation.getter(#logger), ), - ) as _i16.Logger); + ) as _i17.Logger); @override - _i29.Future prepareForRuntime() => (super.noSuchMethod( + _i30.Future prepareForRuntime() => (super.noSuchMethod( Invocation.method( #prepareForRuntime, [], ), - returnValue: _i29.Future.value(), - returnValueForMissingStub: _i29.Future.value(), - ) as _i29.Future); + returnValue: _i30.Future.value(), + returnValueForMissingStub: _i30.Future.value(), + ) as _i30.Future); @override void call(_i2.Canvas? canvas) => super.noSuchMethod( @@ -1187,7 +1234,7 @@ class MockImage extends _i1.Mock implements _i2.Image { ); @override - _i29.Future<_i27.ByteData?> toByteData( + _i30.Future<_i28.ByteData?> toByteData( {_i2.ImageByteFormat? format = _i2.ImageByteFormat.rawRgba}) => (super.noSuchMethod( Invocation.method( @@ -1195,8 +1242,8 @@ class MockImage extends _i1.Mock implements _i2.Image { [], {#format: format}, ), - returnValue: _i29.Future<_i27.ByteData?>.value(), - ) as _i29.Future<_i27.ByteData?>); + returnValue: _i30.Future<_i28.ByteData?>.value(), + ) as _i30.Future<_i28.ByteData?>); @override _i2.Image clone() => (super.noSuchMethod( @@ -1204,7 +1251,7 @@ class MockImage extends _i1.Mock implements _i2.Image { #clone, [], ), - returnValue: _FakeImage_16( + returnValue: _FakeImage_17( this, Invocation.method( #clone, diff --git a/test/unit/tools/clipping_tool_test.dart b/test/unit/tools/clipping_tool_test.dart new file mode 100644 index 00000000..ca206d0c --- /dev/null +++ b/test/unit/tools/clipping_tool_test.dart @@ -0,0 +1,139 @@ +import 'dart:ui'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +import 'package:paintroid/core/commands/command_factory/command_factory.dart'; +import 'package:mockito/annotations.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/clip_area_command.dart'; +import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart'; +import 'package:paintroid/core/commands/graphic_factory/graphic_factory.dart'; +import 'package:paintroid/core/commands/path_with_action_history.dart'; +import 'package:paintroid/core/providers/state/canvas_state_provider.dart'; +import 'package:paintroid/core/tools/implementation/clipping_tool.dart'; +import 'package:paintroid/core/providers/object/tools/clipping_tool_state_provider.dart'; +import 'package:paintroid/core/commands/command_manager/command_manager.dart'; + +import 'clipping_tool_test.mocks.dart'; + +@GenerateMocks([ + CommandManager, + CommandFactory, + GraphicFactory, + GraphicCommand, + CanvasStateProvider, + ClippingToolState, + PathWithActionHistory, + ClipAreaCommand, +]) +void main() { + late MockCommandManager commandManager; + late MockCommandFactory commandFactory; + late MockGraphicFactory graphicFactory; + late MockCanvasStateProvider canvasStateProvider; + late MockClippingToolState clippingToolState; + late MockPathWithActionHistory pathMock; + late ClippingTool clippingTool; + late Paint paint; + + setUp(() { + commandManager = MockCommandManager(); + commandFactory = MockCommandFactory(); + graphicFactory = MockGraphicFactory(); + canvasStateProvider = MockCanvasStateProvider(); + clippingToolState = MockClippingToolState(); + pathMock = MockPathWithActionHistory(); + paint = Paint(); + + when(graphicFactory.createPathWithActionHistory()).thenReturn(pathMock); + + when(commandFactory.createClipAreaCommand(any, any)) + .thenAnswer((_) => MockClipAreaCommand()); + + when(clippingToolState.hasActiveClipPath).thenReturn(false); + when(pathMock.actions).thenReturn([MoveToAction(0, 0)]); + + clippingTool = ClippingTool( + commandFactory: commandFactory, + commandManager: commandManager, + graphicFactory: graphicFactory, + clippingToolState: clippingToolState, + canvasStateProvider: canvasStateProvider, + ); + }); + + group('[CLIPPING_TOOL]: onDown', () { + test('[CLIPPING_TOOL]: initializes pathToDraw and resets canvas', () { + when(clippingToolState.hasActiveClipPath).thenReturn(false); + clippingTool.onDown(const Offset(10, 20), paint); + + verify(graphicFactory.createPathWithActionHistory()).called(1); + verify(canvasStateProvider.resetCanvasWithExistingCommands()).called(1); + verifyNever(commandManager.addGraphicCommand(any)); + }); + + test( + '[CLIPPING_TOOL]: clears existing path state when active clip path exists', + () { + when(clippingToolState.hasActiveClipPath).thenReturn(true); + clippingTool.onDown(const Offset(30, 40), paint); + + verify(clippingToolState.clearClipPath()).called(1); + verify(canvasStateProvider.resetCanvasWithExistingCommands()).called(1); + verify(graphicFactory.createPathWithActionHistory()).called(1); + }); + }); + + test('[CLIPPING_TOOL]: onUp finalizes path and updates cached image', () async { + final actions = [MoveToAction(5, 5)]; + when(pathMock.actions).thenReturn(actions); + when(pathMock.lineTo(any, any)).thenAnswer((realInvocation) { + actions.add(LineToAction( + realInvocation.positionalArguments[0], realInvocation.positionalArguments[1])); + }); + + clippingTool.onDown(const Offset(5, 5), paint); + + clearInteractions(clippingToolState); + clearInteractions(canvasStateProvider); + + await clippingTool.onUp(const Offset(15, 15), paint); + + verify(pathMock.lineTo(15, 15)).called(1); + verify(pathMock.close()).called(1); + verify(clippingToolState.setHasActiveClipPath(true)).called(1); + verify(canvasStateProvider.resetCanvasWithExistingCommands()).called(1); + verify(canvasStateProvider.updateCachedImage()).called(1); + }); + + test('[CLIPPING_TOOL]: onCancel stops drawing but keeps path if not drawing', () { + clippingTool.onDown(const Offset(1, 1), paint); + clippingTool.onCancel(); + + expect(clippingTool.pathToDraw, isNotNull); + }); + + test('[CLIPPING_TOOL]: onCheckmark finalizes the clip area and resets path', () { + when(pathMock.actions).thenReturn([MoveToAction(0, 0), LineToAction(1, 1)]); + + clippingTool.onDown(const Offset(0, 0), paint); + clippingTool.onUp(const Offset(1, 1), paint); + + clearInteractions(commandManager); + clearInteractions(commandFactory); + clearInteractions(clippingToolState); + clearInteractions(canvasStateProvider); + + when(clippingToolState.hasActiveClipPath).thenReturn(true); + + clippingTool.onCheckmark(paint); + + verify(clippingToolState.clearClipPath()).called(1); + verify(commandFactory.createClipAreaCommand(pathMock, paint)).called(1); + + final capturedAdd = + verify(commandManager.addGraphicCommand(captureAny)).captured; + expect(capturedAdd.single, isA()); + + verify(canvasStateProvider.resetCanvasWithExistingCommands()).called(1); + expect(clippingTool.pathToDraw, isNull); + }); +} diff --git a/test/unit/tools/clipping_tool_test.mocks.dart b/test/unit/tools/clipping_tool_test.mocks.dart new file mode 100644 index 00000000..3a6a0552 --- /dev/null +++ b/test/unit/tools/clipping_tool_test.mocks.dart @@ -0,0 +1,1483 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in paintroid/test/unit/tools/clipping_tool_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i30; +import 'dart:typed_data' as _i26; +import 'dart:ui' as _i17; + +import 'package:flutter/material.dart' as _i27; +import 'package:logging/logging.dart' as _i20; +import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i29; +import 'package:paintroid/core/commands/command_factory/command_factory.dart' + as _i24; +import 'package:paintroid/core/commands/command_implementation/command.dart' + as _i2; +import 'package:paintroid/core/commands/command_implementation/graphic/clip_area_command.dart' + as _i14; +import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart' + as _i8; +import 'package:paintroid/core/commands/command_implementation/graphic/color_changed_command.dart' + as _i15; +import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart' + as _i13; +import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart' + as _i22; +import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart' + as _i5; +import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart' + as _i4; +import 'package:paintroid/core/commands/command_implementation/graphic/shape/ellipse_shape_command.dart' + as _i7; +import 'package:paintroid/core/commands/command_implementation/graphic/shape/heart_shape_command.dart' + as _i11; +import 'package:paintroid/core/commands/command_implementation/graphic/shape/square_shape_command.dart' + as _i6; +import 'package:paintroid/core/commands/command_implementation/graphic/shape/star_shape_command.dart' + as _i10; +import 'package:paintroid/core/commands/command_implementation/graphic/spray_command.dart' + as _i12; +import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart' + as _i9; +import 'package:paintroid/core/commands/command_manager/command_manager.dart' + as _i21; +import 'package:paintroid/core/commands/graphic_factory/graphic_factory.dart' + as _i28; +import 'package:paintroid/core/commands/path_with_action_history.dart' as _i16; +import 'package:paintroid/core/enums/shape_style.dart' as _i25; +import 'package:paintroid/core/providers/object/tools/clipping_tool_state_provider.dart' + as _i32; +import 'package:paintroid/core/providers/state/canvas_state_data.dart' as _i18; +import 'package:paintroid/core/providers/state/canvas_state_provider.dart' + as _i31; +import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i23; +import 'package:paintroid/core/tools/tool_data.dart' as _i3; +import 'package:riverpod_annotation/riverpod_annotation.dart' as _i19; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeCommand_0 extends _i1.SmartFake implements _i2.Command { + _FakeCommand_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeToolData_1 extends _i1.SmartFake implements _i3.ToolData { + _FakeToolData_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePathCommand_2 extends _i1.SmartFake implements _i4.PathCommand { + _FakePathCommand_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeLineCommand_3 extends _i1.SmartFake implements _i5.LineCommand { + _FakeLineCommand_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSquareShapeCommand_4 extends _i1.SmartFake + implements _i6.SquareShapeCommand { + _FakeSquareShapeCommand_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeEllipseShapeCommand_5 extends _i1.SmartFake + implements _i7.EllipseShapeCommand { + _FakeEllipseShapeCommand_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeClipboardCommand_6 extends _i1.SmartFake + implements _i8.ClipboardCommand { + _FakeClipboardCommand_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeTextCommand_7 extends _i1.SmartFake implements _i9.TextCommand { + _FakeTextCommand_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeStarShapeCommand_8 extends _i1.SmartFake + implements _i10.StarShapeCommand { + _FakeStarShapeCommand_8( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeHeartShapeCommand_9 extends _i1.SmartFake + implements _i11.HeartShapeCommand { + _FakeHeartShapeCommand_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSprayCommand_10 extends _i1.SmartFake implements _i12.SprayCommand { + _FakeSprayCommand_10( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeDeleteRegionCommand_11 extends _i1.SmartFake + implements _i13.DeleteRegionCommand { + _FakeDeleteRegionCommand_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeClipAreaCommand_12 extends _i1.SmartFake + implements _i14.ClipAreaCommand { + _FakeClipAreaCommand_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeColorChangedCommand_13 extends _i1.SmartFake + implements _i15.ColorChangedCommand { + _FakeColorChangedCommand_13( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePathWithActionHistory_14 extends _i1.SmartFake + implements _i16.PathWithActionHistory { + _FakePathWithActionHistory_14( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePictureRecorder_15 extends _i1.SmartFake + implements _i17.PictureRecorder { + _FakePictureRecorder_15( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeCanvas_16 extends _i1.SmartFake implements _i17.Canvas { + _FakeCanvas_16( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSize_17 extends _i1.SmartFake implements _i17.Size { + _FakeSize_17( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeCanvasStateData_18 extends _i1.SmartFake + implements _i18.CanvasStateData { + _FakeCanvasStateData_18( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeNotifierProviderRef_19 extends _i1.SmartFake + implements _i19.NotifierProviderRef { + _FakeNotifierProviderRef_19( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeLogger_20 extends _i1.SmartFake implements _i20.Logger { + _FakeLogger_20( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAutoDisposeNotifierProviderRef_21 extends _i1.SmartFake + implements _i19.AutoDisposeNotifierProviderRef { + _FakeAutoDisposeNotifierProviderRef_21( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakePath_22 extends _i1.SmartFake implements _i17.Path { + _FakePath_22( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [CommandManager]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockCommandManager extends _i1.Mock implements _i21.CommandManager { + MockCommandManager() { + _i1.throwOnMissingStub(this); + } + + @override + List<_i2.Command> get redoStack => (super.noSuchMethod( + Invocation.getter(#redoStack), + returnValue: <_i2.Command>[], + ) as List<_i2.Command>); + + @override + List<_i2.Command> get undoStack => (super.noSuchMethod( + Invocation.getter(#undoStack), + returnValue: <_i2.Command>[], + ) as List<_i2.Command>); + + @override + void addGraphicCommand(_i22.GraphicCommand? command) => super.noSuchMethod( + Invocation.method( + #addGraphicCommand, + [command], + ), + returnValueForMissingStub: null, + ); + + @override + void removeCommand(_i2.Command? commandToRemove) => super.noSuchMethod( + Invocation.method( + #removeCommand, + [commandToRemove], + ), + returnValueForMissingStub: null, + ); + + @override + void setUndoStack(List<_i2.Command>? commands) => super.noSuchMethod( + Invocation.method( + #setUndoStack, + [commands], + ), + returnValueForMissingStub: null, + ); + + @override + void executeLastCommand(_i17.Canvas? canvas) => super.noSuchMethod( + Invocation.method( + #executeLastCommand, + [canvas], + ), + returnValueForMissingStub: null, + ); + + @override + void executeAllCommands(_i17.Canvas? canvas) => super.noSuchMethod( + Invocation.method( + #executeAllCommands, + [canvas], + ), + returnValueForMissingStub: null, + ); + + @override + void discardLastCommand() => super.noSuchMethod( + Invocation.method( + #discardLastCommand, + [], + ), + returnValueForMissingStub: null, + ); + + @override + void clearUndoStack({Iterable<_i2.Command>? newCommands}) => + super.noSuchMethod( + Invocation.method( + #clearUndoStack, + [], + {#newCommands: newCommands}, + ), + returnValueForMissingStub: null, + ); + + @override + void clearRedoStack() => super.noSuchMethod( + Invocation.method( + #clearRedoStack, + [], + ), + returnValueForMissingStub: null, + ); + + @override + void drawLineToolGhostPaths( + _i17.Canvas? canvas, + _i5.LineCommand? ingoingGhostPathCommand, + _i5.LineCommand? outgoingGhostPathCommand, + ) => + super.noSuchMethod( + Invocation.method( + #drawLineToolGhostPaths, + [ + canvas, + ingoingGhostPathCommand, + outgoingGhostPathCommand, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void drawLineToolVertices( + _i17.Canvas? canvas, + _i23.VertexStack? vertexStack, + ) => + super.noSuchMethod( + Invocation.method( + #drawLineToolVertices, + [ + canvas, + vertexStack, + ], + ), + returnValueForMissingStub: null, + ); + + @override + _i2.Command redo() => (super.noSuchMethod( + Invocation.method( + #redo, + [], + ), + returnValue: _FakeCommand_0( + this, + Invocation.method( + #redo, + [], + ), + ), + ) as _i2.Command); + + @override + void undo() => super.noSuchMethod( + Invocation.method( + #undo, + [], + ), + returnValueForMissingStub: null, + ); + + @override + _i3.ToolData getNextTool(_i21.ActionType? actionType) => (super.noSuchMethod( + Invocation.method( + #getNextTool, + [actionType], + ), + returnValue: _FakeToolData_1( + this, + Invocation.method( + #getNextTool, + [actionType], + ), + ), + ) as _i3.ToolData); + + @override + List<_i5.LineCommand> getTopLineCommandSequence() => (super.noSuchMethod( + Invocation.method( + #getTopLineCommandSequence, + [], + ), + returnValue: <_i5.LineCommand>[], + ) as List<_i5.LineCommand>); +} + +/// A class which mocks [CommandFactory]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { + MockCommandFactory() { + _i1.throwOnMissingStub(this); + } + + @override + _i4.PathCommand createPathCommand( + _i16.PathWithActionHistory? path, + _i17.Paint? paint, { + bool? isCursor = false, + }) => + (super.noSuchMethod( + Invocation.method( + #createPathCommand, + [ + path, + paint, + ], + {#isCursor: isCursor}, + ), + returnValue: _FakePathCommand_2( + this, + Invocation.method( + #createPathCommand, + [ + path, + paint, + ], + {#isCursor: isCursor}, + ), + ), + ) as _i4.PathCommand); + + @override + _i5.LineCommand createLineCommand( + _i16.PathWithActionHistory? path, + _i17.Paint? paint, + _i17.Offset? startPoint, + _i17.Offset? endPoint, + ) => + (super.noSuchMethod( + Invocation.method( + #createLineCommand, + [ + path, + paint, + startPoint, + endPoint, + ], + ), + returnValue: _FakeLineCommand_3( + this, + Invocation.method( + #createLineCommand, + [ + path, + paint, + startPoint, + endPoint, + ], + ), + ), + ) as _i5.LineCommand); + + @override + _i6.SquareShapeCommand createSquareShapeCommand( + _i17.Paint? paint, + _i17.Offset? topLeft, + _i17.Offset? topRight, + _i17.Offset? bottomLeft, + _i17.Offset? bottomRight, + _i25.ShapeStyle? style, + ) => + (super.noSuchMethod( + Invocation.method( + #createSquareShapeCommand, + [ + paint, + topLeft, + topRight, + bottomLeft, + bottomRight, + style, + ], + ), + returnValue: _FakeSquareShapeCommand_4( + this, + Invocation.method( + #createSquareShapeCommand, + [ + paint, + topLeft, + topRight, + bottomLeft, + bottomRight, + style, + ], + ), + ), + ) as _i6.SquareShapeCommand); + + @override + _i7.EllipseShapeCommand createEllipseShapeCommand( + _i17.Paint? paint, + double? radiusX, + double? radiusY, + _i17.Offset? center, + _i25.ShapeStyle? style, + double? angle, + ) => + (super.noSuchMethod( + Invocation.method( + #createEllipseShapeCommand, + [ + paint, + radiusX, + radiusY, + center, + style, + angle, + ], + ), + returnValue: _FakeEllipseShapeCommand_5( + this, + Invocation.method( + #createEllipseShapeCommand, + [ + paint, + radiusX, + radiusY, + center, + style, + angle, + ], + ), + ), + ) as _i7.EllipseShapeCommand); + + @override + _i8.ClipboardCommand createClipboardCommand( + _i17.Paint? paint, + _i26.Uint8List? imageData, + _i17.Offset? offset, + double? scale, + double? rotation, + ) => + (super.noSuchMethod( + Invocation.method( + #createClipboardCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + returnValue: _FakeClipboardCommand_6( + this, + Invocation.method( + #createClipboardCommand, + [ + paint, + imageData, + offset, + scale, + rotation, + ], + ), + ), + ) as _i8.ClipboardCommand); + + @override + _i9.TextCommand createTextCommand( + _i17.Offset? point, + String? text, + _i27.TextStyle? style, + double? fontSize, + _i17.Paint? paint, + double? rotationAngle, { + double? scaleX = 1.0, + double? scaleY = 1.0, + }) => + (super.noSuchMethod( + Invocation.method( + #createTextCommand, + [ + point, + text, + style, + fontSize, + paint, + rotationAngle, + ], + { + #scaleX: scaleX, + #scaleY: scaleY, + }, + ), + returnValue: _FakeTextCommand_7( + this, + Invocation.method( + #createTextCommand, + [ + point, + text, + style, + fontSize, + paint, + rotationAngle, + ], + { + #scaleX: scaleX, + #scaleY: scaleY, + }, + ), + ), + ) as _i9.TextCommand); + + @override + _i10.StarShapeCommand createStarShapeCommand( + _i17.Paint? paint, + int? numPoints, + double? angle, + _i17.Offset? center, + _i25.ShapeStyle? style, + double? radiusX, + double? radiusY, + ) => + (super.noSuchMethod( + Invocation.method( + #createStarShapeCommand, + [ + paint, + numPoints, + angle, + center, + style, + radiusX, + radiusY, + ], + ), + returnValue: _FakeStarShapeCommand_8( + this, + Invocation.method( + #createStarShapeCommand, + [ + paint, + numPoints, + angle, + center, + style, + radiusX, + radiusY, + ], + ), + ), + ) as _i10.StarShapeCommand); + + @override + _i11.HeartShapeCommand createHeartShapeCommand( + _i17.Paint? paint, + double? width, + double? height, + double? angle, + _i17.Offset? center, + _i25.ShapeStyle? style, + ) => + (super.noSuchMethod( + Invocation.method( + #createHeartShapeCommand, + [ + paint, + width, + height, + angle, + center, + style, + ], + ), + returnValue: _FakeHeartShapeCommand_9( + this, + Invocation.method( + #createHeartShapeCommand, + [ + paint, + width, + height, + angle, + center, + style, + ], + ), + ), + ) as _i11.HeartShapeCommand); + + @override + _i12.SprayCommand createSprayCommand( + List<_i17.Offset>? points, + _i17.Paint? paint, + ) => + (super.noSuchMethod( + Invocation.method( + #createSprayCommand, + [ + points, + paint, + ], + ), + returnValue: _FakeSprayCommand_10( + this, + Invocation.method( + #createSprayCommand, + [ + points, + paint, + ], + ), + ), + ) as _i12.SprayCommand); + + @override + _i13.DeleteRegionCommand createDeleteRegionCommand(_i17.Rect? region) => + (super.noSuchMethod( + Invocation.method( + #createDeleteRegionCommand, + [region], + ), + returnValue: _FakeDeleteRegionCommand_11( + this, + Invocation.method( + #createDeleteRegionCommand, + [region], + ), + ), + ) as _i13.DeleteRegionCommand); + + @override + _i14.ClipAreaCommand createClipAreaCommand( + _i16.PathWithActionHistory? path, + _i17.Paint? paint, + ) => + (super.noSuchMethod( + Invocation.method( + #createClipAreaCommand, + [ + path, + paint, + ], + ), + returnValue: _FakeClipAreaCommand_12( + this, + Invocation.method( + #createClipAreaCommand, + [ + path, + paint, + ], + ), + ), + ) as _i14.ClipAreaCommand); + + @override + _i15.ColorChangedCommand createColorChangedCommand( + _i17.Color? oldColor, + _i17.Color? newColor, + _i17.Paint? paint, + ) => + (super.noSuchMethod( + Invocation.method( + #createColorChangedCommand, + [ + oldColor, + newColor, + paint, + ], + ), + returnValue: _FakeColorChangedCommand_13( + this, + Invocation.method( + #createColorChangedCommand, + [ + oldColor, + newColor, + paint, + ], + ), + ), + ) as _i15.ColorChangedCommand); +} + +/// A class which mocks [GraphicFactory]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockGraphicFactory extends _i1.Mock implements _i28.GraphicFactory { + MockGraphicFactory() { + _i1.throwOnMissingStub(this); + } + + @override + _i17.Paint createPaint() => (super.noSuchMethod( + Invocation.method( + #createPaint, + [], + ), + returnValue: _i29.dummyValue<_i17.Paint>( + this, + Invocation.method( + #createPaint, + [], + ), + ), + ) as _i17.Paint); + + @override + _i16.PathWithActionHistory createPathWithActionHistory() => + (super.noSuchMethod( + Invocation.method( + #createPathWithActionHistory, + [], + ), + returnValue: _FakePathWithActionHistory_14( + this, + Invocation.method( + #createPathWithActionHistory, + [], + ), + ), + ) as _i16.PathWithActionHistory); + + @override + _i17.PictureRecorder createPictureRecorder() => (super.noSuchMethod( + Invocation.method( + #createPictureRecorder, + [], + ), + returnValue: _FakePictureRecorder_15( + this, + Invocation.method( + #createPictureRecorder, + [], + ), + ), + ) as _i17.PictureRecorder); + + @override + _i17.Canvas createCanvasWithRecorder(_i17.PictureRecorder? recorder) => + (super.noSuchMethod( + Invocation.method( + #createCanvasWithRecorder, + [recorder], + ), + returnValue: _FakeCanvas_16( + this, + Invocation.method( + #createCanvasWithRecorder, + [recorder], + ), + ), + ) as _i17.Canvas); + + @override + _i17.Paint createWatercolorPaint( + _i17.Paint? originalPaint, + double? blurSigma, + ) => + (super.noSuchMethod( + Invocation.method( + #createWatercolorPaint, + [ + originalPaint, + blurSigma, + ], + ), + returnValue: _i29.dummyValue<_i17.Paint>( + this, + Invocation.method( + #createWatercolorPaint, + [ + originalPaint, + blurSigma, + ], + ), + ), + ) as _i17.Paint); + + @override + _i17.Paint copyPaint(_i17.Paint? original) => (super.noSuchMethod( + Invocation.method( + #copyPaint, + [original], + ), + returnValue: _i29.dummyValue<_i17.Paint>( + this, + Invocation.method( + #copyPaint, + [original], + ), + ), + ) as _i17.Paint); +} + +/// A class which mocks [GraphicCommand]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockGraphicCommand extends _i1.Mock implements _i22.GraphicCommand { + MockGraphicCommand() { + _i1.throwOnMissingStub(this); + } + + @override + _i17.Paint get paint => (super.noSuchMethod( + Invocation.getter(#paint), + returnValue: _i29.dummyValue<_i17.Paint>( + this, + Invocation.getter(#paint), + ), + ) as _i17.Paint); + + @override + List get props => (super.noSuchMethod( + Invocation.getter(#props), + returnValue: [], + ) as List); + + @override + void call(_i17.Canvas? canvas) => super.noSuchMethod( + Invocation.method( + #call, + [canvas], + ), + returnValueForMissingStub: null, + ); + + @override + Map toJson() => (super.noSuchMethod( + Invocation.method( + #toJson, + [], + ), + returnValue: {}, + ) as Map); + + @override + _i30.Future prepareForRuntime() => (super.noSuchMethod( + Invocation.method( + #prepareForRuntime, + [], + ), + returnValue: _i30.Future.value(), + returnValueForMissingStub: _i30.Future.value(), + ) as _i30.Future); +} + +/// A class which mocks [CanvasStateProvider]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockCanvasStateProvider extends _i1.Mock + implements _i31.CanvasStateProvider { + MockCanvasStateProvider() { + _i1.throwOnMissingStub(this); + } + + @override + _i17.Size get initialCanvasSize => (super.noSuchMethod( + Invocation.getter(#initialCanvasSize), + returnValue: _FakeSize_17( + this, + Invocation.getter(#initialCanvasSize), + ), + ) as _i17.Size); + + @override + set initialCanvasSize(_i17.Size? _initialCanvasSize) => super.noSuchMethod( + Invocation.setter( + #initialCanvasSize, + _initialCanvasSize, + ), + returnValueForMissingStub: null, + ); + + @override + _i18.CanvasStateData get currentState => (super.noSuchMethod( + Invocation.getter(#currentState), + returnValue: _FakeCanvasStateData_18( + this, + Invocation.getter(#currentState), + ), + ) as _i18.CanvasStateData); + + @override + _i19.NotifierProviderRef<_i18.CanvasStateData> get ref => (super.noSuchMethod( + Invocation.getter(#ref), + returnValue: _FakeNotifierProviderRef_19<_i18.CanvasStateData>( + this, + Invocation.getter(#ref), + ), + ) as _i19.NotifierProviderRef<_i18.CanvasStateData>); + + @override + _i18.CanvasStateData get state => (super.noSuchMethod( + Invocation.getter(#state), + returnValue: _FakeCanvasStateData_18( + this, + Invocation.getter(#state), + ), + ) as _i18.CanvasStateData); + + @override + set state(_i18.CanvasStateData? value) => super.noSuchMethod( + Invocation.setter( + #state, + value, + ), + returnValueForMissingStub: null, + ); + + @override + _i20.Logger get logger => (super.noSuchMethod( + Invocation.getter(#logger), + returnValue: _FakeLogger_20( + this, + Invocation.getter(#logger), + ), + ) as _i20.Logger); + + @override + void requestResetView() => super.noSuchMethod( + Invocation.method( + #requestResetView, + [], + ), + returnValueForMissingStub: null, + ); + + @override + _i18.CanvasStateData build() => (super.noSuchMethod( + Invocation.method( + #build, + [], + ), + returnValue: _FakeCanvasStateData_18( + this, + Invocation.method( + #build, + [], + ), + ), + ) as _i18.CanvasStateData); + + @override + void setBackgroundImage(_i17.Image? image) => super.noSuchMethod( + Invocation.method( + #setBackgroundImage, + [image], + ), + returnValueForMissingStub: null, + ); + + @override + void clearBackgroundImageAndResetDimensions() => super.noSuchMethod( + Invocation.method( + #clearBackgroundImageAndResetDimensions, + [], + ), + returnValueForMissingStub: null, + ); + + @override + _i30.Future updateCachedImage() => (super.noSuchMethod( + Invocation.method( + #updateCachedImage, + [], + ), + returnValue: _i30.Future.value(), + returnValueForMissingStub: _i30.Future.value(), + ) as _i30.Future); + + @override + _i30.Future resetCanvasWithNewCommands( + Iterable<_i2.Command>? commands) => + (super.noSuchMethod( + Invocation.method( + #resetCanvasWithNewCommands, + [commands], + ), + returnValue: _i30.Future.value(), + returnValueForMissingStub: _i30.Future.value(), + ) as _i30.Future); + + @override + _i30.Future resetCanvasWithExistingCommands() => (super.noSuchMethod( + Invocation.method( + #resetCanvasWithExistingCommands, + [], + ), + returnValue: _i30.Future.value(), + returnValueForMissingStub: _i30.Future.value(), + ) as _i30.Future); + + @override + void listenSelf( + void Function( + _i18.CanvasStateData?, + _i18.CanvasStateData, + )? listener, { + void Function( + Object, + StackTrace, + )? onError, + }) => + super.noSuchMethod( + Invocation.method( + #listenSelf, + [listener], + {#onError: onError}, + ), + returnValueForMissingStub: null, + ); + + @override + bool updateShouldNotify( + _i18.CanvasStateData? previous, + _i18.CanvasStateData? next, + ) => + (super.noSuchMethod( + Invocation.method( + #updateShouldNotify, + [ + previous, + next, + ], + ), + returnValue: false, + ) as bool); +} + +/// A class which mocks [ClippingToolState]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockClippingToolState extends _i1.Mock implements _i32.ClippingToolState { + MockClippingToolState() { + _i1.throwOnMissingStub(this); + } + + @override + bool get hasActiveClipPath => (super.noSuchMethod( + Invocation.getter(#hasActiveClipPath), + returnValue: false, + ) as bool); + + @override + _i19.AutoDisposeNotifierProviderRef get ref => (super.noSuchMethod( + Invocation.getter(#ref), + returnValue: _FakeAutoDisposeNotifierProviderRef_21( + this, + Invocation.getter(#ref), + ), + ) as _i19.AutoDisposeNotifierProviderRef); + + @override + bool get state => (super.noSuchMethod( + Invocation.getter(#state), + returnValue: false, + ) as bool); + + @override + set state(bool? value) => super.noSuchMethod( + Invocation.setter( + #state, + value, + ), + returnValueForMissingStub: null, + ); + + @override + bool build() => (super.noSuchMethod( + Invocation.method( + #build, + [], + ), + returnValue: false, + ) as bool); + + @override + void setHasActiveClipPath(bool? hasActive) => super.noSuchMethod( + Invocation.method( + #setHasActiveClipPath, + [hasActive], + ), + returnValueForMissingStub: null, + ); + + @override + void clearClipPath() => super.noSuchMethod( + Invocation.method( + #clearClipPath, + [], + ), + returnValueForMissingStub: null, + ); + + @override + void listenSelf( + void Function( + bool?, + bool, + )? listener, { + void Function( + Object, + StackTrace, + )? onError, + }) => + super.noSuchMethod( + Invocation.method( + #listenSelf, + [listener], + {#onError: onError}, + ), + returnValueForMissingStub: null, + ); + + @override + bool updateShouldNotify( + bool? previous, + bool? next, + ) => + (super.noSuchMethod( + Invocation.method( + #updateShouldNotify, + [ + previous, + next, + ], + ), + returnValue: false, + ) as bool); +} + +/// A class which mocks [PathWithActionHistory]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockPathWithActionHistory extends _i1.Mock + implements _i16.PathWithActionHistory { + MockPathWithActionHistory() { + _i1.throwOnMissingStub(this); + } + + @override + _i17.Path get path => (super.noSuchMethod( + Invocation.getter(#path), + returnValue: _FakePath_22( + this, + Invocation.getter(#path), + ), + ) as _i17.Path); + + @override + List<_i16.PathAction> get actions => (super.noSuchMethod( + Invocation.getter(#actions), + returnValue: <_i16.PathAction>[], + ) as List<_i16.PathAction>); + + @override + void moveTo( + double? x, + double? y, + ) => + super.noSuchMethod( + Invocation.method( + #moveTo, + [ + x, + y, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void lineTo( + double? x, + double? y, + ) => + super.noSuchMethod( + Invocation.method( + #lineTo, + [ + x, + y, + ], + ), + returnValueForMissingStub: null, + ); + + @override + void close() => super.noSuchMethod( + Invocation.method( + #close, + [], + ), + returnValueForMissingStub: null, + ); + + @override + Map toJson() => (super.noSuchMethod( + Invocation.method( + #toJson, + [], + ), + returnValue: {}, + ) as Map); +} + +/// A class which mocks [ClipAreaCommand]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockClipAreaCommand extends _i1.Mock implements _i14.ClipAreaCommand { + MockClipAreaCommand() { + _i1.throwOnMissingStub(this); + } + + @override + String get type => (super.noSuchMethod( + Invocation.getter(#type), + returnValue: _i29.dummyValue( + this, + Invocation.getter(#type), + ), + ) as String); + + @override + int get version => (super.noSuchMethod( + Invocation.getter(#version), + returnValue: 0, + ) as int); + + @override + _i16.PathWithActionHistory get clipPathData => (super.noSuchMethod( + Invocation.getter(#clipPathData), + returnValue: _FakePathWithActionHistory_14( + this, + Invocation.getter(#clipPathData), + ), + ) as _i16.PathWithActionHistory); + + @override + List get props => (super.noSuchMethod( + Invocation.getter(#props), + returnValue: [], + ) as List); + + @override + _i17.Paint get paint => (super.noSuchMethod( + Invocation.getter(#paint), + returnValue: _i29.dummyValue<_i17.Paint>( + this, + Invocation.getter(#paint), + ), + ) as _i17.Paint); + + @override + void call(_i17.Canvas? canvas) => super.noSuchMethod( + Invocation.method( + #call, + [canvas], + ), + returnValueForMissingStub: null, + ); + + @override + Map toJson() => (super.noSuchMethod( + Invocation.method( + #toJson, + [], + ), + returnValue: {}, + ) as Map); + + @override + _i30.Future prepareForRuntime() => (super.noSuchMethod( + Invocation.method( + #prepareForRuntime, + [], + ), + returnValue: _i30.Future.value(), + returnValueForMissingStub: _i30.Future.value(), + ) as _i30.Future); +} diff --git a/test/unit/tools/pipette_tool_test.mocks.dart b/test/unit/tools/pipette_tool_test.mocks.dart index 20b51656..9f72184f 100644 --- a/test/unit/tools/pipette_tool_test.mocks.dart +++ b/test/unit/tools/pipette_tool_test.mocks.dart @@ -3,26 +3,28 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i31; -import 'dart:typed_data' as _i25; -import 'dart:ui' as _i16; +import 'dart:async' as _i32; +import 'dart:typed_data' as _i26; +import 'dart:ui' as _i17; -import 'package:flutter/material.dart' as _i26; -import 'package:logging/logging.dart' as _i18; +import 'package:flutter/material.dart' as _i27; +import 'package:logging/logging.dart' as _i19; import 'package:mockito/mockito.dart' as _i1; -import 'package:mockito/src/dummies.dart' as _i28; +import 'package:mockito/src/dummies.dart' as _i29; import 'package:paintroid/core/commands/command_factory/command_factory.dart' - as _i23; + as _i24; import 'package:paintroid/core/commands/command_implementation/command.dart' as _i2; +import 'package:paintroid/core/commands/command_implementation/graphic/clip_area_command.dart' + as _i14; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart' as _i8; import 'package:paintroid/core/commands/command_implementation/graphic/color_changed_command.dart' - as _i14; + as _i15; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart' as _i13; import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart' - as _i21; + as _i22; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart' as _i5; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart' @@ -40,19 +42,19 @@ import 'package:paintroid/core/commands/command_implementation/graphic/spray_com import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart' as _i9; import 'package:paintroid/core/commands/command_manager/command_manager.dart' - as _i20; + as _i21; import 'package:paintroid/core/commands/graphic_factory/graphic_factory.dart' - as _i32; -import 'package:paintroid/core/commands/path_with_action_history.dart' as _i19; -import 'package:paintroid/core/enums/shape_style.dart' as _i24; -import 'package:paintroid/core/enums/tool_types.dart' as _i29; -import 'package:paintroid/core/providers/state/canvas_state_data.dart' as _i17; + as _i33; +import 'package:paintroid/core/commands/path_with_action_history.dart' as _i20; +import 'package:paintroid/core/enums/shape_style.dart' as _i25; +import 'package:paintroid/core/enums/tool_types.dart' as _i30; +import 'package:paintroid/core/providers/state/canvas_state_data.dart' as _i18; import 'package:paintroid/core/providers/state/canvas_state_provider.dart' - as _i30; -import 'package:paintroid/core/providers/state/paint_provider.dart' as _i27; -import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i22; + as _i31; +import 'package:paintroid/core/providers/state/paint_provider.dart' as _i28; +import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i23; import 'package:paintroid/core/tools/tool_data.dart' as _i3; -import 'package:riverpod_annotation/riverpod_annotation.dart' as _i15; +import 'package:riverpod_annotation/riverpod_annotation.dart' as _i16; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -193,9 +195,20 @@ class _FakeDeleteRegionCommand_11 extends _i1.SmartFake ); } -class _FakeColorChangedCommand_12 extends _i1.SmartFake - implements _i14.ColorChangedCommand { - _FakeColorChangedCommand_12( +class _FakeClipAreaCommand_12 extends _i1.SmartFake + implements _i14.ClipAreaCommand { + _FakeClipAreaCommand_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeColorChangedCommand_13 extends _i1.SmartFake + implements _i15.ColorChangedCommand { + _FakeColorChangedCommand_13( Object parent, Invocation parentInvocation, ) : super( @@ -204,9 +217,9 @@ class _FakeColorChangedCommand_12 extends _i1.SmartFake ); } -class _FakeNotifierProviderRef_13 extends _i1.SmartFake - implements _i15.NotifierProviderRef { - _FakeNotifierProviderRef_13( +class _FakeNotifierProviderRef_14 extends _i1.SmartFake + implements _i16.NotifierProviderRef { + _FakeNotifierProviderRef_14( Object parent, Invocation parentInvocation, ) : super( @@ -215,8 +228,8 @@ class _FakeNotifierProviderRef_13 extends _i1.SmartFake ); } -class _FakeSize_14 extends _i1.SmartFake implements _i16.Size { - _FakeSize_14( +class _FakeSize_15 extends _i1.SmartFake implements _i17.Size { + _FakeSize_15( Object parent, Invocation parentInvocation, ) : super( @@ -225,9 +238,9 @@ class _FakeSize_14 extends _i1.SmartFake implements _i16.Size { ); } -class _FakeCanvasStateData_15 extends _i1.SmartFake - implements _i17.CanvasStateData { - _FakeCanvasStateData_15( +class _FakeCanvasStateData_16 extends _i1.SmartFake + implements _i18.CanvasStateData { + _FakeCanvasStateData_16( Object parent, Invocation parentInvocation, ) : super( @@ -236,8 +249,8 @@ class _FakeCanvasStateData_15 extends _i1.SmartFake ); } -class _FakeLogger_16 extends _i1.SmartFake implements _i18.Logger { - _FakeLogger_16( +class _FakeLogger_17 extends _i1.SmartFake implements _i19.Logger { + _FakeLogger_17( Object parent, Invocation parentInvocation, ) : super( @@ -246,8 +259,8 @@ class _FakeLogger_16 extends _i1.SmartFake implements _i18.Logger { ); } -class _FakeColor_17 extends _i1.SmartFake implements _i16.Color { - _FakeColor_17( +class _FakeColor_18 extends _i1.SmartFake implements _i17.Color { + _FakeColor_18( Object parent, Invocation parentInvocation, ) : super( @@ -256,9 +269,9 @@ class _FakeColor_17 extends _i1.SmartFake implements _i16.Color { ); } -class _FakePathWithActionHistory_18 extends _i1.SmartFake - implements _i19.PathWithActionHistory { - _FakePathWithActionHistory_18( +class _FakePathWithActionHistory_19 extends _i1.SmartFake + implements _i20.PathWithActionHistory { + _FakePathWithActionHistory_19( Object parent, Invocation parentInvocation, ) : super( @@ -267,9 +280,9 @@ class _FakePathWithActionHistory_18 extends _i1.SmartFake ); } -class _FakePictureRecorder_19 extends _i1.SmartFake - implements _i16.PictureRecorder { - _FakePictureRecorder_19( +class _FakePictureRecorder_20 extends _i1.SmartFake + implements _i17.PictureRecorder { + _FakePictureRecorder_20( Object parent, Invocation parentInvocation, ) : super( @@ -278,8 +291,8 @@ class _FakePictureRecorder_19 extends _i1.SmartFake ); } -class _FakeCanvas_20 extends _i1.SmartFake implements _i16.Canvas { - _FakeCanvas_20( +class _FakeCanvas_21 extends _i1.SmartFake implements _i17.Canvas { + _FakeCanvas_21( Object parent, Invocation parentInvocation, ) : super( @@ -291,7 +304,7 @@ class _FakeCanvas_20 extends _i1.SmartFake implements _i16.Canvas { /// A class which mocks [CommandManager]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandManager extends _i1.Mock implements _i20.CommandManager { +class MockCommandManager extends _i1.Mock implements _i21.CommandManager { MockCommandManager() { _i1.throwOnMissingStub(this); } @@ -309,7 +322,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { ) as List<_i2.Command>); @override - void addGraphicCommand(_i21.GraphicCommand? command) => super.noSuchMethod( + void addGraphicCommand(_i22.GraphicCommand? command) => super.noSuchMethod( Invocation.method( #addGraphicCommand, [command], @@ -317,6 +330,15 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { returnValueForMissingStub: null, ); + @override + void removeCommand(_i2.Command? commandToRemove) => super.noSuchMethod( + Invocation.method( + #removeCommand, + [commandToRemove], + ), + returnValueForMissingStub: null, + ); + @override void setUndoStack(List<_i2.Command>? commands) => super.noSuchMethod( Invocation.method( @@ -327,7 +349,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { ); @override - void executeLastCommand(_i16.Canvas? canvas) => super.noSuchMethod( + void executeLastCommand(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #executeLastCommand, [canvas], @@ -336,7 +358,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { ); @override - void executeAllCommands(_i16.Canvas? canvas) => super.noSuchMethod( + void executeAllCommands(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #executeAllCommands, [canvas], @@ -375,7 +397,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { @override void drawLineToolGhostPaths( - _i16.Canvas? canvas, + _i17.Canvas? canvas, _i5.LineCommand? ingoingGhostPathCommand, _i5.LineCommand? outgoingGhostPathCommand, ) => @@ -393,8 +415,8 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { @override void drawLineToolVertices( - _i16.Canvas? canvas, - _i22.VertexStack? vertexStack, + _i17.Canvas? canvas, + _i23.VertexStack? vertexStack, ) => super.noSuchMethod( Invocation.method( @@ -432,7 +454,7 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { ); @override - _i3.ToolData getNextTool(_i20.ActionType? actionType) => (super.noSuchMethod( + _i3.ToolData getNextTool(_i21.ActionType? actionType) => (super.noSuchMethod( Invocation.method( #getNextTool, [actionType], @@ -459,15 +481,15 @@ class MockCommandManager extends _i1.Mock implements _i20.CommandManager { /// A class which mocks [CommandFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { +class MockCommandFactory extends _i1.Mock implements _i24.CommandFactory { MockCommandFactory() { _i1.throwOnMissingStub(this); } @override _i4.PathCommand createPathCommand( - _i19.PathWithActionHistory? path, - _i16.Paint? paint, { + _i20.PathWithActionHistory? path, + _i17.Paint? paint, { bool? isCursor = false, }) => (super.noSuchMethod( @@ -494,10 +516,10 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i5.LineCommand createLineCommand( - _i19.PathWithActionHistory? path, - _i16.Paint? paint, - _i16.Offset? startPoint, - _i16.Offset? endPoint, + _i20.PathWithActionHistory? path, + _i17.Paint? paint, + _i17.Offset? startPoint, + _i17.Offset? endPoint, ) => (super.noSuchMethod( Invocation.method( @@ -525,12 +547,12 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i6.SquareShapeCommand createSquareShapeCommand( - _i16.Paint? paint, - _i16.Offset? topLeft, - _i16.Offset? topRight, - _i16.Offset? bottomLeft, - _i16.Offset? bottomRight, - _i24.ShapeStyle? style, + _i17.Paint? paint, + _i17.Offset? topLeft, + _i17.Offset? topRight, + _i17.Offset? bottomLeft, + _i17.Offset? bottomRight, + _i25.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -562,11 +584,11 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i7.EllipseShapeCommand createEllipseShapeCommand( - _i16.Paint? paint, + _i17.Paint? paint, double? radiusX, double? radiusY, - _i16.Offset? center, - _i24.ShapeStyle? style, + _i17.Offset? center, + _i25.ShapeStyle? style, double? angle, ) => (super.noSuchMethod( @@ -599,9 +621,9 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i8.ClipboardCommand createClipboardCommand( - _i16.Paint? paint, - _i25.Uint8List? imageData, - _i16.Offset? offset, + _i17.Paint? paint, + _i26.Uint8List? imageData, + _i17.Offset? offset, double? scale, double? rotation, ) => @@ -633,11 +655,11 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i9.TextCommand createTextCommand( - _i16.Offset? point, + _i17.Offset? point, String? text, - _i26.TextStyle? style, + _i27.TextStyle? style, double? fontSize, - _i16.Paint? paint, + _i17.Paint? paint, double? rotationAngle, { double? scaleX = 1.0, double? scaleY = 1.0, @@ -680,11 +702,11 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i10.StarShapeCommand createStarShapeCommand( - _i16.Paint? paint, + _i17.Paint? paint, int? numPoints, double? angle, - _i16.Offset? center, - _i24.ShapeStyle? style, + _i17.Offset? center, + _i25.ShapeStyle? style, double? radiusX, double? radiusY, ) => @@ -720,12 +742,12 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i11.HeartShapeCommand createHeartShapeCommand( - _i16.Paint? paint, + _i17.Paint? paint, double? width, double? height, double? angle, - _i16.Offset? center, - _i24.ShapeStyle? style, + _i17.Offset? center, + _i25.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -757,8 +779,8 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { @override _i12.SprayCommand createSprayCommand( - List<_i16.Offset>? points, - _i16.Paint? paint, + List<_i17.Offset>? points, + _i17.Paint? paint, ) => (super.noSuchMethod( Invocation.method( @@ -781,7 +803,7 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { ) as _i12.SprayCommand); @override - _i13.DeleteRegionCommand createDeleteRegionCommand(_i16.Rect? region) => + _i13.DeleteRegionCommand createDeleteRegionCommand(_i17.Rect? region) => (super.noSuchMethod( Invocation.method( #createDeleteRegionCommand, @@ -797,10 +819,35 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { ) as _i13.DeleteRegionCommand); @override - _i14.ColorChangedCommand createColorChangedCommand( - _i16.Color? oldColor, - _i16.Color? newColor, - _i16.Paint? paint, + _i14.ClipAreaCommand createClipAreaCommand( + _i20.PathWithActionHistory? path, + _i17.Paint? paint, + ) => + (super.noSuchMethod( + Invocation.method( + #createClipAreaCommand, + [ + path, + paint, + ], + ), + returnValue: _FakeClipAreaCommand_12( + this, + Invocation.method( + #createClipAreaCommand, + [ + path, + paint, + ], + ), + ), + ) as _i14.ClipAreaCommand); + + @override + _i15.ColorChangedCommand createColorChangedCommand( + _i17.Color? oldColor, + _i17.Color? newColor, + _i17.Paint? paint, ) => (super.noSuchMethod( Invocation.method( @@ -811,7 +858,7 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { paint, ], ), - returnValue: _FakeColorChangedCommand_12( + returnValue: _FakeColorChangedCommand_13( this, Invocation.method( #createColorChangedCommand, @@ -822,46 +869,46 @@ class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { ], ), ), - ) as _i14.ColorChangedCommand); + ) as _i15.ColorChangedCommand); } /// A class which mocks [PaintProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { +class MockPaintProvider extends _i1.Mock implements _i28.PaintProvider { MockPaintProvider() { _i1.throwOnMissingStub(this); } @override - _i16.Paint get currentState => (super.noSuchMethod( + _i17.Paint get currentState => (super.noSuchMethod( Invocation.getter(#currentState), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.getter(#currentState), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i15.NotifierProviderRef<_i16.Paint> get ref => (super.noSuchMethod( + _i16.NotifierProviderRef<_i17.Paint> get ref => (super.noSuchMethod( Invocation.getter(#ref), - returnValue: _FakeNotifierProviderRef_13<_i16.Paint>( + returnValue: _FakeNotifierProviderRef_14<_i17.Paint>( this, Invocation.getter(#ref), ), - ) as _i15.NotifierProviderRef<_i16.Paint>); + ) as _i16.NotifierProviderRef<_i17.Paint>); @override - _i16.Paint get state => (super.noSuchMethod( + _i17.Paint get state => (super.noSuchMethod( Invocation.getter(#state), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.getter(#state), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - set state(_i16.Paint? value) => super.noSuchMethod( + set state(_i17.Paint? value) => super.noSuchMethod( Invocation.setter( #state, value, @@ -870,19 +917,19 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - _i16.Paint build() => (super.noSuchMethod( + _i17.Paint build() => (super.noSuchMethod( Invocation.method( #build, [], ), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.method( #build, [], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override void updateStrokeWidth(double? newStrokeWidth) => super.noSuchMethod( @@ -894,7 +941,7 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - void updateStrokeCap(_i16.StrokeCap? newStrokeCap) => super.noSuchMethod( + void updateStrokeCap(_i17.StrokeCap? newStrokeCap) => super.noSuchMethod( Invocation.method( #updateStrokeCap, [newStrokeCap], @@ -903,7 +950,7 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - void updateColor(_i16.Color? newColor) => super.noSuchMethod( + void updateColor(_i17.Color? newColor) => super.noSuchMethod( Invocation.method( #updateColor, [newColor], @@ -912,7 +959,7 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - void updateBlendMode(_i16.BlendMode? newMode) => super.noSuchMethod( + void updateBlendMode(_i17.BlendMode? newMode) => super.noSuchMethod( Invocation.method( #updateBlendMode, [newMode], @@ -921,7 +968,7 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { ); @override - void updateBlendModeByToolType(_i29.ToolType? toolType) => super.noSuchMethod( + void updateBlendModeByToolType(_i30.ToolType? toolType) => super.noSuchMethod( Invocation.method( #updateBlendModeByToolType, [toolType], @@ -932,8 +979,8 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { @override void listenSelf( void Function( - _i16.Paint?, - _i16.Paint, + _i17.Paint?, + _i17.Paint, )? listener, { void Function( Object, @@ -951,8 +998,8 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { @override bool updateShouldNotify( - _i16.Paint? previous, - _i16.Paint? next, + _i17.Paint? previous, + _i17.Paint? next, ) => (super.noSuchMethod( Invocation.method( @@ -970,22 +1017,22 @@ class MockPaintProvider extends _i1.Mock implements _i27.PaintProvider { /// /// See the documentation for Mockito's code generation for more information. class MockCanvasStateProvider extends _i1.Mock - implements _i30.CanvasStateProvider { + implements _i31.CanvasStateProvider { MockCanvasStateProvider() { _i1.throwOnMissingStub(this); } @override - _i16.Size get initialCanvasSize => (super.noSuchMethod( + _i17.Size get initialCanvasSize => (super.noSuchMethod( Invocation.getter(#initialCanvasSize), - returnValue: _FakeSize_14( + returnValue: _FakeSize_15( this, Invocation.getter(#initialCanvasSize), ), - ) as _i16.Size); + ) as _i17.Size); @override - set initialCanvasSize(_i16.Size? _initialCanvasSize) => super.noSuchMethod( + set initialCanvasSize(_i17.Size? _initialCanvasSize) => super.noSuchMethod( Invocation.setter( #initialCanvasSize, _initialCanvasSize, @@ -994,34 +1041,34 @@ class MockCanvasStateProvider extends _i1.Mock ); @override - _i17.CanvasStateData get currentState => (super.noSuchMethod( + _i18.CanvasStateData get currentState => (super.noSuchMethod( Invocation.getter(#currentState), - returnValue: _FakeCanvasStateData_15( + returnValue: _FakeCanvasStateData_16( this, Invocation.getter(#currentState), ), - ) as _i17.CanvasStateData); + ) as _i18.CanvasStateData); @override - _i15.NotifierProviderRef<_i17.CanvasStateData> get ref => (super.noSuchMethod( + _i16.NotifierProviderRef<_i18.CanvasStateData> get ref => (super.noSuchMethod( Invocation.getter(#ref), - returnValue: _FakeNotifierProviderRef_13<_i17.CanvasStateData>( + returnValue: _FakeNotifierProviderRef_14<_i18.CanvasStateData>( this, Invocation.getter(#ref), ), - ) as _i15.NotifierProviderRef<_i17.CanvasStateData>); + ) as _i16.NotifierProviderRef<_i18.CanvasStateData>); @override - _i17.CanvasStateData get state => (super.noSuchMethod( + _i18.CanvasStateData get state => (super.noSuchMethod( Invocation.getter(#state), - returnValue: _FakeCanvasStateData_15( + returnValue: _FakeCanvasStateData_16( this, Invocation.getter(#state), ), - ) as _i17.CanvasStateData); + ) as _i18.CanvasStateData); @override - set state(_i17.CanvasStateData? value) => super.noSuchMethod( + set state(_i18.CanvasStateData? value) => super.noSuchMethod( Invocation.setter( #state, value, @@ -1030,13 +1077,13 @@ class MockCanvasStateProvider extends _i1.Mock ); @override - _i18.Logger get logger => (super.noSuchMethod( + _i19.Logger get logger => (super.noSuchMethod( Invocation.getter(#logger), - returnValue: _FakeLogger_16( + returnValue: _FakeLogger_17( this, Invocation.getter(#logger), ), - ) as _i18.Logger); + ) as _i19.Logger); @override void requestResetView() => super.noSuchMethod( @@ -1048,22 +1095,22 @@ class MockCanvasStateProvider extends _i1.Mock ); @override - _i17.CanvasStateData build() => (super.noSuchMethod( + _i18.CanvasStateData build() => (super.noSuchMethod( Invocation.method( #build, [], ), - returnValue: _FakeCanvasStateData_15( + returnValue: _FakeCanvasStateData_16( this, Invocation.method( #build, [], ), ), - ) as _i17.CanvasStateData); + ) as _i18.CanvasStateData); @override - void setBackgroundImage(_i16.Image? image) => super.noSuchMethod( + void setBackgroundImage(_i17.Image? image) => super.noSuchMethod( Invocation.method( #setBackgroundImage, [image], @@ -1081,42 +1128,42 @@ class MockCanvasStateProvider extends _i1.Mock ); @override - _i31.Future updateCachedImage() => (super.noSuchMethod( + _i32.Future updateCachedImage() => (super.noSuchMethod( Invocation.method( #updateCachedImage, [], ), - returnValue: _i31.Future.value(), - returnValueForMissingStub: _i31.Future.value(), - ) as _i31.Future); + returnValue: _i32.Future.value(), + returnValueForMissingStub: _i32.Future.value(), + ) as _i32.Future); @override - _i31.Future resetCanvasWithNewCommands( + _i32.Future resetCanvasWithNewCommands( Iterable<_i2.Command>? commands) => (super.noSuchMethod( Invocation.method( #resetCanvasWithNewCommands, [commands], ), - returnValue: _i31.Future.value(), - returnValueForMissingStub: _i31.Future.value(), - ) as _i31.Future); + returnValue: _i32.Future.value(), + returnValueForMissingStub: _i32.Future.value(), + ) as _i32.Future); @override - _i31.Future resetCanvasWithExistingCommands() => (super.noSuchMethod( + _i32.Future resetCanvasWithExistingCommands() => (super.noSuchMethod( Invocation.method( #resetCanvasWithExistingCommands, [], ), - returnValue: _i31.Future.value(), - returnValueForMissingStub: _i31.Future.value(), - ) as _i31.Future); + returnValue: _i32.Future.value(), + returnValueForMissingStub: _i32.Future.value(), + ) as _i32.Future); @override void listenSelf( void Function( - _i17.CanvasStateData?, - _i17.CanvasStateData, + _i18.CanvasStateData?, + _i18.CanvasStateData, )? listener, { void Function( Object, @@ -1134,8 +1181,8 @@ class MockCanvasStateProvider extends _i1.Mock @override bool updateShouldNotify( - _i17.CanvasStateData? previous, - _i17.CanvasStateData? next, + _i18.CanvasStateData? previous, + _i18.CanvasStateData? next, ) => (super.noSuchMethod( Invocation.method( @@ -1153,7 +1200,7 @@ class MockCanvasStateProvider extends _i1.Mock /// /// See the documentation for Mockito's code generation for more information. class MockColorChangedCommand extends _i1.Mock - implements _i14.ColorChangedCommand { + implements _i15.ColorChangedCommand { MockColorChangedCommand() { _i1.throwOnMissingStub(this); } @@ -1161,7 +1208,7 @@ class MockColorChangedCommand extends _i1.Mock @override String get type => (super.noSuchMethod( Invocation.getter(#type), - returnValue: _i28.dummyValue( + returnValue: _i29.dummyValue( this, Invocation.getter(#type), ), @@ -1174,22 +1221,22 @@ class MockColorChangedCommand extends _i1.Mock ) as int); @override - _i16.Color get oldColor => (super.noSuchMethod( + _i17.Color get oldColor => (super.noSuchMethod( Invocation.getter(#oldColor), - returnValue: _FakeColor_17( + returnValue: _FakeColor_18( this, Invocation.getter(#oldColor), ), - ) as _i16.Color); + ) as _i17.Color); @override - _i16.Color get newColor => (super.noSuchMethod( + _i17.Color get newColor => (super.noSuchMethod( Invocation.getter(#newColor), - returnValue: _FakeColor_17( + returnValue: _FakeColor_18( this, Invocation.getter(#newColor), ), - ) as _i16.Color); + ) as _i17.Color); @override List get props => (super.noSuchMethod( @@ -1198,16 +1245,16 @@ class MockColorChangedCommand extends _i1.Mock ) as List); @override - _i16.Paint get paint => (super.noSuchMethod( + _i17.Paint get paint => (super.noSuchMethod( Invocation.getter(#paint), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.getter(#paint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - void call(_i16.Canvas? canvas) => super.noSuchMethod( + void call(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #call, [canvas], @@ -1225,89 +1272,89 @@ class MockColorChangedCommand extends _i1.Mock ) as Map); @override - _i31.Future prepareForRuntime() => (super.noSuchMethod( + _i32.Future prepareForRuntime() => (super.noSuchMethod( Invocation.method( #prepareForRuntime, [], ), - returnValue: _i31.Future.value(), - returnValueForMissingStub: _i31.Future.value(), - ) as _i31.Future); + returnValue: _i32.Future.value(), + returnValueForMissingStub: _i32.Future.value(), + ) as _i32.Future); } /// A class which mocks [GraphicFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockGraphicFactory extends _i1.Mock implements _i32.GraphicFactory { +class MockGraphicFactory extends _i1.Mock implements _i33.GraphicFactory { MockGraphicFactory() { _i1.throwOnMissingStub(this); } @override - _i16.Paint createPaint() => (super.noSuchMethod( + _i17.Paint createPaint() => (super.noSuchMethod( Invocation.method( #createPaint, [], ), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.method( #createPaint, [], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i19.PathWithActionHistory createPathWithActionHistory() => + _i20.PathWithActionHistory createPathWithActionHistory() => (super.noSuchMethod( Invocation.method( #createPathWithActionHistory, [], ), - returnValue: _FakePathWithActionHistory_18( + returnValue: _FakePathWithActionHistory_19( this, Invocation.method( #createPathWithActionHistory, [], ), ), - ) as _i19.PathWithActionHistory); + ) as _i20.PathWithActionHistory); @override - _i16.PictureRecorder createPictureRecorder() => (super.noSuchMethod( + _i17.PictureRecorder createPictureRecorder() => (super.noSuchMethod( Invocation.method( #createPictureRecorder, [], ), - returnValue: _FakePictureRecorder_19( + returnValue: _FakePictureRecorder_20( this, Invocation.method( #createPictureRecorder, [], ), ), - ) as _i16.PictureRecorder); + ) as _i17.PictureRecorder); @override - _i16.Canvas createCanvasWithRecorder(_i16.PictureRecorder? recorder) => + _i17.Canvas createCanvasWithRecorder(_i17.PictureRecorder? recorder) => (super.noSuchMethod( Invocation.method( #createCanvasWithRecorder, [recorder], ), - returnValue: _FakeCanvas_20( + returnValue: _FakeCanvas_21( this, Invocation.method( #createCanvasWithRecorder, [recorder], ), ), - ) as _i16.Canvas); + ) as _i17.Canvas); @override - _i16.Paint createWatercolorPaint( - _i16.Paint? originalPaint, + _i17.Paint createWatercolorPaint( + _i17.Paint? originalPaint, double? blurSigma, ) => (super.noSuchMethod( @@ -1318,7 +1365,7 @@ class MockGraphicFactory extends _i1.Mock implements _i32.GraphicFactory { blurSigma, ], ), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.method( #createWatercolorPaint, @@ -1328,20 +1375,20 @@ class MockGraphicFactory extends _i1.Mock implements _i32.GraphicFactory { ], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i16.Paint copyPaint(_i16.Paint? original) => (super.noSuchMethod( + _i17.Paint copyPaint(_i17.Paint? original) => (super.noSuchMethod( Invocation.method( #copyPaint, [original], ), - returnValue: _i28.dummyValue<_i16.Paint>( + returnValue: _i29.dummyValue<_i17.Paint>( this, Invocation.method( #copyPaint, [original], ), ), - ) as _i16.Paint); + ) as _i17.Paint); } diff --git a/test/unit/tools/text_tool_test.mocks.dart b/test/unit/tools/text_tool_test.mocks.dart index 7d9297a5..9a520b94 100644 --- a/test/unit/tools/text_tool_test.mocks.dart +++ b/test/unit/tools/text_tool_test.mocks.dart @@ -3,25 +3,27 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i26; -import 'dart:typed_data' as _i24; -import 'dart:ui' as _i16; +import 'dart:async' as _i27; +import 'dart:typed_data' as _i25; +import 'dart:ui' as _i17; -import 'package:flutter/material.dart' as _i17; +import 'package:flutter/material.dart' as _i18; import 'package:mockito/mockito.dart' as _i1; -import 'package:mockito/src/dummies.dart' as _i25; +import 'package:mockito/src/dummies.dart' as _i26; import 'package:paintroid/core/commands/command_factory/command_factory.dart' - as _i22; + as _i23; import 'package:paintroid/core/commands/command_implementation/command.dart' as _i2; +import 'package:paintroid/core/commands/command_implementation/graphic/clip_area_command.dart' + as _i14; import 'package:paintroid/core/commands/command_implementation/graphic/clipboard_command.dart' as _i8; import 'package:paintroid/core/commands/command_implementation/graphic/color_changed_command.dart' - as _i14; + as _i15; import 'package:paintroid/core/commands/command_implementation/graphic/delete_region_command.dart' as _i13; import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart' - as _i20; + as _i21; import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart' as _i5; import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart' @@ -39,17 +41,17 @@ import 'package:paintroid/core/commands/command_implementation/graphic/spray_com import 'package:paintroid/core/commands/command_implementation/graphic/text_command.dart' as _i9; import 'package:paintroid/core/commands/command_manager/command_manager.dart' - as _i19; + as _i20; import 'package:paintroid/core/commands/graphic_factory/graphic_factory.dart' - as _i27; -import 'package:paintroid/core/commands/path_with_action_history.dart' as _i18; -import 'package:paintroid/core/enums/bounding_box_action.dart' as _i29; -import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i30; -import 'package:paintroid/core/enums/shape_style.dart' as _i23; -import 'package:paintroid/core/tools/bounding_box.dart' as _i28; -import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i21; + as _i28; +import 'package:paintroid/core/commands/path_with_action_history.dart' as _i19; +import 'package:paintroid/core/enums/bounding_box_action.dart' as _i30; +import 'package:paintroid/core/enums/bounding_box_resize_action.dart' as _i31; +import 'package:paintroid/core/enums/shape_style.dart' as _i24; +import 'package:paintroid/core/tools/bounding_box.dart' as _i29; +import 'package:paintroid/core/tools/line_tool/vertex_stack.dart' as _i22; import 'package:paintroid/core/tools/tool_data.dart' as _i3; -import 'package:riverpod/src/internals.dart' as _i15; +import 'package:riverpod/src/internals.dart' as _i16; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -190,9 +192,20 @@ class _FakeDeleteRegionCommand_11 extends _i1.SmartFake ); } -class _FakeColorChangedCommand_12 extends _i1.SmartFake - implements _i14.ColorChangedCommand { - _FakeColorChangedCommand_12( +class _FakeClipAreaCommand_12 extends _i1.SmartFake + implements _i14.ClipAreaCommand { + _FakeClipAreaCommand_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeColorChangedCommand_13 extends _i1.SmartFake + implements _i15.ColorChangedCommand { + _FakeColorChangedCommand_13( Object parent, Invocation parentInvocation, ) : super( @@ -201,9 +214,9 @@ class _FakeColorChangedCommand_12 extends _i1.SmartFake ); } -class _FakeProviderContainer_13 extends _i1.SmartFake - implements _i15.ProviderContainer { - _FakeProviderContainer_13( +class _FakeProviderContainer_14 extends _i1.SmartFake + implements _i16.ProviderContainer { + _FakeProviderContainer_14( Object parent, Invocation parentInvocation, ) : super( @@ -212,9 +225,9 @@ class _FakeProviderContainer_13 extends _i1.SmartFake ); } -class _FakeKeepAliveLink_14 extends _i1.SmartFake - implements _i15.KeepAliveLink { - _FakeKeepAliveLink_14( +class _FakeKeepAliveLink_15 extends _i1.SmartFake + implements _i16.KeepAliveLink { + _FakeKeepAliveLink_15( Object parent, Invocation parentInvocation, ) : super( @@ -223,9 +236,9 @@ class _FakeKeepAliveLink_14 extends _i1.SmartFake ); } -class _FakeProviderSubscription_15 extends _i1.SmartFake - implements _i15.ProviderSubscription { - _FakeProviderSubscription_15( +class _FakeProviderSubscription_16 extends _i1.SmartFake + implements _i16.ProviderSubscription { + _FakeProviderSubscription_16( Object parent, Invocation parentInvocation, ) : super( @@ -234,8 +247,8 @@ class _FakeProviderSubscription_15 extends _i1.SmartFake ); } -class _FakeRect_16 extends _i1.SmartFake implements _i16.Rect { - _FakeRect_16( +class _FakeRect_17 extends _i1.SmartFake implements _i17.Rect { + _FakeRect_17( Object parent, Invocation parentInvocation, ) : super( @@ -244,8 +257,8 @@ class _FakeRect_16 extends _i1.SmartFake implements _i16.Rect { ); } -class _FakeOffset_17 extends _i1.SmartFake implements _i16.Offset { - _FakeOffset_17( +class _FakeOffset_18 extends _i1.SmartFake implements _i17.Offset { + _FakeOffset_18( Object parent, Invocation parentInvocation, ) : super( @@ -254,8 +267,8 @@ class _FakeOffset_17 extends _i1.SmartFake implements _i16.Offset { ); } -class _FakeTextStyle_18 extends _i1.SmartFake implements _i17.TextStyle { - _FakeTextStyle_18( +class _FakeTextStyle_19 extends _i1.SmartFake implements _i18.TextStyle { + _FakeTextStyle_19( Object parent, Invocation parentInvocation, ) : super( @@ -265,13 +278,13 @@ class _FakeTextStyle_18 extends _i1.SmartFake implements _i17.TextStyle { @override String toString( - {_i17.DiagnosticLevel? minLevel = _i17.DiagnosticLevel.info}) => + {_i18.DiagnosticLevel? minLevel = _i18.DiagnosticLevel.info}) => super.toString(); } -class _FakePathWithActionHistory_19 extends _i1.SmartFake - implements _i18.PathWithActionHistory { - _FakePathWithActionHistory_19( +class _FakePathWithActionHistory_20 extends _i1.SmartFake + implements _i19.PathWithActionHistory { + _FakePathWithActionHistory_20( Object parent, Invocation parentInvocation, ) : super( @@ -280,9 +293,9 @@ class _FakePathWithActionHistory_19 extends _i1.SmartFake ); } -class _FakePictureRecorder_20 extends _i1.SmartFake - implements _i16.PictureRecorder { - _FakePictureRecorder_20( +class _FakePictureRecorder_21 extends _i1.SmartFake + implements _i17.PictureRecorder { + _FakePictureRecorder_21( Object parent, Invocation parentInvocation, ) : super( @@ -291,8 +304,8 @@ class _FakePictureRecorder_20 extends _i1.SmartFake ); } -class _FakeCanvas_21 extends _i1.SmartFake implements _i16.Canvas { - _FakeCanvas_21( +class _FakeCanvas_22 extends _i1.SmartFake implements _i17.Canvas { + _FakeCanvas_22( Object parent, Invocation parentInvocation, ) : super( @@ -304,7 +317,7 @@ class _FakeCanvas_21 extends _i1.SmartFake implements _i16.Canvas { /// A class which mocks [CommandManager]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandManager extends _i1.Mock implements _i19.CommandManager { +class MockCommandManager extends _i1.Mock implements _i20.CommandManager { MockCommandManager() { _i1.throwOnMissingStub(this); } @@ -322,7 +335,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { ) as List<_i2.Command>); @override - void addGraphicCommand(_i20.GraphicCommand? command) => super.noSuchMethod( + void addGraphicCommand(_i21.GraphicCommand? command) => super.noSuchMethod( Invocation.method( #addGraphicCommand, [command], @@ -330,6 +343,15 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { returnValueForMissingStub: null, ); + @override + void removeCommand(_i2.Command? commandToRemove) => super.noSuchMethod( + Invocation.method( + #removeCommand, + [commandToRemove], + ), + returnValueForMissingStub: null, + ); + @override void setUndoStack(List<_i2.Command>? commands) => super.noSuchMethod( Invocation.method( @@ -340,7 +362,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { ); @override - void executeLastCommand(_i16.Canvas? canvas) => super.noSuchMethod( + void executeLastCommand(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #executeLastCommand, [canvas], @@ -349,7 +371,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { ); @override - void executeAllCommands(_i16.Canvas? canvas) => super.noSuchMethod( + void executeAllCommands(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #executeAllCommands, [canvas], @@ -388,7 +410,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { @override void drawLineToolGhostPaths( - _i16.Canvas? canvas, + _i17.Canvas? canvas, _i5.LineCommand? ingoingGhostPathCommand, _i5.LineCommand? outgoingGhostPathCommand, ) => @@ -406,8 +428,8 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { @override void drawLineToolVertices( - _i16.Canvas? canvas, - _i21.VertexStack? vertexStack, + _i17.Canvas? canvas, + _i22.VertexStack? vertexStack, ) => super.noSuchMethod( Invocation.method( @@ -445,7 +467,7 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { ); @override - _i3.ToolData getNextTool(_i19.ActionType? actionType) => (super.noSuchMethod( + _i3.ToolData getNextTool(_i20.ActionType? actionType) => (super.noSuchMethod( Invocation.method( #getNextTool, [actionType], @@ -472,15 +494,15 @@ class MockCommandManager extends _i1.Mock implements _i19.CommandManager { /// A class which mocks [CommandFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { +class MockCommandFactory extends _i1.Mock implements _i23.CommandFactory { MockCommandFactory() { _i1.throwOnMissingStub(this); } @override _i4.PathCommand createPathCommand( - _i18.PathWithActionHistory? path, - _i16.Paint? paint, { + _i19.PathWithActionHistory? path, + _i17.Paint? paint, { bool? isCursor = false, }) => (super.noSuchMethod( @@ -507,10 +529,10 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i5.LineCommand createLineCommand( - _i18.PathWithActionHistory? path, - _i16.Paint? paint, - _i16.Offset? startPoint, - _i16.Offset? endPoint, + _i19.PathWithActionHistory? path, + _i17.Paint? paint, + _i17.Offset? startPoint, + _i17.Offset? endPoint, ) => (super.noSuchMethod( Invocation.method( @@ -538,12 +560,12 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i6.SquareShapeCommand createSquareShapeCommand( - _i16.Paint? paint, - _i16.Offset? topLeft, - _i16.Offset? topRight, - _i16.Offset? bottomLeft, - _i16.Offset? bottomRight, - _i23.ShapeStyle? style, + _i17.Paint? paint, + _i17.Offset? topLeft, + _i17.Offset? topRight, + _i17.Offset? bottomLeft, + _i17.Offset? bottomRight, + _i24.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -575,11 +597,11 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i7.EllipseShapeCommand createEllipseShapeCommand( - _i16.Paint? paint, + _i17.Paint? paint, double? radiusX, double? radiusY, - _i16.Offset? center, - _i23.ShapeStyle? style, + _i17.Offset? center, + _i24.ShapeStyle? style, double? angle, ) => (super.noSuchMethod( @@ -612,9 +634,9 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i8.ClipboardCommand createClipboardCommand( - _i16.Paint? paint, - _i24.Uint8List? imageData, - _i16.Offset? offset, + _i17.Paint? paint, + _i25.Uint8List? imageData, + _i17.Offset? offset, double? scale, double? rotation, ) => @@ -646,11 +668,11 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i9.TextCommand createTextCommand( - _i16.Offset? point, + _i17.Offset? point, String? text, - _i17.TextStyle? style, + _i18.TextStyle? style, double? fontSize, - _i16.Paint? paint, + _i17.Paint? paint, double? rotationAngle, { double? scaleX = 1.0, double? scaleY = 1.0, @@ -693,11 +715,11 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i10.StarShapeCommand createStarShapeCommand( - _i16.Paint? paint, + _i17.Paint? paint, int? numPoints, double? angle, - _i16.Offset? center, - _i23.ShapeStyle? style, + _i17.Offset? center, + _i24.ShapeStyle? style, double? radiusX, double? radiusY, ) => @@ -733,12 +755,12 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i11.HeartShapeCommand createHeartShapeCommand( - _i16.Paint? paint, + _i17.Paint? paint, double? width, double? height, double? angle, - _i16.Offset? center, - _i23.ShapeStyle? style, + _i17.Offset? center, + _i24.ShapeStyle? style, ) => (super.noSuchMethod( Invocation.method( @@ -770,8 +792,8 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { @override _i12.SprayCommand createSprayCommand( - List<_i16.Offset>? points, - _i16.Paint? paint, + List<_i17.Offset>? points, + _i17.Paint? paint, ) => (super.noSuchMethod( Invocation.method( @@ -794,7 +816,7 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { ) as _i12.SprayCommand); @override - _i13.DeleteRegionCommand createDeleteRegionCommand(_i16.Rect? region) => + _i13.DeleteRegionCommand createDeleteRegionCommand(_i17.Rect? region) => (super.noSuchMethod( Invocation.method( #createDeleteRegionCommand, @@ -810,10 +832,35 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { ) as _i13.DeleteRegionCommand); @override - _i14.ColorChangedCommand createColorChangedCommand( - _i16.Color? oldColor, - _i16.Color? newColor, - _i16.Paint? paint, + _i14.ClipAreaCommand createClipAreaCommand( + _i19.PathWithActionHistory? path, + _i17.Paint? paint, + ) => + (super.noSuchMethod( + Invocation.method( + #createClipAreaCommand, + [ + path, + paint, + ], + ), + returnValue: _FakeClipAreaCommand_12( + this, + Invocation.method( + #createClipAreaCommand, + [ + path, + paint, + ], + ), + ), + ) as _i14.ClipAreaCommand); + + @override + _i15.ColorChangedCommand createColorChangedCommand( + _i17.Color? oldColor, + _i17.Color? newColor, + _i17.Paint? paint, ) => (super.noSuchMethod( Invocation.method( @@ -824,7 +871,7 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { paint, ], ), - returnValue: _FakeColorChangedCommand_12( + returnValue: _FakeColorChangedCommand_13( this, Invocation.method( #createColorChangedCommand, @@ -835,34 +882,34 @@ class MockCommandFactory extends _i1.Mock implements _i22.CommandFactory { ], ), ), - ) as _i14.ColorChangedCommand); + ) as _i15.ColorChangedCommand); } /// A class which mocks [Ref]. /// /// See the documentation for Mockito's code generation for more information. class MockRef extends _i1.Mock - implements _i15.Ref { + implements _i16.Ref { MockRef() { _i1.throwOnMissingStub(this); } @override - _i15.ProviderContainer get container => (super.noSuchMethod( + _i16.ProviderContainer get container => (super.noSuchMethod( Invocation.getter(#container), - returnValue: _FakeProviderContainer_13( + returnValue: _FakeProviderContainer_14( this, Invocation.getter(#container), ), - ) as _i15.ProviderContainer); + ) as _i16.ProviderContainer); @override - T refresh(_i15.Refreshable? provider) => (super.noSuchMethod( + T refresh(_i16.Refreshable? provider) => (super.noSuchMethod( Invocation.method( #refresh, [provider], ), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.method( #refresh, @@ -872,7 +919,7 @@ class MockRef extends _i1.Mock ) as T); @override - void invalidate(_i15.ProviderOrFamily? provider) => super.noSuchMethod( + void invalidate(_i16.ProviderOrFamily? provider) => super.noSuchMethod( Invocation.method( #invalidate, [provider], @@ -964,12 +1011,12 @@ class MockRef extends _i1.Mock ); @override - T read(_i15.ProviderListenable? provider) => (super.noSuchMethod( + T read(_i16.ProviderListenable? provider) => (super.noSuchMethod( Invocation.method( #read, [provider], ), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.method( #read, @@ -979,7 +1026,7 @@ class MockRef extends _i1.Mock ) as T); @override - bool exists(_i15.ProviderBase? provider) => (super.noSuchMethod( + bool exists(_i16.ProviderBase? provider) => (super.noSuchMethod( Invocation.method( #exists, [provider], @@ -988,12 +1035,12 @@ class MockRef extends _i1.Mock ) as bool); @override - T watch(_i15.ProviderListenable? provider) => (super.noSuchMethod( + T watch(_i16.ProviderListenable? provider) => (super.noSuchMethod( Invocation.method( #watch, [provider], ), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.method( #watch, @@ -1003,23 +1050,23 @@ class MockRef extends _i1.Mock ) as T); @override - _i15.KeepAliveLink keepAlive() => (super.noSuchMethod( + _i16.KeepAliveLink keepAlive() => (super.noSuchMethod( Invocation.method( #keepAlive, [], ), - returnValue: _FakeKeepAliveLink_14( + returnValue: _FakeKeepAliveLink_15( this, Invocation.method( #keepAlive, [], ), ), - ) as _i15.KeepAliveLink); + ) as _i16.KeepAliveLink); @override - _i15.ProviderSubscription listen( - _i15.ProviderListenable? provider, + _i16.ProviderSubscription listen( + _i16.ProviderListenable? provider, void Function( T?, T, @@ -1042,7 +1089,7 @@ class MockRef extends _i1.Mock #fireImmediately: fireImmediately, }, ), - returnValue: _FakeProviderSubscription_15( + returnValue: _FakeProviderSubscription_16( this, Invocation.method( #listen, @@ -1056,13 +1103,13 @@ class MockRef extends _i1.Mock }, ), ), - ) as _i15.ProviderSubscription); + ) as _i16.ProviderSubscription); } /// A class which mocks [Canvas]. /// /// See the documentation for Mockito's code generation for more information. -class MockCanvas extends _i1.Mock implements _i16.Canvas { +class MockCanvas extends _i1.Mock implements _i17.Canvas { MockCanvas() { _i1.throwOnMissingStub(this); } @@ -1078,8 +1125,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void saveLayer( - _i16.Rect? bounds, - _i16.Paint? paint, + _i17.Rect? bounds, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1177,7 +1224,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - void transform(_i24.Float64List? matrix4) => super.noSuchMethod( + void transform(_i25.Float64List? matrix4) => super.noSuchMethod( Invocation.method( #transform, [matrix4], @@ -1186,18 +1233,18 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - _i24.Float64List getTransform() => (super.noSuchMethod( + _i25.Float64List getTransform() => (super.noSuchMethod( Invocation.method( #getTransform, [], ), - returnValue: _i24.Float64List(0), - ) as _i24.Float64List); + returnValue: _i25.Float64List(0), + ) as _i25.Float64List); @override void clipRect( - _i16.Rect? rect, { - _i16.ClipOp? clipOp = _i16.ClipOp.intersect, + _i17.Rect? rect, { + _i17.ClipOp? clipOp = _i17.ClipOp.intersect, bool? doAntiAlias = true, }) => super.noSuchMethod( @@ -1214,7 +1261,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void clipRRect( - _i16.RRect? rrect, { + _i17.RRect? rrect, { bool? doAntiAlias = true, }) => super.noSuchMethod( @@ -1228,7 +1275,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void clipRSuperellipse( - _i16.RSuperellipse? rsuperellipse, { + _i17.RSuperellipse? rsuperellipse, { bool? doAntiAlias = true, }) => super.noSuchMethod( @@ -1242,7 +1289,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void clipPath( - _i16.Path? path, { + _i17.Path? path, { bool? doAntiAlias = true, }) => super.noSuchMethod( @@ -1255,39 +1302,39 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - _i16.Rect getLocalClipBounds() => (super.noSuchMethod( + _i17.Rect getLocalClipBounds() => (super.noSuchMethod( Invocation.method( #getLocalClipBounds, [], ), - returnValue: _FakeRect_16( + returnValue: _FakeRect_17( this, Invocation.method( #getLocalClipBounds, [], ), ), - ) as _i16.Rect); + ) as _i17.Rect); @override - _i16.Rect getDestinationClipBounds() => (super.noSuchMethod( + _i17.Rect getDestinationClipBounds() => (super.noSuchMethod( Invocation.method( #getDestinationClipBounds, [], ), - returnValue: _FakeRect_16( + returnValue: _FakeRect_17( this, Invocation.method( #getDestinationClipBounds, [], ), ), - ) as _i16.Rect); + ) as _i17.Rect); @override void drawColor( - _i16.Color? color, - _i16.BlendMode? blendMode, + _i17.Color? color, + _i17.BlendMode? blendMode, ) => super.noSuchMethod( Invocation.method( @@ -1302,9 +1349,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawLine( - _i16.Offset? p1, - _i16.Offset? p2, - _i16.Paint? paint, + _i17.Offset? p1, + _i17.Offset? p2, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1319,7 +1366,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - void drawPaint(_i16.Paint? paint) => super.noSuchMethod( + void drawPaint(_i17.Paint? paint) => super.noSuchMethod( Invocation.method( #drawPaint, [paint], @@ -1329,8 +1376,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRect( - _i16.Rect? rect, - _i16.Paint? paint, + _i17.Rect? rect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1345,8 +1392,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRRect( - _i16.RRect? rrect, - _i16.Paint? paint, + _i17.RRect? rrect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1361,9 +1408,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawDRRect( - _i16.RRect? outer, - _i16.RRect? inner, - _i16.Paint? paint, + _i17.RRect? outer, + _i17.RRect? inner, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1379,8 +1426,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRSuperellipse( - _i16.RSuperellipse? rsuperellipse, - _i16.Paint? paint, + _i17.RSuperellipse? rsuperellipse, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1395,8 +1442,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawOval( - _i16.Rect? rect, - _i16.Paint? paint, + _i17.Rect? rect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1411,9 +1458,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawCircle( - _i16.Offset? c, + _i17.Offset? c, double? radius, - _i16.Paint? paint, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1429,11 +1476,11 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawArc( - _i16.Rect? rect, + _i17.Rect? rect, double? startAngle, double? sweepAngle, bool? useCenter, - _i16.Paint? paint, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1451,8 +1498,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawPath( - _i16.Path? path, - _i16.Paint? paint, + _i17.Path? path, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1467,9 +1514,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawImage( - _i16.Image? image, - _i16.Offset? offset, - _i16.Paint? paint, + _i17.Image? image, + _i17.Offset? offset, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1485,10 +1532,10 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawImageRect( - _i16.Image? image, - _i16.Rect? src, - _i16.Rect? dst, - _i16.Paint? paint, + _i17.Image? image, + _i17.Rect? src, + _i17.Rect? dst, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1505,10 +1552,10 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawImageNine( - _i16.Image? image, - _i16.Rect? center, - _i16.Rect? dst, - _i16.Paint? paint, + _i17.Image? image, + _i17.Rect? center, + _i17.Rect? dst, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1524,7 +1571,7 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { ); @override - void drawPicture(_i16.Picture? picture) => super.noSuchMethod( + void drawPicture(_i17.Picture? picture) => super.noSuchMethod( Invocation.method( #drawPicture, [picture], @@ -1534,8 +1581,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawParagraph( - _i16.Paragraph? paragraph, - _i16.Offset? offset, + _i17.Paragraph? paragraph, + _i17.Offset? offset, ) => super.noSuchMethod( Invocation.method( @@ -1550,9 +1597,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawPoints( - _i16.PointMode? pointMode, - List<_i16.Offset>? points, - _i16.Paint? paint, + _i17.PointMode? pointMode, + List<_i17.Offset>? points, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1568,9 +1615,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRawPoints( - _i16.PointMode? pointMode, - _i24.Float32List? points, - _i16.Paint? paint, + _i17.PointMode? pointMode, + _i25.Float32List? points, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1586,9 +1633,9 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawVertices( - _i16.Vertices? vertices, - _i16.BlendMode? blendMode, - _i16.Paint? paint, + _i17.Vertices? vertices, + _i17.BlendMode? blendMode, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1604,13 +1651,13 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawAtlas( - _i16.Image? atlas, - List<_i16.RSTransform>? transforms, - List<_i16.Rect>? rects, - List<_i16.Color>? colors, - _i16.BlendMode? blendMode, - _i16.Rect? cullRect, - _i16.Paint? paint, + _i17.Image? atlas, + List<_i17.RSTransform>? transforms, + List<_i17.Rect>? rects, + List<_i17.Color>? colors, + _i17.BlendMode? blendMode, + _i17.Rect? cullRect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1630,13 +1677,13 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawRawAtlas( - _i16.Image? atlas, - _i24.Float32List? rstTransforms, - _i24.Float32List? rects, - _i24.Int32List? colors, - _i16.BlendMode? blendMode, - _i16.Rect? cullRect, - _i16.Paint? paint, + _i17.Image? atlas, + _i25.Float32List? rstTransforms, + _i25.Float32List? rects, + _i25.Int32List? colors, + _i17.BlendMode? blendMode, + _i17.Rect? cullRect, + _i17.Paint? paint, ) => super.noSuchMethod( Invocation.method( @@ -1656,8 +1703,8 @@ class MockCanvas extends _i1.Mock implements _i16.Canvas { @override void drawShadow( - _i16.Path? path, - _i16.Color? color, + _i17.Path? path, + _i17.Color? color, double? elevation, bool? transparentOccluder, ) => @@ -1684,16 +1731,16 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { } @override - _i16.Offset get point => (super.noSuchMethod( + _i17.Offset get point => (super.noSuchMethod( Invocation.getter(#point), - returnValue: _FakeOffset_17( + returnValue: _FakeOffset_18( this, Invocation.getter(#point), ), - ) as _i16.Offset); + ) as _i17.Offset); @override - set point(_i16.Offset? _point) => super.noSuchMethod( + set point(_i17.Offset? _point) => super.noSuchMethod( Invocation.setter( #point, _point, @@ -1702,18 +1749,18 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { ); @override - _i17.TextStyle get style => (super.noSuchMethod( + _i18.TextStyle get style => (super.noSuchMethod( Invocation.getter(#style), - returnValue: _FakeTextStyle_18( + returnValue: _FakeTextStyle_19( this, Invocation.getter(#style), ), - ) as _i17.TextStyle); + ) as _i18.TextStyle); @override String get text => (super.noSuchMethod( Invocation.getter(#text), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.getter(#text), ), @@ -1734,7 +1781,7 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { @override String get type => (super.noSuchMethod( Invocation.getter(#type), - returnValue: _i25.dummyValue( + returnValue: _i26.dummyValue( this, Invocation.getter(#type), ), @@ -1771,16 +1818,16 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { ) as bool); @override - _i16.Paint get paint => (super.noSuchMethod( + _i17.Paint get paint => (super.noSuchMethod( Invocation.getter(#paint), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.getter(#paint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - void call(_i16.Canvas? canvas) => super.noSuchMethod( + void call(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #call, [canvas], @@ -1798,89 +1845,89 @@ class MockTextCommand extends _i1.Mock implements _i9.TextCommand { ) as Map); @override - _i26.Future prepareForRuntime() => (super.noSuchMethod( + _i27.Future prepareForRuntime() => (super.noSuchMethod( Invocation.method( #prepareForRuntime, [], ), - returnValue: _i26.Future.value(), - returnValueForMissingStub: _i26.Future.value(), - ) as _i26.Future); + returnValue: _i27.Future.value(), + returnValueForMissingStub: _i27.Future.value(), + ) as _i27.Future); } /// A class which mocks [GraphicFactory]. /// /// See the documentation for Mockito's code generation for more information. -class MockGraphicFactory extends _i1.Mock implements _i27.GraphicFactory { +class MockGraphicFactory extends _i1.Mock implements _i28.GraphicFactory { MockGraphicFactory() { _i1.throwOnMissingStub(this); } @override - _i16.Paint createPaint() => (super.noSuchMethod( + _i17.Paint createPaint() => (super.noSuchMethod( Invocation.method( #createPaint, [], ), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.method( #createPaint, [], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i18.PathWithActionHistory createPathWithActionHistory() => + _i19.PathWithActionHistory createPathWithActionHistory() => (super.noSuchMethod( Invocation.method( #createPathWithActionHistory, [], ), - returnValue: _FakePathWithActionHistory_19( + returnValue: _FakePathWithActionHistory_20( this, Invocation.method( #createPathWithActionHistory, [], ), ), - ) as _i18.PathWithActionHistory); + ) as _i19.PathWithActionHistory); @override - _i16.PictureRecorder createPictureRecorder() => (super.noSuchMethod( + _i17.PictureRecorder createPictureRecorder() => (super.noSuchMethod( Invocation.method( #createPictureRecorder, [], ), - returnValue: _FakePictureRecorder_20( + returnValue: _FakePictureRecorder_21( this, Invocation.method( #createPictureRecorder, [], ), ), - ) as _i16.PictureRecorder); + ) as _i17.PictureRecorder); @override - _i16.Canvas createCanvasWithRecorder(_i16.PictureRecorder? recorder) => + _i17.Canvas createCanvasWithRecorder(_i17.PictureRecorder? recorder) => (super.noSuchMethod( Invocation.method( #createCanvasWithRecorder, [recorder], ), - returnValue: _FakeCanvas_21( + returnValue: _FakeCanvas_22( this, Invocation.method( #createCanvasWithRecorder, [recorder], ), ), - ) as _i16.Canvas); + ) as _i17.Canvas); @override - _i16.Paint createWatercolorPaint( - _i16.Paint? originalPaint, + _i17.Paint createWatercolorPaint( + _i17.Paint? originalPaint, double? blurSigma, ) => (super.noSuchMethod( @@ -1891,7 +1938,7 @@ class MockGraphicFactory extends _i1.Mock implements _i27.GraphicFactory { blurSigma, ], ), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.method( #createWatercolorPaint, @@ -1901,43 +1948,43 @@ class MockGraphicFactory extends _i1.Mock implements _i27.GraphicFactory { ], ), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - _i16.Paint copyPaint(_i16.Paint? original) => (super.noSuchMethod( + _i17.Paint copyPaint(_i17.Paint? original) => (super.noSuchMethod( Invocation.method( #copyPaint, [original], ), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.method( #copyPaint, [original], ), ), - ) as _i16.Paint); + ) as _i17.Paint); } /// A class which mocks [BoundingBox]. /// /// See the documentation for Mockito's code generation for more information. -class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { +class MockBoundingBox extends _i1.Mock implements _i29.BoundingBox { MockBoundingBox() { _i1.throwOnMissingStub(this); } @override - _i16.Offset get center => (super.noSuchMethod( + _i17.Offset get center => (super.noSuchMethod( Invocation.getter(#center), - returnValue: _FakeOffset_17( + returnValue: _FakeOffset_18( this, Invocation.getter(#center), ), - ) as _i16.Offset); + ) as _i17.Offset); @override - set center(_i16.Offset? _center) => super.noSuchMethod( + set center(_i17.Offset? _center) => super.noSuchMethod( Invocation.setter( #center, _center, @@ -1991,13 +2038,13 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i29.BoundingBoxAction get currentAction => (super.noSuchMethod( + _i30.BoundingBoxAction get currentAction => (super.noSuchMethod( Invocation.getter(#currentAction), - returnValue: _i29.BoundingBoxAction.none, - ) as _i29.BoundingBoxAction); + returnValue: _i30.BoundingBoxAction.none, + ) as _i30.BoundingBoxAction); @override - set currentAction(_i29.BoundingBoxAction? _currentAction) => + set currentAction(_i30.BoundingBoxAction? _currentAction) => super.noSuchMethod( Invocation.setter( #currentAction, @@ -2007,15 +2054,15 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i30.BoundingBoxResizeAction get currentBoundingBoxResizeAction => + _i31.BoundingBoxResizeAction get currentBoundingBoxResizeAction => (super.noSuchMethod( Invocation.getter(#currentBoundingBoxResizeAction), - returnValue: _i30.BoundingBoxResizeAction.none, - ) as _i30.BoundingBoxResizeAction); + returnValue: _i31.BoundingBoxResizeAction.none, + ) as _i31.BoundingBoxResizeAction); @override set currentBoundingBoxResizeAction( - _i30.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => + _i31.BoundingBoxResizeAction? _currentBoundingBoxResizeAction) => super.noSuchMethod( Invocation.setter( #currentBoundingBoxResizeAction, @@ -2025,7 +2072,7 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - set lastDragGlobalPosition(_i16.Offset? _lastDragGlobalPosition) => + set lastDragGlobalPosition(_i17.Offset? _lastDragGlobalPosition) => super.noSuchMethod( Invocation.setter( #lastDragGlobalPosition, @@ -2035,7 +2082,7 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - set dragStartLocalPosition(_i16.Offset? _dragStartLocalPosition) => + set dragStartLocalPosition(_i17.Offset? _dragStartLocalPosition) => super.noSuchMethod( Invocation.setter( #dragStartLocalPosition, @@ -2061,16 +2108,16 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i16.Paint get boxPaint => (super.noSuchMethod( + _i17.Paint get boxPaint => (super.noSuchMethod( Invocation.getter(#boxPaint), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.getter(#boxPaint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - set boxPaint(_i16.Paint? _boxPaint) => super.noSuchMethod( + set boxPaint(_i17.Paint? _boxPaint) => super.noSuchMethod( Invocation.setter( #boxPaint, _boxPaint, @@ -2079,16 +2126,16 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i16.Paint get handlePaint => (super.noSuchMethod( + _i17.Paint get handlePaint => (super.noSuchMethod( Invocation.getter(#handlePaint), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.getter(#handlePaint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - set handlePaint(_i16.Paint? _handlePaint) => super.noSuchMethod( + set handlePaint(_i17.Paint? _handlePaint) => super.noSuchMethod( Invocation.setter( #handlePaint, _handlePaint, @@ -2097,16 +2144,16 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i16.Paint get rotationHandlePaint => (super.noSuchMethod( + _i17.Paint get rotationHandlePaint => (super.noSuchMethod( Invocation.getter(#rotationHandlePaint), - returnValue: _i25.dummyValue<_i16.Paint>( + returnValue: _i26.dummyValue<_i17.Paint>( this, Invocation.getter(#rotationHandlePaint), ), - ) as _i16.Paint); + ) as _i17.Paint); @override - set rotationHandlePaint(_i16.Paint? _rotationHandlePaint) => + set rotationHandlePaint(_i17.Paint? _rotationHandlePaint) => super.noSuchMethod( Invocation.setter( #rotationHandlePaint, @@ -2131,25 +2178,25 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - _i16.Rect get rect => (super.noSuchMethod( + _i17.Rect get rect => (super.noSuchMethod( Invocation.getter(#rect), - returnValue: _FakeRect_16( + returnValue: _FakeRect_17( this, Invocation.getter(#rect), ), - ) as _i16.Rect); + ) as _i17.Rect); @override - List<_i16.Offset> getCorners() => (super.noSuchMethod( + List<_i17.Offset> getCorners() => (super.noSuchMethod( Invocation.method( #getCorners, [], ), - returnValue: <_i16.Offset>[], - ) as List<_i16.Offset>); + returnValue: <_i17.Offset>[], + ) as List<_i17.Offset>); @override - void determineAction(_i16.Offset? globalPoint) => super.noSuchMethod( + void determineAction(_i17.Offset? globalPoint) => super.noSuchMethod( Invocation.method( #determineAction, [globalPoint], @@ -2158,7 +2205,7 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - void updateDrag(_i16.Offset? globalPoint) => super.noSuchMethod( + void updateDrag(_i17.Offset? globalPoint) => super.noSuchMethod( Invocation.method( #updateDrag, [globalPoint], @@ -2176,7 +2223,7 @@ class MockBoundingBox extends _i1.Mock implements _i28.BoundingBox { ); @override - void drawGuides(_i16.Canvas? canvas) => super.noSuchMethod( + void drawGuides(_i17.Canvas? canvas) => super.noSuchMethod( Invocation.method( #drawGuides, [canvas], diff --git a/test/unit/workspace/render_image_for_export_test.mocks.dart b/test/unit/workspace/render_image_for_export_test.mocks.dart index c5f85b59..98b2ed33 100644 --- a/test/unit/workspace/render_image_for_export_test.mocks.dart +++ b/test/unit/workspace/render_image_for_export_test.mocks.dart @@ -706,6 +706,15 @@ class MockCommandManager extends _i1.Mock implements _i6.CommandManager { returnValueForMissingStub: null, ); + @override + void removeCommand(_i3.Command? commandToRemove) => super.noSuchMethod( + Invocation.method( + #removeCommand, + [commandToRemove], + ), + returnValueForMissingStub: null, + ); + @override void setUndoStack(List<_i3.Command>? commands) => super.noSuchMethod( Invocation.method( diff --git a/test/widget/workspace_page/clipping_tool_test.dart b/test/widget/workspace_page/clipping_tool_test.dart new file mode 100644 index 00000000..40845228 --- /dev/null +++ b/test/widget/workspace_page/clipping_tool_test.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; +import 'package:paintroid/app.dart'; +import 'package:paintroid/core/tools/tool_data.dart'; +import '../../utils/test_utils.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + late Widget sut; + + setUp(() async => sut = ProviderScope(child: App(showOnboardingPage: false))); + + testWidgets('[CLIPPING_TOOL]: selecting clipping tool shows checkmark', + (WidgetTester tester) async { + UIInteraction.initialize(tester); + await tester.pumpWidget(sut); + await UIInteraction.createNewImage(); + + expect(WidgetFinder.checkMark, findsNothing); + + await UIInteraction.selectTool(ToolData.CLIPPING.name); + + expect(WidgetFinder.checkMark, findsOneWidget); + }); + + testWidgets('[CLIPPING_TOOL]: selecting other tools hide the checkmark', + (WidgetTester tester) async { + UIInteraction.initialize(tester); + await tester.pumpWidget(sut); + await UIInteraction.createNewImage(); + + expect(WidgetFinder.checkMark, findsNothing); + + await UIInteraction.selectTool(ToolData.CLIPPING.name); + + expect(WidgetFinder.checkMark, findsOneWidget); + + await UIInteraction.selectTool(ToolData.BRUSH.name); + + expect(WidgetFinder.checkMark, findsNothing); + }); +}