From 3c0267dbb526e1067ba7ab7702663a429f8f3a10 Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Sun, 4 Jul 2021 16:08:53 +0200 Subject: [PATCH] fix: align DOMException to webidl spec (#11259) --- extensions/web/01_dom_exception.js | 17 +++++++++++++---- tools/wpt/expectation.json | 25 ++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/extensions/web/01_dom_exception.js b/extensions/web/01_dom_exception.js index 6c3c95f387..90ddb267b2 100644 --- a/extensions/web/01_dom_exception.js +++ b/extensions/web/01_dom_exception.js @@ -10,8 +10,12 @@ "use strict"; ((window) => { - const { ObjectDefineProperty, ObjectEntries } = - window.__bootstrap.primordials; + const { + Error, + ObjectDefineProperty, + ObjectEntries, + ObjectSetPrototypeOf, + } = window.__bootstrap.primordials; const webidl = window.__bootstrap.webidl; // Defined in WebIDL 4.3. @@ -72,13 +76,12 @@ // Defined in WebIDL 4.3. // https://heycam.github.io/webidl/#idl-DOMException - class DOMException extends Error { + class DOMException { #message = ""; #name = ""; #code = 0; constructor(message = "", name = "Error") { - super(); this.#message = webidl.converters.DOMString(message, { prefix: "Failed to construct 'DOMException'", context: "Argument 1", @@ -105,8 +108,14 @@ get [Symbol.toStringTag]() { return "DOMException"; } + + [Symbol.for("Deno.customInspect")]() { + return `DOMException: ${this.#message}`; + } } + ObjectSetPrototypeOf(DOMException.prototype, Error.prototype); + webidl.configurePrototype(DOMException); for ( diff --git a/tools/wpt/expectation.json b/tools/wpt/expectation.json index 847eb110cc..70876c164b 100644 --- a/tools/wpt/expectation.json +++ b/tools/wpt/expectation.json @@ -629,10 +629,29 @@ "DOMException-constructor-and-prototype.any.html": true, "DOMException-constructor-behavior.any.html": true, "DOMException-custom-bindings.any.html": [ - "does not inherit from Error: class-side" + "If the implementation has a stack property on normal errors, it also does on DOMExceptions" ] - } - } + }, + "class-string-interface.any.html": [ + "@@toStringTag exists on the prototype with the appropriate descriptor" + ], + "class-string-iterator-prototype-object.any.html": true, + "global-immutable-prototype.any.html": [ + "Setting to a different prototype" + ], + "global-object-implicit-this-value.any.html": [ + "Global object's getter throws when called on incompatible object", + "Global object's setter throws when called on incompatible object", + "Global object's operation throws when called on incompatible object", + "Global object's getter works when called on null / undefined", + "Global object's setter works when called on null / undefined" + ], + "legacy-factor-function-subclass.window.html": false, + "no-regexp-special-casing.any.html": [ + "Conversion to a sequence works" + ] + }, + "idlharness.any.html": true }, "url": { "historical.any.html": [