From 3762300399fcc947490ecbc7e5eb14840692ab86 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Fri, 4 Sep 2020 16:48:44 +0200 Subject: [PATCH] Approximate comparison of JPEG result The browsers have various rounding errors so we need to compare the output data only approximately and not exactly. --- tests/assertions.js | 7 +++++-- tests/test.tight.js | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/tests/assertions.js b/tests/assertions.js index 05957c0..bab932c 100644 --- a/tests/assertions.js +++ b/tests/assertions.js @@ -1,6 +1,9 @@ // noVNC specific assertions chai.use(function (_chai, utils) { - _chai.Assertion.addMethod('displayed', function (targetData) { + function _equal(a, b) { + return a === b; + } + _chai.Assertion.addMethod('displayed', function (targetData, cmp=_equal) { const obj = this._obj; const ctx = obj._target.getContext('2d'); const dataCl = ctx.getImageData(0, 0, obj._target.width, obj._target.height).data; @@ -10,7 +13,7 @@ chai.use(function (_chai, utils) { new chai.Assertion(len).to.be.equal(targetData.length, "unexpected display size"); let same = true; for (let i = 0; i < len; i++) { - if (data[i] != targetData[i]) { + if (!cmp(data[i], targetData[i])) { same = false; break; } diff --git a/tests/test.tight.js b/tests/test.tight.js index d89cf57..4aa47d7 100644 --- a/tests/test.tight.js +++ b/tests/test.tight.js @@ -365,17 +365,22 @@ describe('Tight Decoder', function () { testDecodeRect(decoder, 0, 0, 4, 4, data, display, 24); - // We got some rounding errors when we compressed things, - // hence not perfect 0xff/0x00 values let targetData = new Uint8Array([ - 0xfe, 0x00, 0x00, 255, 0xfe, 0x00, 0x00, 255, 0x00, 0xff, 0x01, 255, 0x00, 0xff, 0x01, 255, - 0xfe, 0x00, 0x00, 255, 0xfd, 0x00, 0x00, 255, 0x00, 0xff, 0x01, 255, 0x01, 0xff, 0x02, 255, - 0x00, 0xff, 0x01, 255, 0x00, 0xff, 0x01, 255, 0xfe, 0x00, 0x00, 255, 0xfe, 0x00, 0x00, 255, - 0x00, 0xff, 0x01, 255, 0x01, 0xff, 0x00, 255, 0xfe, 0x00, 0x00, 255, 0xfd, 0x01, 0x00, 255 + 0xff, 0x00, 0x00, 255, 0xff, 0x00, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, + 0xff, 0x00, 0x00, 255, 0xff, 0x00, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, + 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0xff, 0x00, 0x00, 255, 0xff, 0x00, 0x00, 255, + 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0xff, 0x00, 0x00, 255, 0xff, 0x00, 0x00, 255 ]); + // Browsers have rounding errors, so we need an approximate + // comparing function + function almost(a, b) { + let diff = Math.abs(a - b); + return diff < 5; + } + display.onflush = () => { - expect(display).to.have.displayed(targetData); + expect(display).to.have.displayed(targetData, almost); done(); }; display.flush(); -- 2.39.5