Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "jsapi-tests/tests.h"
7 static const JSClass ObjectEmulatingUndefinedClass = {
8 "ObjectEmulatingUndefined",
9 JSCLASS_EMULATES_UNDEFINED,
10 JS_PropertyStub,
11 JS_DeletePropertyStub,
12 JS_PropertyStub,
13 JS_StrictPropertyStub,
14 JS_EnumerateStub,
15 JS_ResolveStub,
16 JS_ConvertStub
17 };
19 static bool
20 ObjectEmulatingUndefinedConstructor(JSContext *cx, unsigned argc, jsval *vp)
21 {
22 JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
23 JSObject *obj = JS_NewObjectForConstructor(cx, &ObjectEmulatingUndefinedClass, args);
24 if (!obj)
25 return false;
26 args.rval().setObject(*obj);
27 return true;
28 }
30 BEGIN_TEST(testObjectEmulatingUndefined_truthy)
31 {
32 CHECK(JS_InitClass(cx, global, js::NullPtr(), &ObjectEmulatingUndefinedClass,
33 ObjectEmulatingUndefinedConstructor, 0,
34 nullptr, nullptr, nullptr, nullptr));
36 JS::RootedValue result(cx);
38 EVAL("if (new ObjectEmulatingUndefined()) true; else false;", &result);
39 CHECK_SAME(result, JSVAL_FALSE);
41 EVAL("if (!new ObjectEmulatingUndefined()) true; else false;", &result);
42 CHECK_SAME(result, JSVAL_TRUE);
44 EVAL("var obj = new ObjectEmulatingUndefined(); \n"
45 "var res = []; \n"
46 "for (var i = 0; i < 50; i++) \n"
47 " res.push(Boolean(obj)); \n"
48 "res.every(function(v) { return v === false; });",
49 &result);
50 CHECK_SAME(result, JSVAL_TRUE);
52 return true;
53 }
54 END_TEST(testObjectEmulatingUndefined_truthy)
56 BEGIN_TEST(testObjectEmulatingUndefined_equal)
57 {
58 CHECK(JS_InitClass(cx, global, js::NullPtr(), &ObjectEmulatingUndefinedClass,
59 ObjectEmulatingUndefinedConstructor, 0,
60 nullptr, nullptr, nullptr, nullptr));
62 JS::RootedValue result(cx);
64 EVAL("if (new ObjectEmulatingUndefined() == undefined) true; else false;", &result);
65 CHECK_SAME(result, JSVAL_TRUE);
67 EVAL("if (new ObjectEmulatingUndefined() == null) true; else false;", &result);
68 CHECK_SAME(result, JSVAL_TRUE);
70 EVAL("if (new ObjectEmulatingUndefined() != undefined) true; else false;", &result);
71 CHECK_SAME(result, JSVAL_FALSE);
73 EVAL("if (new ObjectEmulatingUndefined() != null) true; else false;", &result);
74 CHECK_SAME(result, JSVAL_FALSE);
76 EVAL("var obj = new ObjectEmulatingUndefined(); \n"
77 "var res = []; \n"
78 "for (var i = 0; i < 50; i++) \n"
79 " res.push(obj == undefined); \n"
80 "res.every(function(v) { return v === true; });",
81 &result);
82 CHECK_SAME(result, JSVAL_TRUE);
84 EVAL("var obj = new ObjectEmulatingUndefined(); \n"
85 "var res = []; \n"
86 "for (var i = 0; i < 50; i++) \n"
87 " res.push(obj == null); \n"
88 "res.every(function(v) { return v === true; });",
89 &result);
90 CHECK_SAME(result, JSVAL_TRUE);
92 EVAL("var obj = new ObjectEmulatingUndefined(); \n"
93 "var res = []; \n"
94 "for (var i = 0; i < 50; i++) \n"
95 " res.push(obj != undefined); \n"
96 "res.every(function(v) { return v === false; });",
97 &result);
98 CHECK_SAME(result, JSVAL_TRUE);
100 EVAL("var obj = new ObjectEmulatingUndefined(); \n"
101 "var res = []; \n"
102 "for (var i = 0; i < 50; i++) \n"
103 " res.push(obj != null); \n"
104 "res.every(function(v) { return v === false; });",
105 &result);
106 CHECK_SAME(result, JSVAL_TRUE);
108 return true;
109 }
110 END_TEST(testObjectEmulatingUndefined_equal)