'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', }); }