b91b1e8edc
It was overlooked in the previous commit because we couldn't feed empty data messages through the test framework.
130 lines
5.2 KiB
JavaScript
130 lines
5.2 KiB
JavaScript
const expect = chai.expect;
|
|
|
|
import Websock from '../core/websock.js';
|
|
import Display from '../core/display.js';
|
|
|
|
import RawDecoder from '../core/decoders/raw.js';
|
|
|
|
import FakeWebSocket from './fake.websocket.js';
|
|
|
|
function testDecodeRect(decoder, x, y, width, height, data, display, depth) {
|
|
let sock;
|
|
|
|
sock = new Websock;
|
|
sock.open("ws://example.com");
|
|
|
|
sock.on('message', () => {
|
|
decoder.decodeRect(x, y, width, height, sock, display, depth);
|
|
});
|
|
|
|
// Empty messages are filtered at multiple layers, so we need to
|
|
// do a direct call
|
|
if (data.length === 0) {
|
|
decoder.decodeRect(x, y, width, height, sock, display, depth);
|
|
} else {
|
|
sock._websocket._receiveData(new Uint8Array(data));
|
|
}
|
|
|
|
display.flip();
|
|
}
|
|
|
|
describe('Raw Decoder', function () {
|
|
let decoder;
|
|
let display;
|
|
|
|
before(FakeWebSocket.replace);
|
|
after(FakeWebSocket.restore);
|
|
|
|
beforeEach(function () {
|
|
decoder = new RawDecoder();
|
|
display = new Display(document.createElement('canvas'));
|
|
display.resize(4, 4);
|
|
});
|
|
|
|
it('should handle the Raw encoding', function () {
|
|
testDecodeRect(decoder, 0, 0, 2, 2,
|
|
[0xff, 0x00, 0x00, 0, 0x00, 0xff, 0x00, 0,
|
|
0x00, 0xff, 0x00, 0, 0xff, 0x00, 0x00, 0],
|
|
display, 24);
|
|
testDecodeRect(decoder, 2, 0, 2, 2,
|
|
[0x00, 0x00, 0xff, 0, 0x00, 0x00, 0xff, 0,
|
|
0x00, 0x00, 0xff, 0, 0x00, 0x00, 0xff, 0],
|
|
display, 24);
|
|
testDecodeRect(decoder, 0, 2, 4, 1,
|
|
[0xee, 0x00, 0xff, 0, 0x00, 0xee, 0xff, 0,
|
|
0xaa, 0xee, 0xff, 0, 0xab, 0xee, 0xff, 0],
|
|
display, 24);
|
|
testDecodeRect(decoder, 0, 3, 4, 1,
|
|
[0xee, 0x00, 0xff, 0, 0x00, 0xee, 0xff, 0,
|
|
0xaa, 0xee, 0xff, 0, 0xab, 0xee, 0xff, 0],
|
|
display, 24);
|
|
|
|
let targetData = new Uint8Array([
|
|
0xff, 0x00, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255,
|
|
0x00, 0xff, 0x00, 255, 0xff, 0x00, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255,
|
|
0xee, 0x00, 0xff, 255, 0x00, 0xee, 0xff, 255, 0xaa, 0xee, 0xff, 255, 0xab, 0xee, 0xff, 255,
|
|
0xee, 0x00, 0xff, 255, 0x00, 0xee, 0xff, 255, 0xaa, 0xee, 0xff, 255, 0xab, 0xee, 0xff, 255
|
|
]);
|
|
|
|
expect(display).to.have.displayed(targetData);
|
|
});
|
|
|
|
it('should handle the Raw encoding in low colour mode', function () {
|
|
testDecodeRect(decoder, 0, 0, 2, 2,
|
|
[0x30, 0x30, 0x30, 0x30],
|
|
display, 8);
|
|
testDecodeRect(decoder, 2, 0, 2, 2,
|
|
[0x0c, 0x0c, 0x0c, 0x0c],
|
|
display, 8);
|
|
testDecodeRect(decoder, 0, 2, 4, 1,
|
|
[0x0c, 0x0c, 0x30, 0x30],
|
|
display, 8);
|
|
testDecodeRect(decoder, 0, 3, 4, 1,
|
|
[0x0c, 0x0c, 0x30, 0x30],
|
|
display, 8);
|
|
|
|
let targetData = new Uint8Array([
|
|
0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
|
|
0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
|
|
0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255,
|
|
0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255
|
|
]);
|
|
|
|
expect(display).to.have.displayed(targetData);
|
|
});
|
|
|
|
it('should handle empty rects', function () {
|
|
display.fillRect(0, 0, 4, 4, [ 0x00, 0x00, 0xff ]);
|
|
display.fillRect(2, 0, 2, 2, [ 0x00, 0xff, 0x00 ]);
|
|
display.fillRect(0, 2, 2, 2, [ 0x00, 0xff, 0x00 ]);
|
|
|
|
testDecodeRect(decoder, 1, 2, 0, 0, [], display, 24);
|
|
|
|
let targetData = new Uint8Array([
|
|
0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
|
|
0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
|
|
0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255,
|
|
0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255
|
|
]);
|
|
|
|
expect(display).to.have.displayed(targetData);
|
|
});
|
|
|
|
it('should handle empty rects in low colour mode', function () {
|
|
display.fillRect(0, 0, 4, 4, [ 0x00, 0x00, 0xff ]);
|
|
display.fillRect(2, 0, 2, 2, [ 0x00, 0xff, 0x00 ]);
|
|
display.fillRect(0, 2, 2, 2, [ 0x00, 0xff, 0x00 ]);
|
|
|
|
testDecodeRect(decoder, 1, 2, 0, 0, [], display, 8);
|
|
|
|
let targetData = new Uint8Array([
|
|
0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
|
|
0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255, 0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255,
|
|
0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255,
|
|
0x00, 0xff, 0x00, 255, 0x00, 0xff, 0x00, 255, 0x00, 0x00, 0xff, 255, 0x00, 0x00, 0xff, 255
|
|
]);
|
|
|
|
expect(display).to.have.displayed(targetData);
|
|
});
|
|
});
|