summaryrefslogtreecommitdiff
path: root/js/src/jsapi-tests/testExtendedEq.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jsapi-tests/testExtendedEq.cpp')
-rw-r--r--js/src/jsapi-tests/testExtendedEq.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/js/src/jsapi-tests/testExtendedEq.cpp b/js/src/jsapi-tests/testExtendedEq.cpp
new file mode 100644
index 0000000..e47664e
--- /dev/null
+++ b/js/src/jsapi-tests/testExtendedEq.cpp
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sw=4 et tw=99:
+ *
+ * This tests user-specified (via JSExtendedClass) equality operations on
+ * trace.
+ */
+
+#include "tests.h"
+#include "jsobj.h"
+
+static JSBool
+my_Equality(JSContext *cx, JSObject *obj, const jsval *, JSBool *bp)
+{
+ *bp = JS_TRUE;
+ return JS_TRUE;
+}
+
+js::Class TestExtendedEq_JSClass = {
+ "TestExtendedEq",
+ 0,
+ js::PropertyStub, /* addProperty */
+ js::PropertyStub, /* delProperty */
+ js::PropertyStub, /* getProperty */
+ js::StrictPropertyStub, /* setProperty */
+ JS_EnumerateStub,
+ JS_ResolveStub,
+ NULL, /* convert */
+ NULL, /* finalize */
+ NULL, /* reserved0 */
+ NULL, /* checkAccess */
+ NULL, /* call */
+ NULL, /* construct */
+ NULL, /* xdrObject */
+ NULL, /* hasInstance */
+ NULL, /* mark */
+ {
+ js::Valueify(my_Equality),
+ NULL, /* outerObject */
+ NULL, /* innerObject */
+ NULL, /* iteratorObject */
+ NULL, /* wrappedObject */
+ }
+};
+
+BEGIN_TEST(testExtendedEq_bug530489)
+{
+ JSClass *clasp = (JSClass *) &TestExtendedEq_JSClass;
+
+ CHECK(JS_InitClass(cx, global, global, clasp, NULL, 0, NULL, NULL, NULL, NULL));
+
+ CHECK(JS_DefineObject(cx, global, "obj1", clasp, NULL, 0));
+ CHECK(JS_DefineObject(cx, global, "obj2", clasp, NULL, 0));
+
+ jsval v;
+ EVAL("(function() { var r; for (var i = 0; i < 10; ++i) r = obj1 == obj2; return r; })()", &v);
+ CHECK_SAME(v, JSVAL_TRUE);
+ return true;
+}
+END_TEST(testExtendedEq_bug530489)