You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							112 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							112 lines
						
					
					
						
							2.7 KiB
						
					
					
				'use strict'; | 
						|
var Buffer = require('../../').Buffer; | 
						|
 | 
						|
 | 
						|
 | 
						|
var assert = require('assert'); | 
						|
 | 
						|
var Buffer = require('../../').Buffer; | 
						|
var LENGTH = 16; | 
						|
 | 
						|
var ab = new ArrayBuffer(LENGTH); | 
						|
var dv = new DataView(ab); | 
						|
var ui = new Uint8Array(ab); | 
						|
var buf = Buffer.from(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 (var 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() { } | 
						|
  Object.setPrototypeOf(AB, ArrayBuffer); | 
						|
  Object.setPrototypeOf(AB.prototype, ArrayBuffer.prototype); | 
						|
  Buffer.from(new AB()); | 
						|
}, TypeError); | 
						|
 | 
						|
// write{Double,Float}{LE,BE} with noAssert should not crash, cf. #3766 | 
						|
var b = Buffer.allocUnsafe(1); | 
						|
b.writeFloatLE(11.11, 0, true); | 
						|
b.writeFloatBE(11.11, 0, true); | 
						|
b.writeDoubleLE(11.11, 0, true); | 
						|
b.writeDoubleBE(11.11, 0, true); | 
						|
 | 
						|
// Test the byteOffset and length arguments | 
						|
{ | 
						|
  var ab = new Uint8Array(5); | 
						|
  ab[0] = 1; | 
						|
  ab[1] = 2; | 
						|
  ab[2] = 3; | 
						|
  ab[3] = 4; | 
						|
  ab[4] = 5; | 
						|
  var buf = Buffer.from(ab.buffer, 1, 3); | 
						|
  assert.equal(buf.length, 3); | 
						|
  assert.equal(buf[0], 2); | 
						|
  assert.equal(buf[1], 3); | 
						|
  assert.equal(buf[2], 4); | 
						|
  buf[0] = 9; | 
						|
  assert.equal(ab[1], 9); | 
						|
 | 
						|
  assert.throws(() => Buffer.from(ab.buffer, 6), (err) => { | 
						|
    assert(err instanceof RangeError); | 
						|
    assert(/'offset' is out of bounds/.test(err.message)); | 
						|
    return true; | 
						|
  }); | 
						|
  assert.throws(() => Buffer.from(ab.buffer, 3, 6), (err) => { | 
						|
    assert(err instanceof RangeError); | 
						|
    assert(/'length' is out of bounds/.test(err.message)); | 
						|
    return true; | 
						|
  }); | 
						|
} | 
						|
 | 
						|
// Test the deprecated Buffer() version also | 
						|
{ | 
						|
  var ab = new Uint8Array(5); | 
						|
  ab[0] = 1; | 
						|
  ab[1] = 2; | 
						|
  ab[2] = 3; | 
						|
  ab[3] = 4; | 
						|
  ab[4] = 5; | 
						|
  var buf = Buffer(ab.buffer, 1, 3); | 
						|
  assert.equal(buf.length, 3); | 
						|
  assert.equal(buf[0], 2); | 
						|
  assert.equal(buf[1], 3); | 
						|
  assert.equal(buf[2], 4); | 
						|
  buf[0] = 9; | 
						|
  assert.equal(ab[1], 9); | 
						|
 | 
						|
  assert.throws(() => Buffer(ab.buffer, 6), (err) => { | 
						|
    assert(err instanceof RangeError); | 
						|
    assert(/'offset' is out of bounds/.test(err.message)); | 
						|
    return true; | 
						|
  }); | 
						|
  assert.throws(() => Buffer(ab.buffer, 3, 6), (err) => { | 
						|
    assert(err instanceof RangeError); | 
						|
    assert(/'length' is out of bounds/.test(err.message)); | 
						|
    return true; | 
						|
  }); | 
						|
} | 
						|
 | 
						|
 |