node/test/parallel/test-structuredClone-domexc...

49 lines
1.3 KiB
JavaScript

'use strict';
require('../common');
const assert = require('assert');
function assertDOMException(actual, expected) {
assert.strictEqual(actual instanceof DOMException, true);
assert.strictEqual(actual.message, expected.message);
assert.strictEqual(actual.name, expected.name);
assert.strictEqual(actual.code, expected.code);
assert.strictEqual(actual.stack, expected.stack);
}
{
// Clone basic DOMException
const e = new DOMException('test');
const clone = structuredClone(e);
const clone2 = structuredClone(clone);
assertDOMException(clone, e);
assertDOMException(clone2, e);
}
{
// Clone a DOMException with a name
const e = new DOMException('test', 'DataCloneError');
const clone = structuredClone(e);
const clone2 = structuredClone(clone);
assertDOMException(clone, e);
assertDOMException(clone2, e);
}
{
// Clone an arbitrary object with a DOMException prototype
const obj = {};
Object.setPrototypeOf(obj, DOMException.prototype);
const clone = structuredClone(obj);
assert.strictEqual(clone instanceof DOMException, false);
}
{
// Transfer a DOMException. DOMExceptions are not transferable.
const e = new DOMException('test');
assert.throws(() => {
structuredClone(e, { transfer: [e] });
}, {
name: 'DataCloneError',
});
}