summaryrefslogtreecommitdiffstats
path: root/js/src/jsapi-tests/testSetProperty.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/jsapi-tests/testSetProperty.cpp
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jsapi-tests/testSetProperty.cpp')
-rw-r--r--js/src/jsapi-tests/testSetProperty.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/js/src/jsapi-tests/testSetProperty.cpp b/js/src/jsapi-tests/testSetProperty.cpp
new file mode 100644
index 0000000000..dfc176778a
--- /dev/null
+++ b/js/src/jsapi-tests/testSetProperty.cpp
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * vim: set ts=8 sts=2 et sw=2 tw=80:
+ */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "js/Object.h" // JS::GetClass
+#include "js/PropertyAndElement.h" // JS_DefineProperty
+#include "jsapi-tests/tests.h"
+
+BEGIN_TEST(testSetProperty_InheritedGlobalSetter) {
+ // This is a JSAPI test because jsapi-test globals can be set up to not have
+ // a resolve hook and therefore can use the property cache in some cases
+ // where the shell can't.
+ MOZ_RELEASE_ASSERT(!JS::GetClass(global)->getResolve());
+
+ CHECK(JS::InitRealmStandardClasses(cx));
+
+ CHECK(JS_DefineProperty(cx, global, "HOTLOOP", 8, 0));
+ EXEC(
+ "var n = 0;\n"
+ "var global = this;\n"
+ "function f() { n++; }\n"
+ "Object.defineProperty(Object.prototype, 'x', {set: f});\n"
+ "for (var i = 0; i < HOTLOOP; i++)\n"
+ " global.x = i;\n");
+ EXEC(
+ "if (n != HOTLOOP)\n"
+ " throw 'FAIL';\n");
+ return true;
+}
+
+const JSClass* getGlobalClass(void) override {
+ static const JSClassOps noResolveGlobalClassOps = {
+ nullptr, // addProperty
+ nullptr, // delProperty
+ nullptr, // enumerate
+ nullptr, // newEnumerate
+ nullptr, // resolve
+ nullptr, // mayResolve
+ nullptr, // finalize
+ nullptr, // call
+ nullptr, // construct
+ JS_GlobalObjectTraceHook, // trace
+ };
+
+ static const JSClass noResolveGlobalClass = {
+ "testSetProperty_InheritedGlobalSetter_noResolveGlobalClass",
+ JSCLASS_GLOBAL_FLAGS, &noResolveGlobalClassOps};
+
+ return &noResolveGlobalClass;
+}
+END_TEST(testSetProperty_InheritedGlobalSetter)