js/src/jsapi-tests/testObjectEmulatingUndefined.cpp

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     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)

mercurial