summaryrefslogtreecommitdiffstats
path: root/js/src/jsapi-tests/testSetProperty.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /js/src/jsapi-tests/testSetProperty.cpp
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'js/src/jsapi-tests/testSetProperty.cpp')
-rw-r--r--js/src/jsapi-tests/testSetProperty.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/js/src/jsapi-tests/testSetProperty.cpp b/js/src/jsapi-tests/testSetProperty.cpp
new file mode 100644
index 000000000..e4ba0174e
--- /dev/null
+++ b/js/src/jsapi-tests/testSetProperty.cpp
@@ -0,0 +1,84 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sts=4 et sw=4 tw=99:
+ */
+/* 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 "jsapi-tests/tests.h"
+
+BEGIN_TEST(testSetProperty_NativeGetterStubSetter)
+{
+ JS::RootedObject obj(cx, JS_NewPlainObject(cx));
+ CHECK(obj);
+
+ CHECK(JS_DefineProperty(cx, global, "globalProp", obj, JSPROP_ENUMERATE,
+ JS_STUBGETTER, JS_STUBSETTER));
+
+ CHECK(JS_DefineProperty(cx, obj, "prop", JS::UndefinedHandleValue,
+ JSPROP_SHARED | JSPROP_PROPOP_ACCESSORS,
+ JS_PROPERTYOP_GETTER(NativeGet), JS_STUBSETTER));
+
+ EXEC("'use strict'; \n"
+ "var error, passed = false; \n"
+ "try \n"
+ "{ \n"
+ " this.globalProp.prop = 42; \n"
+ " throw new Error('setting property succeeded!'); \n"
+ "} \n"
+ "catch (e) \n"
+ "{ \n"
+ " error = e; \n"
+ " if (e instanceof TypeError) \n"
+ " passed = true; \n"
+ "} \n"
+ " \n"
+ "if (!passed) \n"
+ " throw error; \n");
+
+ EXEC("var error, passed = false; \n"
+ "try \n"
+ "{ \n"
+ " this.globalProp.prop = 42; \n"
+ " if (this.globalProp.prop === 17) \n"
+ " passed = true; \n"
+ " else \n"
+ " throw new Error('bad value after set!'); \n"
+ "} \n"
+ "catch (e) \n"
+ "{ \n"
+ " error = e; \n"
+ "} \n"
+ " \n"
+ "if (!passed) \n"
+ " throw error; \n");
+
+ return true;
+}
+static bool
+NativeGet(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::MutableHandleValue vp)
+{
+ vp.setInt32(17);
+ return true;
+}
+END_TEST(testSetProperty_NativeGetterStubSetter)
+
+BEGIN_TEST(testSetProperty_InheritedGlobalSetter)
+{
+ // This is a JSAPI test because jsapi-test globals do 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_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;
+}
+END_TEST(testSetProperty_InheritedGlobalSetter)