diff options
author | Solly Ross <sross@redhat.com> | 2016-09-03 13:49:55 -0400 |
---|---|---|
committer | Solly Ross <sross@redhat.com> | 2016-09-16 15:49:52 -0400 |
commit | 3949a095342153865682d716a7289c5de3e611c2 (patch) | |
tree | 6bb523576ff6a41773293e68fe465bf1ff074b53 | |
parent | 72bdd06ea2d3a2b7f102ac6e068a205433e52a38 (diff) | |
download | novnc-3949a095342153865682d716a7289c5de3e611c2.tar.gz |
Don't modify Array prototype
This commit removes our modification of the Array prototype.
It wasn't actually used much in the main code, anyway, and it's a
bad practice to modify built-in prototypes.
-rw-r--r-- | core/util.js | 23 | ||||
-rw-r--r-- | tests/test.rfb.js | 153 | ||||
-rw-r--r-- | tests/test.util.js | 44 |
3 files changed, 86 insertions, 134 deletions
diff --git a/core/util.js b/core/util.js index 3a2d241..cbc74dc 100644 --- a/core/util.js +++ b/core/util.js @@ -12,35 +12,12 @@ var Util = {}; -/* - * Make arrays quack - */ - var addFunc = function (cl, name, func) { if (!cl.prototype[name]) { Object.defineProperty(cl.prototype, name, { enumerable: false, value: func }); } }; -addFunc(Array, 'push8', function (num) { - "use strict"; - this.push(num & 0xFF); -}); - -addFunc(Array, 'push16', function (num) { - "use strict"; - this.push((num >> 8) & 0xFF, - num & 0xFF); -}); - -addFunc(Array, 'push32', function (num) { - "use strict"; - this.push((num >> 24) & 0xFF, - (num >> 16) & 0xFF, - (num >> 8) & 0xFF, - num & 0xFF); -}); - // PhantomJS 1.x doesn't support bind, // so leave this in until PhantomJS 2.0 is released //This prototype is provided by the Mozilla foundation and diff --git a/tests/test.rfb.js b/tests/test.rfb.js index 06eeebe..86d6378 100644 --- a/tests/test.rfb.js +++ b/tests/test.rfb.js @@ -13,6 +13,25 @@ function make_rfb (extra_opts) { return new RFB(extra_opts); } +var push8 = function (arr, num) { + "use strict"; + arr.push(num & 0xFF); +}; + +var push16 = function (arr, num) { + "use strict"; + arr.push((num >> 8) & 0xFF, + num & 0xFF); +}; + +var push32 = function (arr, num) { + "use strict"; + arr.push((num >> 24) & 0xFF, + (num >> 16) & 0xFF, + (num >> 8) & 0xFF, + num & 0xFF); +}; + describe('Remote Frame Buffer Protocol Client', function() { "use strict"; before(FakeWebSocket.replace); @@ -232,17 +251,17 @@ describe('Remote Frame Buffer Protocol Client', function() { 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 + push8(expected, 0); // padding + push16(expected, 1); // width + push16(expected, 2); // height + push8(expected, 1); // number-of-screens + push8(expected, 0); // padding before screen array + push32(expected, 0); // id + push16(expected, 0); // x-position + push16(expected, 0); // y-position + push16(expected, 1); // width + push16(expected, 2); // height + push32(expected, 0); // flags client.requestDesktopSize(1, 2); expect(client._sock).to.have.sent(new Uint8Array(expected)); @@ -662,7 +681,7 @@ describe('Remote Frame Buffer Protocol Client', function() { var err_msg = "Whoopsies"; var data = [0, 0, 0, 0]; var err_len = err_msg.length; - data.push32(err_len); + push32(data, err_len); for (var i = 0; i < err_len; i++) { data.push(err_msg.charCodeAt(i)); } @@ -796,10 +815,10 @@ describe('Remote Frame Buffer Protocol Client', function() { function send_num_str_pairs(pairs, client) { var pairs_len = pairs.length; var data = []; - data.push32(pairs_len); + push32(data, pairs_len); for (var i = 0; i < pairs_len; i++) { - data.push32(pairs[i][0]); + push32(data, pairs[i][0]); var j; for (j = 0; j < 4; j++) { data.push(pairs[i][1].charCodeAt(j)); @@ -948,30 +967,30 @@ describe('Remote Frame Buffer Protocol Client', function() { } var data = []; - data.push16(full_opts.width); - data.push16(full_opts.height); + push16(data, full_opts.width); + push16(data, full_opts.height); data.push(full_opts.bpp); data.push(full_opts.depth); data.push(full_opts.big_endian); data.push(full_opts.true_color); - data.push16(full_opts.red_max); - data.push16(full_opts.green_max); - data.push16(full_opts.blue_max); - data.push8(full_opts.red_shift); - data.push8(full_opts.green_shift); - data.push8(full_opts.blue_shift); + push16(data, full_opts.red_max); + push16(data, full_opts.green_max); + push16(data, full_opts.blue_max); + push8(data, full_opts.red_shift); + push8(data, full_opts.green_shift); + push8(data, full_opts.blue_shift); // padding - data.push8(0); - data.push8(0); - data.push8(0); + push8(data, 0); + push8(data, 0); + push8(data, 0); client._sock._websocket._receive_data(new Uint8Array(data)); var name_data = []; - name_data.push32(full_opts.name.length); + push32(name_data, full_opts.name.length); for (var i = 0; i < full_opts.name.length; i++) { name_data.push(full_opts.name.charCodeAt(i)); } @@ -1003,10 +1022,10 @@ describe('Remote Frame Buffer Protocol Client', function() { send_server_init({}, client); var tight_data = []; - tight_data.push16(1); - tight_data.push16(2); - tight_data.push16(3); - tight_data.push16(0); + push16(tight_data, 1); + push16(tight_data, 2); + push16(tight_data, 3); + push16(tight_data, 0); for (var i = 0; i < 16 + 32 + 48; i++) { tight_data.push(i); } @@ -1136,16 +1155,16 @@ describe('Remote Frame Buffer Protocol Client', function() { // header data.push(0); // msg type data.push(0); // padding - data.push16(rect_cnt || rect_data.length); + push16(data, rect_cnt || rect_data.length); } for (var i = 0; i < rect_data.length; i++) { if (rect_info[i]) { - data.push16(rect_info[i].x); - data.push16(rect_info[i].y); - data.push16(rect_info[i].width); - data.push16(rect_info[i].height); - data.push32(rect_info[i].encoding); + push16(data, rect_info[i].x); + push16(data, rect_info[i].y); + push16(data, rect_info[i].width); + push16(data, rect_info[i].height); + push32(data, rect_info[i].encoding); } data = data.concat(rect_data[i]); } @@ -1339,24 +1358,24 @@ describe('Remote Frame Buffer Protocol Client', function() { it('should handle the RRE encoding', function () { var info = [{ x: 0, y: 0, width: 4, height: 4, encoding: 0x02 }]; var rect = []; - rect.push32(2); // 2 subrects - rect.push32(0xff00ff); // becomes 00ff00ff --> #00FF00 bg color + push32(rect, 2); // 2 subrects + push32(rect, 0xff00ff); // becomes 00ff00ff --> #00FF00 bg color rect.push(0xff); // becomes ff0000ff --> #0000FF color rect.push(0x00); rect.push(0x00); rect.push(0xff); - rect.push16(0); // x: 0 - rect.push16(0); // y: 0 - rect.push16(2); // width: 2 - rect.push16(2); // height: 2 + push16(rect, 0); // x: 0 + push16(rect, 0); // y: 0 + push16(rect, 2); // width: 2 + push16(rect, 2); // height: 2 rect.push(0xff); // becomes ff0000ff --> #0000FF color rect.push(0x00); rect.push(0x00); rect.push(0xff); - rect.push16(2); // x: 2 - rect.push16(2); // y: 2 - rect.push16(2); // width: 2 - rect.push16(2); // height: 2 + push16(rect, 2); // x: 2 + push16(rect, 2); // y: 2 + push16(rect, 2); // width: 2 + push16(rect, 2); // height: 2 send_fbu_msg(info, [rect], client); expect(client._display).to.have.displayed(target_data_check); @@ -1384,7 +1403,7 @@ describe('Remote Frame Buffer Protocol Client', function() { var info = [{ x: 0, y: 0, width: 4, height: 4, encoding: 0x05 }]; var rect = []; rect.push(0x02 | 0x04 | 0x08); // bg spec, fg spec, anysubrects - rect.push32(0xff00ff); // becomes 00ff00ff --> #00FF00 bg color + push32(rect, 0xff00ff); // becomes 00ff00ff --> #00FF00 bg color rect.push(0xff); // becomes ff0000ff --> #0000FF fg color rect.push(0x00); rect.push(0x00); @@ -1416,11 +1435,11 @@ describe('Remote Frame Buffer Protocol Client', function() { var info = [{ x: 0, y: 0, width: 4, height: 4, encoding: 0x05 }]; var rect = []; rect.push(0x02); - rect.push32(0xff00ff); // becomes 00ff00ff --> #00FF00 bg color + push32(rect, 0xff00ff); // becomes 00ff00ff --> #00FF00 bg color send_fbu_msg(info, [rect], client); var expected = []; - for (var i = 0; i < 16; i++) { expected.push32(0xff00ff); } + for (var i = 0; i < 16; i++) { push32(expected, 0xff00ff); } expect(client._display).to.have.displayed(new Uint8Array(expected)); }); @@ -1436,7 +1455,7 @@ describe('Remote Frame Buffer Protocol Client', function() { // send a bg frame rect.push(0x02); - rect.push32(0xff00ff); // becomes 00ff00ff --> #00FF00 bg color + push32(rect, 0xff00ff); // becomes 00ff00ff --> #00FF00 bg color // send an empty frame rect.push(0x00); @@ -1445,8 +1464,8 @@ describe('Remote Frame Buffer Protocol Client', function() { var expected = []; var i; - for (i = 0; i < 16; i++) { expected.push32(0xff00ff); } // rect 1: solid - for (i = 0; i < 16; i++) { expected.push32(0xff00ff); } // rect 2: same bkground color + for (i = 0; i < 16; i++) { push32(expected, 0xff00ff); } // rect 1: solid + for (i = 0; i < 16; i++) { push32(expected, 0xff00ff); } // rect 2: same bkground color expect(client._display).to.have.displayed(new Uint8Array(expected)); }); @@ -1454,7 +1473,7 @@ describe('Remote Frame Buffer Protocol Client', function() { var info = [{ x: 0, y: 0, width: 4, height: 4, encoding: 0x05 }]; var rect = []; rect.push(0x02 | 0x08 | 0x10); // bg spec, anysubrects, colouredsubrects - rect.push32(0xff00ff); // becomes 00ff00ff --> #00FF00 bg color + push32(rect, 0xff00ff); // becomes 00ff00ff --> #00FF00 bg color rect.push(2); // 2 subrects rect.push(0xff); // becomes ff0000ff --> #0000FF fg color rect.push(0x00); @@ -1480,7 +1499,7 @@ describe('Remote Frame Buffer Protocol Client', function() { var info = [{ x: 0, y: 0, width: 4, height: 17, encoding: 0x05}]; var rect = []; rect.push(0x02 | 0x04 | 0x08); // bg spec, fg spec, anysubrects - rect.push32(0xff00ff); // becomes 00ff00ff --> #00FF00 bg color + push32(rect, 0xff00ff); // becomes 00ff00ff --> #00FF00 bg color rect.push(0xff); // becomes ff0000ff --> #0000FF fg color rect.push(0x00); rect.push(0x00); @@ -1561,16 +1580,16 @@ describe('Remote Frame Buffer Protocol Client', function() { 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 + push8(data, nr_of_screens); // number-of-screens + push8(data, 0); // padding + push16(data, 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 + push32(data, 0); // id + push16(data, 0); // x-position + push16(data, 0); // y-position + push16(data, 20); // width + push16(data, 50); // height + push32(data, 0); // flags } return data; } @@ -1672,9 +1691,9 @@ describe('Remote Frame Buffer Protocol Client', function() { var i; for (i = 0; i < 4; i++) { expected_cm[i + 1] = [i * 10, i * 10 + 1, i * 10 + 2]; - data.push16(expected_cm[i + 1][2] << 8); - data.push16(expected_cm[i + 1][1] << 8); - data.push16(expected_cm[i + 1][0] << 8); + push16(data, expected_cm[i + 1][2] << 8); + push16(data, expected_cm[i + 1][1] << 8); + push16(data, expected_cm[i + 1][0] << 8); } client._sock._websocket._receive_data(new Uint8Array(data)); @@ -1716,7 +1735,7 @@ describe('Remote Frame Buffer Protocol Client', function() { it('should fire the clipboard callback with the retrieved text on ServerCutText', function () { var expected_str = 'cheese!'; var data = [3, 0, 0, 0]; - data.push32(expected_str.length); + push32(data, expected_str.length); for (var i = 0; i < expected_str.length; i++) { data.push(expected_str.charCodeAt(i)); } client.set_onClipboard(sinon.spy()); diff --git a/tests/test.util.js b/tests/test.util.js index c84e36e..c4ac403 100644 --- a/tests/test.util.js +++ b/tests/test.util.js @@ -7,50 +7,6 @@ var expect = chai.expect; describe('Utils', function() { "use strict"; - describe('Array instance methods', function () { - describe('push8', function () { - it('should push a byte on to the array', function () { - var arr = [1]; - arr.push8(128); - expect(arr).to.deep.equal([1, 128]); - }); - - it('should only use the least significant byte of any number passed in', function () { - var arr = [1]; - arr.push8(0xABCD); - expect(arr).to.deep.equal([1, 0xCD]); - }); - }); - - describe('push16', function () { - it('should push two bytes on to the array', function () { - var arr = [1]; - arr.push16(0xABCD); - expect(arr).to.deep.equal([1, 0xAB, 0xCD]); - }); - - it('should only use the two least significant bytes of any number passed in', function () { - var arr = [1]; - arr.push16(0xABCDEF); - expect(arr).to.deep.equal([1, 0xCD, 0xEF]); - }); - }); - - describe('push32', function () { - it('should push four bytes on to the array', function () { - var arr = [1]; - arr.push32(0xABCDEF12); - expect(arr).to.deep.equal([1, 0xAB, 0xCD, 0xEF, 0x12]); - }); - - it('should only use the four least significant bytes of any number passed in', function () { - var arr = [1]; - arr.push32(0xABCDEF1234); - expect(arr).to.deep.equal([1, 0xCD, 0xEF, 0x12, 0x34]); - }); - }); - }); - describe('logging functions', function () { beforeEach(function () { sinon.spy(console, 'log'); |