Skip to content

Commit

Permalink
test: make test-v8-serdes work without stdin
Browse files Browse the repository at this point in the history
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 ayojs/ayo#63

Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
addaleax authored and cjihrig committed Oct 25, 2017
1 parent 9f87d6a commit d66c927
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions test/parallel/test-v8-serdes.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down Expand Up @@ -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);
Expand All @@ -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);
}

{
Expand All @@ -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 .*\]$/);
}

Expand Down

1 comment on commit d66c927

@MylesBorins
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was missing the PR-URL 😢

Please sign in to comment.