Line data Source code
1 : import 'dart:typed_data'; 2 : import 'dart:ui'; 3 : 4 : import 'package:test/fake.dart'; 5 : 6 : class MockCanvas extends Fake implements Canvas { 7 : int saveCount = 1; 8 : List<String> methodCalls = []; 9 : 10 2 : @override 11 : void translate(double dx, double dy) { 12 2 : final ddx = _normalize(dx); 13 2 : final ddy = _normalize(dy); 14 6 : methodCalls.add('translate($ddx, $ddy)'); 15 : } 16 : 17 0 : @override 18 : void scale(double sx, [double? sy]) { 19 0 : final ssx = _normalize(sx); 20 : if (sy == null) { 21 0 : methodCalls.add('scale($ssx)'); 22 : } else { 23 0 : final ssy = _normalize(sy); 24 0 : methodCalls.add('scale($ssx, $ssy)'); 25 : } 26 : } 27 : 28 2 : double _normalize(double d) { 29 : // this prevents it from printing -0 which would be harder to assert in tests 30 2 : return _isNegativeZero(d) ? 0.0 : d; 31 : } 32 : 33 2 : bool _isNegativeZero(double d) { 34 6 : return d.abs() == 0.0 && d.isNegative; 35 : } 36 : 37 0 : @override 38 : void rotate(double radians) { 39 0 : methodCalls.add('rotate($radians)'); 40 : } 41 : 42 2 : @override 43 : void drawRect(Rect rect, Paint paint) { 44 4 : methodCalls.add( 45 10 : 'drawRect(${rect.left}, ${rect.top}, ${rect.width}, ${rect.height})', 46 : ); 47 : } 48 : 49 1 : @override 50 : void clipRect( 51 : Rect rect, { 52 : ClipOp clipOp = ClipOp.intersect, 53 : bool doAntiAlias = true, 54 : }) { 55 2 : methodCalls.add( 56 5 : 'clipRect(${rect.left}, ${rect.top}, ${rect.width}, ${rect.height})', 57 : ); 58 : } 59 : 60 2 : @override 61 : void transform(Float64List matrix4) { 62 8 : final asString = matrix4.map<String>((e) => e.toString()).join(', '); 63 6 : methodCalls.add('transform($asString)'); 64 : } 65 : 66 0 : @override 67 : int getSaveCount() { 68 0 : return saveCount; 69 : } 70 : 71 2 : @override 72 : void restore() { 73 4 : saveCount--; 74 : } 75 : 76 2 : @override 77 : void save() { 78 4 : saveCount++; 79 : } 80 : }