Support automatic resize [Part 4/4]: unit tests
* Added new tests for the setDesktopSize encoding * Added new tests for the ExtendedDesktopSize encoding
This commit is contained in:
parent
f8b399d7df
commit
4dec490aae
|
@ -195,6 +195,48 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("#setDesktopSize", function () {
|
||||||
|
beforeEach(function() {
|
||||||
|
client._sock = new Websock();
|
||||||
|
client._sock.open('ws://', 'binary');
|
||||||
|
client._sock._websocket._open();
|
||||||
|
sinon.spy(client._sock, 'send');
|
||||||
|
client._rfb_state = "normal";
|
||||||
|
client._view_only = false;
|
||||||
|
client._supportsSetDesktopSize = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should send the request with the given width and height', function () {
|
||||||
|
var expected = [251];
|
||||||
|
expected.push8(0); // padding
|
||||||
|
expected.push16(1); // width
|
||||||
|
expected.push16(2); // height
|
||||||
|
expected.push8(1); // number-of-screens
|
||||||
|
expected.push8(0); // padding before screen array
|
||||||
|
expected.push32(0); // id
|
||||||
|
expected.push16(0); // x-position
|
||||||
|
expected.push16(0); // y-position
|
||||||
|
expected.push16(1); // width
|
||||||
|
expected.push16(2); // height
|
||||||
|
expected.push32(0); // flags
|
||||||
|
|
||||||
|
client.setDesktopSize(1, 2);
|
||||||
|
expect(client._sock).to.have.sent(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not send the request if the client has not recieved a ExtendedDesktopSize rectangle', function () {
|
||||||
|
client._supportsSetDesktopSize = false;
|
||||||
|
client.setDesktopSize(1,2);
|
||||||
|
expect(client._sock.send).to.not.have.been.called;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not send the request if we are not in a normal state', function () {
|
||||||
|
client._rfb_state = "broken";
|
||||||
|
client.setDesktopSize(1,2);
|
||||||
|
expect(client._sock.send).to.not.have.been.called;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("XVP operations", function () {
|
describe("XVP operations", function () {
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
client._sock = new Websock();
|
client._sock = new Websock();
|
||||||
|
@ -1443,6 +1485,122 @@ describe('Remote Frame Buffer Protocol Client', function() {
|
||||||
expect(client._display.resize).to.have.been.calledWith(20, 50);
|
expect(client._display.resize).to.have.been.calledWith(20, 50);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('the ExtendedDesktopSize pseudo-encoding handler', function () {
|
||||||
|
var client;
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
client = make_rfb();
|
||||||
|
client.connect('host', 8675);
|
||||||
|
client._sock._websocket._open();
|
||||||
|
client._rfb_state = 'normal';
|
||||||
|
client._fb_name = 'some device';
|
||||||
|
client._supportsSetDesktopSize = false;
|
||||||
|
// a really small frame
|
||||||
|
client._fb_width = 4;
|
||||||
|
client._fb_height = 4;
|
||||||
|
client._display._fb_width = 4;
|
||||||
|
client._display._fb_height = 4;
|
||||||
|
client._display._viewportLoc.w = 4;
|
||||||
|
client._display._viewportLoc.h = 4;
|
||||||
|
client._fb_Bpp = 4;
|
||||||
|
sinon.spy(client._display, 'resize');
|
||||||
|
client.set_onFBResize(sinon.spy());
|
||||||
|
});
|
||||||
|
|
||||||
|
function make_screen_data (nr_of_screens) {
|
||||||
|
var data = [];
|
||||||
|
data.push8(nr_of_screens); // number-of-screens
|
||||||
|
data.push8(0); // padding
|
||||||
|
data.push16(0); // padding
|
||||||
|
for (var i=0; i<nr_of_screens; i += 1) {
|
||||||
|
data.push32(0); // id
|
||||||
|
data.push16(0); // x-position
|
||||||
|
data.push16(0); // y-position
|
||||||
|
data.push16(20); // width
|
||||||
|
data.push16(50); // height
|
||||||
|
data.push32(0); // flags
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
it('should handle a resize requested by this client', function () {
|
||||||
|
var reason_for_change = 1; // requested by this client
|
||||||
|
var status_code = 0; // No error
|
||||||
|
|
||||||
|
send_fbu_msg([{ x: reason_for_change, y: status_code,
|
||||||
|
width: 20, height: 50, encoding: -308 }],
|
||||||
|
make_screen_data(1), client);
|
||||||
|
|
||||||
|
expect(client._supportsSetDesktopSize).to.be.true;
|
||||||
|
expect(client._fb_width).to.equal(20);
|
||||||
|
expect(client._fb_height).to.equal(50);
|
||||||
|
|
||||||
|
expect(client._display.resize).to.have.been.calledOnce;
|
||||||
|
expect(client._display.resize).to.have.been.calledWith(20, 50);
|
||||||
|
|
||||||
|
var spy = client.get_onFBResize();
|
||||||
|
expect(spy).to.have.been.calledOnce;
|
||||||
|
expect(spy).to.have.been.calledWith(sinon.match.any, 20, 50);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle a resize requested by another client', function () {
|
||||||
|
var reason_for_change = 2; // requested by another client
|
||||||
|
var status_code = 0; // No error
|
||||||
|
|
||||||
|
send_fbu_msg([{ x: reason_for_change, y: status_code,
|
||||||
|
width: 20, height: 50, encoding: -308 }],
|
||||||
|
make_screen_data(1), client);
|
||||||
|
|
||||||
|
expect(client._supportsSetDesktopSize).to.be.true;
|
||||||
|
expect(client._fb_width).to.equal(20);
|
||||||
|
expect(client._fb_height).to.equal(50);
|
||||||
|
|
||||||
|
expect(client._display.resize).to.have.been.calledOnce;
|
||||||
|
expect(client._display.resize).to.have.been.calledWith(20, 50);
|
||||||
|
|
||||||
|
var spy = client.get_onFBResize();
|
||||||
|
expect(spy).to.have.been.calledOnce;
|
||||||
|
expect(spy).to.have.been.calledWith(sinon.match.any, 20, 50);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be able to recieve requests which contain data for multiple screens', function () {
|
||||||
|
var reason_for_change = 2; // requested by another client
|
||||||
|
var status_code = 0; // No error
|
||||||
|
|
||||||
|
send_fbu_msg([{ x: reason_for_change, y: status_code,
|
||||||
|
width: 60, height: 50, encoding: -308 }],
|
||||||
|
make_screen_data(3), client);
|
||||||
|
|
||||||
|
expect(client._supportsSetDesktopSize).to.be.true;
|
||||||
|
expect(client._fb_width).to.equal(60);
|
||||||
|
expect(client._fb_height).to.equal(50);
|
||||||
|
|
||||||
|
expect(client._display.resize).to.have.been.calledOnce;
|
||||||
|
expect(client._display.resize).to.have.been.calledWith(60, 50);
|
||||||
|
|
||||||
|
var spy = client.get_onFBResize();
|
||||||
|
expect(spy).to.have.been.calledOnce;
|
||||||
|
expect(spy).to.have.been.calledWith(sinon.match.any, 60, 50);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not handle a failed request', function () {
|
||||||
|
var reason_for_change = 0; // non-incremental
|
||||||
|
var status_code = 1; // Resize is administratively prohibited
|
||||||
|
|
||||||
|
send_fbu_msg([{ x: reason_for_change, y: status_code,
|
||||||
|
width: 20, height: 50, encoding: -308 }],
|
||||||
|
make_screen_data(1), client);
|
||||||
|
|
||||||
|
expect(client._fb_width).to.equal(4);
|
||||||
|
expect(client._fb_height).to.equal(4);
|
||||||
|
|
||||||
|
expect(client._display.resize).to.not.have.been.called;
|
||||||
|
|
||||||
|
var spy = client.get_onFBResize();
|
||||||
|
expect(spy).to.not.have.been.called;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it.skip('should handle the Cursor pseudo-encoding', function () {
|
it.skip('should handle the Cursor pseudo-encoding', function () {
|
||||||
// TODO(directxman12): test
|
// TODO(directxman12): test
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue