From 4643b8b6671607a7aff60cbbd0b384dcf2f6959e Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Wed, 17 Jun 2015 10:43:13 -0600 Subject: buffer: allow ArrayBuffer as Buffer argument Buffer now uses the ArrayBuffer as the backing store if passed to the constructor. Fixes: https://github.com/nodejs/io.js/issues/106 PR-URL: https://github.com/nodejs/io.js/pull/2002 Reviewed-By: Domenic Denicola --- test/parallel/test-buffer-arraybuffer.js | 46 ++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 test/parallel/test-buffer-arraybuffer.js (limited to 'test/parallel/test-buffer-arraybuffer.js') diff --git a/test/parallel/test-buffer-arraybuffer.js b/test/parallel/test-buffer-arraybuffer.js new file mode 100644 index 0000000000..c13d0ba411 --- /dev/null +++ b/test/parallel/test-buffer-arraybuffer.js @@ -0,0 +1,46 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); + +const Buffer = require('buffer').Buffer; +const LENGTH = 16; + +const ab = new ArrayBuffer(LENGTH); +const dv = new DataView(ab); +const ui = new Uint8Array(ab); +const buf = new Buffer(ab); + + +assert.ok(buf instanceof Buffer); +// For backwards compatibility of old .parent property test that if buf is not +// a slice then .parent should be undefined. +assert.equal(buf.parent, undefined); +assert.equal(buf.buffer, ab); +assert.equal(buf.length, ab.byteLength); + + +buf.fill(0xC); +for (let i = 0; i < LENGTH; i++) { + assert.equal(ui[i], 0xC); + ui[i] = 0xF; + assert.equal(buf[i], 0xF); +} + +buf.writeUInt32LE(0xF00, 0); +buf.writeUInt32BE(0xB47, 4); +buf.writeDoubleLE(3.1415, 8); + +assert.equal(dv.getUint32(0, true), 0xF00); +assert.equal(dv.getUint32(4), 0xB47); +assert.equal(dv.getFloat64(8, true), 3.1415); + + +// Now test protecting users from doing stupid things + +assert.throws(function() { + function AB() { } + AB.__proto__ = ArrayBuffer; + AB.prototype.__proto__ = ArrayBuffer.prototype; + new Buffer(new AB()); +}, TypeError); -- cgit v1.2.1