test: make test-v8-serdes work without stdin

If `stdin` was closed or referred to a file, this didn't work,
because it was accessed via file descriptor.

Instead, use another generic native object.

cherry-picked from https://github.com/ayojs/ayo/pull/63

Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Anna Henningsen authored and Daniel Bevenius committed 2017-10-25 07:15:44 +02:00
1 parent 57a716febd
commit 70670b056a
1 file changed
+10 -8
+10 -8
View File
@@ -20,6 +20,8 @@ const objects = [
circular
];
const hostObject = new (process.binding('js_stream').JSStream)();
const serializerTypeError =
/^TypeError: Class constructor Serializer cannot be invoked without 'new'$/;
const deserializerTypeError =
@@ -63,8 +65,8 @@ const deserializerTypeError =
{
const ser = new v8.DefaultSerializer();
ser._writeHostObject = common.mustCall((object) => {
assert.strictEqual(object, process.stdin._handle);
const buf = Buffer.from('stdin');
assert.strictEqual(object, hostObject);
const buf = Buffer.from('hostObjectTag');
ser.writeUint32(buf.length);
ser.writeRawBytes(buf);
@@ -74,23 +76,23 @@ const deserializerTypeError =
});
ser.writeHeader();
ser.writeValue({ val: process.stdin._handle });
ser.writeValue({ val: hostObject });
const des = new v8.DefaultDeserializer(ser.releaseBuffer());
des._readHostObject = common.mustCall(() => {
const length = des.readUint32();
const buf = des.readRawBytes(length);
assert.strictEqual(buf.toString(), 'stdin');
assert.strictEqual(buf.toString(), 'hostObjectTag');
assert.deepStrictEqual(des.readUint64(), [1, 2]);
assert.strictEqual(des.readDouble(), -0.25);
return process.stdin._handle;
return hostObject;
});
des.readHeader();
assert.strictEqual(des.readValue().val, process.stdin._handle);
assert.strictEqual(des.readValue().val, hostObject);
}
{
@@ -101,12 +103,12 @@ const deserializerTypeError =
ser.writeHeader();
assert.throws(() => {
ser.writeValue({ val: process.stdin._handle });
ser.writeValue({ val: hostObject });
}, /foobar/);
}
{
assert.throws(() => v8.serialize(process.stdin._handle),
assert.throws(() => v8.serialize(hostObject),
/^Error: Unknown host object type: \[object .*\]$/);
}