Blame view

node_modules/buffer/test/node/test-buffer-arraybuffer.js 2.69 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
  '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;
    });
  }