|
1 | | -const {test, Test} = require('tap'); |
| 1 | +const {test} = require('tap'); |
2 | 2 |
|
3 | 3 | const {rgbToHsv, hsvToRgb} = require('../../src/util/color-conversions'); |
4 | 4 |
|
5 | | -Test.prototype.addAssert('colorsAlmostEqual', 2, function (found, wanted, message, extra) { |
6 | | - /* eslint-disable no-invalid-this */ |
| 5 | +const colorsAlmostEqual = (t, found, wanted, message, extra) => { |
7 | 6 | message += `: found ${JSON.stringify(Array.from(found))}, wanted ${JSON.stringify(Array.from(wanted))}`; |
8 | 7 |
|
9 | 8 | // should always return another assert call, or |
10 | 9 | // this.pass(message) or this.fail(message, extra) |
11 | 10 | if (found.length !== wanted.length) { |
12 | | - return this.fail(message, extra); |
| 11 | + return t.fail(message, extra); |
13 | 12 | } |
14 | 13 |
|
15 | 14 | for (let i = 0; i < found.length; i++) { |
16 | 15 | // smallest meaningful difference--detects changes in hue value after rounding |
17 | 16 | if (Math.abs(found[i] - wanted[i]) >= 0.5 / 360) { |
18 | | - return this.fail(message, extra); |
| 17 | + return t.fail(message, extra); |
19 | 18 | } |
20 | 19 | } |
21 | 20 |
|
22 | | - return this.pass(message); |
23 | | - /* eslint-enable no-invalid-this */ |
24 | | -}); |
| 21 | + return t.pass(message); |
| 22 | +}; |
25 | 23 |
|
26 | 24 | test('RGB to HSV', t => { |
27 | 25 | const dst = [0, 0, 0]; |
28 | | - t.colorsAlmostEqual(rgbToHsv([255, 255, 255], dst), [0, 0, 1], 'white'); |
29 | | - t.colorsAlmostEqual(rgbToHsv([0, 0, 0], dst), [0, 0, 0], 'black'); |
30 | | - t.colorsAlmostEqual(rgbToHsv([127, 127, 127], dst), [0, 0, 0.498], 'grey'); |
31 | | - t.colorsAlmostEqual(rgbToHsv([255, 255, 0], dst), [0.167, 1, 1], 'yellow'); |
32 | | - t.colorsAlmostEqual(rgbToHsv([1, 0, 0], dst), [0, 1, 0.00392], 'dark red'); |
| 26 | + colorsAlmostEqual(t, rgbToHsv([255, 255, 255], dst), [0, 0, 1], 'white'); |
| 27 | + colorsAlmostEqual(t, rgbToHsv([0, 0, 0], dst), [0, 0, 0], 'black'); |
| 28 | + colorsAlmostEqual(t, rgbToHsv([127, 127, 127], dst), [0, 0, 0.498], 'grey'); |
| 29 | + colorsAlmostEqual(t, rgbToHsv([255, 255, 0], dst), [0.167, 1, 1], 'yellow'); |
| 30 | + colorsAlmostEqual(t, rgbToHsv([1, 0, 0], dst), [0, 1, 0.00392], 'dark red'); |
33 | 31 |
|
34 | 32 | t.end(); |
35 | 33 | }); |
36 | 34 |
|
37 | 35 | test('HSV to RGB', t => { |
38 | 36 | const dst = new Uint8ClampedArray(3); |
39 | | - t.colorsAlmostEqual(hsvToRgb([0, 1, 1], dst), [255, 0, 0], 'red'); |
40 | | - t.colorsAlmostEqual(hsvToRgb([1, 1, 1], dst), [255, 0, 0], 'red (hue of 1)'); |
41 | | - t.colorsAlmostEqual(hsvToRgb([0.5, 1, 1], dst), [0, 255, 255], 'cyan'); |
42 | | - t.colorsAlmostEqual(hsvToRgb([1.5, 1, 1], dst), [0, 255, 255], 'cyan (hue of 1.5)'); |
43 | | - t.colorsAlmostEqual(hsvToRgb([0, 0, 0], dst), [0, 0, 0], 'black'); |
44 | | - t.colorsAlmostEqual(hsvToRgb([0.5, 1, 0], dst), [0, 0, 0], 'black (with hue and saturation)'); |
45 | | - t.colorsAlmostEqual(hsvToRgb([0, 1, 0.00392], dst), [1, 0, 0], 'dark red'); |
| 37 | + colorsAlmostEqual(t, hsvToRgb([0, 1, 1], dst), [255, 0, 0], 'red'); |
| 38 | + colorsAlmostEqual(t, hsvToRgb([1, 1, 1], dst), [255, 0, 0], 'red (hue of 1)'); |
| 39 | + colorsAlmostEqual(t, hsvToRgb([0.5, 1, 1], dst), [0, 255, 255], 'cyan'); |
| 40 | + colorsAlmostEqual(t, hsvToRgb([1.5, 1, 1], dst), [0, 255, 255], 'cyan (hue of 1.5)'); |
| 41 | + colorsAlmostEqual(t, hsvToRgb([0, 0, 0], dst), [0, 0, 0], 'black'); |
| 42 | + colorsAlmostEqual(t, hsvToRgb([0.5, 1, 0], dst), [0, 0, 0], 'black (with hue and saturation)'); |
| 43 | + colorsAlmostEqual(t, hsvToRgb([0, 1, 0.00392], dst), [1, 0, 0], 'dark red'); |
46 | 44 |
|
47 | 45 | t.end(); |
48 | 46 | }); |
0 commit comments