Approximate comparison of JPEG result

The browsers have various rounding errors so we need to compare the
output data only approximately and not exactly.
pull/36/head
Pierre Ossman 5 years ago committed by Lauri Kasanen
parent 073737c8ac
commit fcd7836a83

@ -1,6 +1,9 @@
// noVNC specific assertions // noVNC specific assertions
chai.use(function (_chai, utils) { 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 obj = this._obj;
const ctx = obj._target.getContext('2d'); const ctx = obj._target.getContext('2d');
const dataCl = ctx.getImageData(0, 0, obj._target.width, obj._target.height).data; 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"); new chai.Assertion(len).to.be.equal(targetData.length, "unexpected display size");
let same = true; let same = true;
for (let i = 0; i < len; i++) { for (let i = 0; i < len; i++) {
if (data[i] != targetData[i]) { if (!cmp(data[i], targetData[i])) {
same = false; same = false;
break; break;
} }

@ -365,17 +365,22 @@ describe('Tight Decoder', function () {
testDecodeRect(decoder, 0, 0, 4, 4, data, display, 24); 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([ let targetData = new Uint8Array([
0xfe, 0x00, 0x00, 255, 0xfe, 0x00, 0x00, 255, 0x00, 0xff, 0x01, 255, 0x00, 0xff, 0x01, 255, 0xff, 0x00, 0x00, 255, 0xff, 0x00, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
0xfe, 0x00, 0x00, 255, 0xfd, 0x00, 0x00, 255, 0x00, 0xff, 0x01, 255, 0x01, 0xff, 0x02, 255, 0xff, 0x00, 0x00, 255, 0xff, 0x00, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
0x00, 0xff, 0x01, 255, 0x00, 0xff, 0x01, 255, 0xfe, 0x00, 0x00, 255, 0xfe, 0x00, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0xff, 0x00, 0x00, 255, 0xff, 0x00, 0x00, 255,
0x00, 0xff, 0x01, 255, 0x01, 0xff, 0x00, 255, 0xfe, 0x00, 0x00, 255, 0xfd, 0x01, 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 = () => { display.onflush = () => {
expect(display).to.have.displayed(targetData); expect(display).to.have.displayed(targetData, almost);
done(); done();
}; };
display.flush(); display.flush();

Loading…
Cancel
Save