@@ -6,18 +6,31 @@ import 'dart:ui';
6
6
7
7
import 'package:test/test.dart' ;
8
8
9
- /// Positive result when the Colors will map to the same argb8888 color.
10
- Matcher colorMatches (dynamic o) => (v) {
11
- Expect .isTrue (o is Color );
12
- Expect .isTrue (v is Color );
13
- if (o is Color && v is Color ) {
14
- Expect .equals (o.colorSpace, v.colorSpace);
15
- Expect .approxEquals (o.a, v.a, 1 / 255 );
16
- Expect .approxEquals (o.r, v.r, 1 / 255 );
17
- Expect .approxEquals (o.g, v.g, 1 / 255 );
18
- Expect .approxEquals (o.b, v.b, 1 / 255 );
9
+ class _ColorMatcher extends Matcher {
10
+ _ColorMatcher (this ._target, this ._threshold);
11
+
12
+ final Color _target;
13
+ final double _threshold;
14
+
15
+ @override
16
+ Description describe (Description description) {
17
+ return description.add ('matches color "$_target " with threshold "$_threshold ".' );
19
18
}
20
- };
19
+
20
+ @override
21
+ bool matches (dynamic item, Map <dynamic , dynamic > matchState) {
22
+ return item is Color &&
23
+ item.colorSpace == _target.colorSpace &&
24
+ (item.a - _target.a).abs () <= _threshold &&
25
+ (item.r - _target.r).abs () <= _threshold &&
26
+ (item.g - _target.g).abs () <= _threshold &&
27
+ (item.b - _target.b).abs () <= _threshold;
28
+ }
29
+ }
30
+
31
+ Matcher colorMatches (Color color, {double threshold = 1 / 255 }) {
32
+ return _ColorMatcher (color, threshold);
33
+ }
21
34
22
35
class NotAColor extends Color {
23
36
const NotAColor (super .value);
0 commit comments