current commit
250611.11 · lib,src: support DOMException ser-des
'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',
  });
}