1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jsapi-tests/testObjectEmulatingUndefined.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,110 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#include "jsapi-tests/tests.h" 1.9 + 1.10 +static const JSClass ObjectEmulatingUndefinedClass = { 1.11 + "ObjectEmulatingUndefined", 1.12 + JSCLASS_EMULATES_UNDEFINED, 1.13 + JS_PropertyStub, 1.14 + JS_DeletePropertyStub, 1.15 + JS_PropertyStub, 1.16 + JS_StrictPropertyStub, 1.17 + JS_EnumerateStub, 1.18 + JS_ResolveStub, 1.19 + JS_ConvertStub 1.20 +}; 1.21 + 1.22 +static bool 1.23 +ObjectEmulatingUndefinedConstructor(JSContext *cx, unsigned argc, jsval *vp) 1.24 +{ 1.25 + JS::CallArgs args = JS::CallArgsFromVp(argc, vp); 1.26 + JSObject *obj = JS_NewObjectForConstructor(cx, &ObjectEmulatingUndefinedClass, args); 1.27 + if (!obj) 1.28 + return false; 1.29 + args.rval().setObject(*obj); 1.30 + return true; 1.31 +} 1.32 + 1.33 +BEGIN_TEST(testObjectEmulatingUndefined_truthy) 1.34 +{ 1.35 + CHECK(JS_InitClass(cx, global, js::NullPtr(), &ObjectEmulatingUndefinedClass, 1.36 + ObjectEmulatingUndefinedConstructor, 0, 1.37 + nullptr, nullptr, nullptr, nullptr)); 1.38 + 1.39 + JS::RootedValue result(cx); 1.40 + 1.41 + EVAL("if (new ObjectEmulatingUndefined()) true; else false;", &result); 1.42 + CHECK_SAME(result, JSVAL_FALSE); 1.43 + 1.44 + EVAL("if (!new ObjectEmulatingUndefined()) true; else false;", &result); 1.45 + CHECK_SAME(result, JSVAL_TRUE); 1.46 + 1.47 + EVAL("var obj = new ObjectEmulatingUndefined(); \n" 1.48 + "var res = []; \n" 1.49 + "for (var i = 0; i < 50; i++) \n" 1.50 + " res.push(Boolean(obj)); \n" 1.51 + "res.every(function(v) { return v === false; });", 1.52 + &result); 1.53 + CHECK_SAME(result, JSVAL_TRUE); 1.54 + 1.55 + return true; 1.56 +} 1.57 +END_TEST(testObjectEmulatingUndefined_truthy) 1.58 + 1.59 +BEGIN_TEST(testObjectEmulatingUndefined_equal) 1.60 +{ 1.61 + CHECK(JS_InitClass(cx, global, js::NullPtr(), &ObjectEmulatingUndefinedClass, 1.62 + ObjectEmulatingUndefinedConstructor, 0, 1.63 + nullptr, nullptr, nullptr, nullptr)); 1.64 + 1.65 + JS::RootedValue result(cx); 1.66 + 1.67 + EVAL("if (new ObjectEmulatingUndefined() == undefined) true; else false;", &result); 1.68 + CHECK_SAME(result, JSVAL_TRUE); 1.69 + 1.70 + EVAL("if (new ObjectEmulatingUndefined() == null) true; else false;", &result); 1.71 + CHECK_SAME(result, JSVAL_TRUE); 1.72 + 1.73 + EVAL("if (new ObjectEmulatingUndefined() != undefined) true; else false;", &result); 1.74 + CHECK_SAME(result, JSVAL_FALSE); 1.75 + 1.76 + EVAL("if (new ObjectEmulatingUndefined() != null) true; else false;", &result); 1.77 + CHECK_SAME(result, JSVAL_FALSE); 1.78 + 1.79 + EVAL("var obj = new ObjectEmulatingUndefined(); \n" 1.80 + "var res = []; \n" 1.81 + "for (var i = 0; i < 50; i++) \n" 1.82 + " res.push(obj == undefined); \n" 1.83 + "res.every(function(v) { return v === true; });", 1.84 + &result); 1.85 + CHECK_SAME(result, JSVAL_TRUE); 1.86 + 1.87 + EVAL("var obj = new ObjectEmulatingUndefined(); \n" 1.88 + "var res = []; \n" 1.89 + "for (var i = 0; i < 50; i++) \n" 1.90 + " res.push(obj == null); \n" 1.91 + "res.every(function(v) { return v === true; });", 1.92 + &result); 1.93 + CHECK_SAME(result, JSVAL_TRUE); 1.94 + 1.95 + EVAL("var obj = new ObjectEmulatingUndefined(); \n" 1.96 + "var res = []; \n" 1.97 + "for (var i = 0; i < 50; i++) \n" 1.98 + " res.push(obj != undefined); \n" 1.99 + "res.every(function(v) { return v === false; });", 1.100 + &result); 1.101 + CHECK_SAME(result, JSVAL_TRUE); 1.102 + 1.103 + EVAL("var obj = new ObjectEmulatingUndefined(); \n" 1.104 + "var res = []; \n" 1.105 + "for (var i = 0; i < 50; i++) \n" 1.106 + " res.push(obj != null); \n" 1.107 + "res.every(function(v) { return v === false; });", 1.108 + &result); 1.109 + CHECK_SAME(result, JSVAL_TRUE); 1.110 + 1.111 + return true; 1.112 +} 1.113 +END_TEST(testObjectEmulatingUndefined_equal)