Commit 4dec490a authored by samhed's avatar samhed

Support automatic resize [Part 4/4]: unit tests

* Added new tests for the setDesktopSize encoding
* Added new tests for the ExtendedDesktopSize encoding
parent f8b399d7
...@@ -195,6 +195,48 @@ describe('Remote Frame Buffer Protocol Client', function() { ...@@ -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() { ...@@ -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
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment