aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js')
-rw-r--r--tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js b/tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js
new file mode 100644
index 00000000000..ad466188bae
--- /dev/null
+++ b/tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js
@@ -0,0 +1,42 @@
+"use strict";
+
+const namedPropertiesObject = Object.getPrototypeOf(Window.prototype);
+
+test(() => {
+ assert_own_property(namedPropertiesObject, Symbol.toStringTag);
+
+ const propDesc = Object.getOwnPropertyDescriptor(namedPropertiesObject, Symbol.toStringTag);
+ assert_equals(propDesc.value, "WindowProperties", "value");
+ assert_equals(propDesc.configurable, true, "configurable");
+ assert_equals(propDesc.enumerable, false, "enumerable");
+ assert_equals(propDesc.writable, false, "writable");
+}, "@@toStringTag exists with the appropriate descriptor");
+
+test(() => {
+ assert_equals(Object.prototype.toString.call(namedPropertiesObject), "[object WindowProperties]");
+}, "Object.prototype.toString");
+
+test(t => {
+ assert_own_property(namedPropertiesObject, Symbol.toStringTag, "Precondition for this test: @@toStringTag exists");
+
+ t.add_cleanup(() => {
+ Object.defineProperty(namedPropertiesObject, Symbol.toStringTag, { value: "WindowProperties" });
+ });
+
+ Object.defineProperty(namedPropertiesObject, Symbol.toStringTag, { value: "NotWindowProperties" });
+ assert_equals(Object.prototype.toString.call(namedPropertiesObject), "[object NotWindowProperties]");
+}, "Object.prototype.toString applied after modifying @@toStringTag");
+
+// Chrome had a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=793406) where if there
+// was no @@toStringTag, it would fall back to a magic class string. This tests that the bug is
+// fixed.
+
+// Note: we cannot null out the prototype of the named properties object per
+// https://heycam.github.io/webidl/#named-properties-object-setprototypeof so we don't have a test that does that.
+
+// This test must be last.
+test(() => {
+ delete namedPropertiesObject[Symbol.toStringTag];
+
+ assert_equals(Object.prototype.toString.call(namedPropertiesObject), "[object EventTarget]", "prototype");
+}, "Object.prototype.toString applied after deleting @@toStringTag");