Closes GH-843. Fix SlowBuffer.prototype.slice
authorRyan Dahl <ry@tinyclouds.org>
Tue, 29 Mar 2011 17:47:14 +0000 (10:47 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Tue, 29 Mar 2011 17:47:14 +0000 (10:47 -0700)
lib/buffer.js
test/simple/test-buffer.js

index 8fe4f8c9296e63674b4eaeffc7c8743c8c88ec5e..ba0ae2684fce68a2ac7970386cf7e4e370743203 100644 (file)
@@ -110,6 +110,8 @@ SlowBuffer.prototype.write = function(string, offset, encoding) {
 
 // slice(start, end)
 SlowBuffer.prototype.slice = function(start, end) {
+  if (end === undefined) end = this.length;
+
   if (end > this.length) {
     throw new Error('oob');
   }
index d55ac2f3d25b7d109be52eb69902da394328dc3f..ac822b2b60793d5816481bbbca1fb3e1dfac5833 100644 (file)
@@ -431,3 +431,63 @@ assert.equal(12, Buffer.byteLength('Il était tué', 'binary'));
 
 // slice(0,0).length === 0
 assert.equal(0, Buffer('hello').slice(0, 0).length);
+
+
+// Test slice on SlowBuffer GH-843
+var SlowBuffer = process.binding('buffer').SlowBuffer;
+
+function buildSlowBuffer (data) {
+  if (Array.isArray(data)) {
+    var buffer = new SlowBuffer(data.length);
+    data.forEach(function(v,k) {
+      buffer[k] = v;
+    });
+    return buffer;
+  };
+  return null;
+}
+
+var x = buildSlowBuffer([0x81,0xa3,0x66,0x6f,0x6f,0xa3,0x62,0x61,0x72]);
+
+console.log(x.inspect())
+assert.equal('<SlowBuffer 81 a3 66 6f 6f a3 62 61 72>', x.inspect());
+
+var z = x.slice(4);
+console.log(z.inspect())
+console.log(z.length)
+assert.equal(5, z.length);
+assert.equal(0x6f, z[0]);
+assert.equal(0xa3, z[1]);
+assert.equal(0x62, z[2]);
+assert.equal(0x61, z[3]);
+assert.equal(0x72, z[4]);
+
+var z = x.slice(0);
+console.log(z.inspect())
+console.log(z.length)
+assert.equal(z.length, x.length);
+
+var z = x.slice(0, 4);
+console.log(z.inspect())
+console.log(z.length)
+assert.equal(4, z.length);
+assert.equal(0x81, z[0]);
+assert.equal(0xa3, z[1]);
+
+var z = x.slice(0, 9);
+console.log(z.inspect())
+console.log(z.length)
+assert.equal(9, z.length);
+
+var z = x.slice(1, 4);
+console.log(z.inspect())
+console.log(z.length)
+assert.equal(3, z.length);
+assert.equal(0xa3, z[0]);
+
+var z = x.slice(2, 4);
+console.log(z.inspect())
+console.log(z.length)
+assert.equal(2, z.length);
+assert.equal(0x66, z[0]);
+assert.equal(0x6f, z[1]);