MockCanvas class

MockCanvas is a utility class for writing tests. It supports the same API as the regular Canvas class from dart:ui (in theory; any missing commands can be added as the need arises). In addition, this class is also a Matcher, allowing it to be used in expect() calls:

final canvas = MockCanvas();
// ... draw something on the canvas
// then check that the commands issued were the ones that you'd expect:
expect(
  canvas,
  MockCanvas()
    ..translate(10, 10)
    ..drawRect(const Rect.fromLTWH(0, 0, 100, 100)),
);

Two mock canvases will match only if they have the same number of commands, and if each pair of corresponding commands matches.

Multiple transform commands (translate(), scale(), rotate() and transform()) that are issued in a row are always joined into a single combined transform. Thus, for example, calling translate(10, 10) and then translate(30, -10) will match a single call translate(40, 0).

Some commands can be partially specified. For example, in drawLine() and drawRect() the paint argument is optional. If provided, it will be checked against the actual Paint used, but if omitted, the match will still succeed.

Commands that involve numeric components (i.e. coordinates, dimensions, etc) will be matched approximately, with the default absolute tolerance of 1e-10.

Inheritance
Implemented types

Constructors

MockCanvas({AssertionMode mode = AssertionMode.matchExactly})

Properties

commands List<CanvasCommand>
final
hashCode int
The hash code for this object.
no setterinherited
mode AssertionMode
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
saveCount int
getter/setter pair
saveStack List<Matrix4>
final
tolerance double
The absolute tolerance used when comparing numeric quantities for equality. Two numeric variables x and y are considered equal if they are within the distance tolerance from each other.
getter/setter pair

Methods

clipPath(Path path, {bool doAntiAlias = true}) → void
Reduces the clip region to the intersection of the current clip and the given Path.
inherited
clipRect(Rect rect, {ClipOp clipOp = ClipOp.intersect, bool doAntiAlias = true}) → void
Reduces the clip region to the intersection of the current clip and the given rectangle.
override
clipRRect(RRect rrect, {bool doAntiAlias = true}) → void
Reduces the clip region to the intersection of the current clip and the given rounded rectangle.
inherited
containsAnyOrder(covariant MockCanvas other, Map matchState) bool
describe(Description description) Description
Builds a textual description of the matcher.
override
describeMismatch(dynamic item, Description mismatchDescription, Map matchState, bool verbose) Description
Builds a textual description of a specific mismatch.
override
drawArc(Rect rect, double startAngle, double sweepAngle, bool useCenter, Paint paint) → void
Draw an arc scaled to fit inside the given rectangle.
inherited
drawAtlas(Image atlas, List<RSTransform> transforms, List<Rect> rects, List<Color>? colors, BlendMode? blendMode, Rect? cullRect, Paint paint) → void
Draws many parts of an image - the atlas - onto the canvas.
inherited
drawCircle(Offset c, double radius, Paint paint) → void
Draws a circle centered at the point given by the first argument and that has the radius given by the second argument, with the Paint given in the third argument. Whether the circle is filled or stroked (or both) is controlled by Paint.style.
inherited
drawColor(Color color, BlendMode blendMode) → void
Paints the given Color onto the canvas, applying the given BlendMode, with the given color being the source and the background being the destination.
inherited
drawDRRect(RRect outer, RRect inner, Paint paint) → void
Draws a shape consisting of the difference between two rounded rectangles with the given Paint. Whether this shape is filled or stroked (or both) is controlled by Paint.style.
inherited
drawImage(Image? image, Offset offset, [Paint? paint]) → void
Draws the given Image into the canvas with its top-left corner at the given Offset. The image is composited into the canvas using the given Paint.
override
drawImageNine(Image image, Rect center, Rect dst, Paint paint) → void
Draws the given Image into the canvas using the given Paint.
inherited
drawImageRect(Image image, Rect src, Rect dst, Paint paint) → void
Draws the subset of the given image described by the src argument into the canvas in the axis-aligned rectangle given by the dst argument.
inherited
drawLine(Offset p1, Offset p2, [Paint? paint]) → void
Draws a line between the given points using the given paint. The line is stroked, the value of the Paint.style is ignored for this call.
override
drawOval(Rect rect, Paint paint) → void
Draws an axis-aligned oval that fills the given axis-aligned rectangle with the given Paint. Whether the oval is filled or stroked (or both) is controlled by Paint.style.
inherited
drawPaint(Paint paint) → void
Fills the canvas with the given Paint.
inherited
drawParagraph(Paragraph? paragraph, Offset offset) → void
Draws the text in the given Paragraph into this canvas at the given Offset.
override
drawPath(Path path, Paint paint) → void
Draws the given Path with the given Paint.
inherited
drawPicture(Picture picture) → void
Draw the given picture onto the canvas. To create a picture, see PictureRecorder.
inherited
drawPoints(PointMode pointMode, List<Offset> points, Paint paint) → void
Draws a sequence of points according to the given PointMode.
inherited
drawRawAtlas(Image atlas, Float32List rstTransforms, Float32List rects, Int32List? colors, BlendMode? blendMode, Rect? cullRect, Paint paint) → void
Draws many parts of an image - the atlas - onto the canvas.
inherited
drawRawPoints(PointMode pointMode, Float32List points, Paint paint) → void
Draws a sequence of points according to the given PointMode.
inherited
drawRect(Rect rect, [Paint? paint]) → void
Draws a rectangle with the given Paint. Whether the rectangle is filled or stroked (or both) is controlled by Paint.style.
override
drawRRect(RRect rrect, [Paint? paint]) → void
Draws a rounded rectangle with the given Paint. Whether the rectangle is filled or stroked (or both) is controlled by Paint.style.
override
drawShadow(Path path, Color color, double elevation, bool transparentOccluder) → void
Draws a shadow for a Path representing the given material elevation.
inherited
drawVertices(Vertices vertices, BlendMode blendMode, Paint paint) → void
Draws a set of Vertices onto the canvas as one or more triangles.
inherited
getDestinationClipBounds() Rect
Returns the conservative bounds of the combined result of all clip methods executed within the current save stack of this Canvas object, as measured in the destination coordinate space in which the Picture will be rendered.
inherited
getLocalClipBounds() Rect
Returns the conservative bounds of the combined result of all clip methods executed within the current save stack of this Canvas object, as measured in the local coordinate space under which rendering operations are currently performed.
inherited
getSaveCount() int
Returns the number of items on the save stack, including the initial state. This means it returns 1 for a clean canvas, and that each call to save and saveLayer increments it, and that each matching call to restore decrements it.
override
getTransform() Float64List
Returns the current transform including the combined result of all transform methods executed since the creation of this Canvas object, and respecting the save/restore history.
inherited
matches(covariant MockCanvas other, Map matchState) bool
Does the matching of the actual vs expected values.
override
matchExactly(covariant MockCanvas other, Map matchState) bool
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
restore() → void
Pops the current save stack, if there is anything to pop. Otherwise, does nothing.
override
restoreToCount(int count) → void
Restores the save stack to a previous level as might be obtained from getSaveCount. If count is less than 1, the stack is restored to its initial state. If count is greater than the current getSaveCount then nothing happens.
inherited
rotate(double angle) → void
Add a rotation to the current transform. The argument is in radians clockwise.
override
save() → void
Saves a copy of the current transform and clip on the save stack.
override
saveLayer(Rect? bounds, Paint paint) → void
Saves a copy of the current transform and clip on the save stack, and then creates a new group which subsequent calls will become a part of. When the save stack is later popped, the group will be flattened into a layer and have the given paint's Paint.colorFilter and Paint.blendMode applied.
inherited
scale(double sx, [double? sy]) → void
Add an axis-aligned scale to the current transform, scaling by the first argument in the horizontal direction and the second in the vertical direction.
override
skew(double sx, double sy) → void
Add an axis-aligned skew to the current transform, with the first argument being the horizontal skew in rise over run units clockwise around the origin, and the second argument being the vertical skew in rise over run units clockwise around the origin.
inherited
toString() String
A string representation of this object.
inherited
transform(Float64List matrix4) → void
Multiply the current transform by the specified 4⨉4 transformation matrix specified as a list of values in column-major order.
override
translate(double dx, double dy) → void
Add a translation to the current transform, shifting the coordinate space horizontally by the first argument and vertically by the second argument.
override

Operators

operator ==(Object other) bool
The equality operator.
inherited