js/src/tests/ecma_5/Object/extensibility-01.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2  * Any copyright is dedicated to the Public Domain.
     3  * http://creativecommons.org/licenses/publicdomain/
     4  * Contributor:
     5  *   Jeff Walden <jwalden+code@mit.edu>
     6  */
     8 var gTestfile = '15.2.3.10-01.js';
     9 //-----------------------------------------------------------------------------
    10 var BUGNUMBER = 492849;
    11 var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible';
    13 print(BUGNUMBER + ": " + summary);
    15 /**************
    16  * BEGIN TEST *
    17  **************/
    19 function trySetProperty(o, p, v, strict)
    20 {
    21   function strictSetProperty()
    22   {
    23     "use strict";
    24     o[p] = v;
    25   }
    27   function setProperty()
    28   {
    29     o[p] = v;
    30   }
    32   assertEq(Object.prototype.hasOwnProperty.call(o, p), false);
    34   try
    35   {
    36     if (strict)
    37       strictSetProperty();
    38     else
    39       setProperty();
    40     if (o[p] === v)
    41       return "set";
    42     if (p in o)
    43       return "set-converted";
    44     return "swallowed";
    45   }
    46   catch (e)
    47   {
    48     return "throw";
    49   }
    50 }
    52 function tryDefineProperty(o, p, v)
    53 {
    54   assertEq(Object.prototype.hasOwnProperty.call(o, p), false);
    56   try
    57   {
    58     Object.defineProperty(o, p, { value: v });
    59     if (o[p] === v)
    60       return "set";
    61     if (p in o)
    62       return "set-converted";
    63     return "swallowed";
    64   }
    65   catch (e)
    66   {
    67     return "throw";
    68   }
    69 }
    71 assertEq(typeof Object.preventExtensions, "function");
    72 assertEq(Object.preventExtensions.length, 1);
    74 var slowArray = [1, 2, 3];
    75 slowArray.slow = 5;
    76 var objs =
    77   [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/];
    79 for (var i = 0, sz = objs.length; i < sz; i++)
    80 {
    81   var o = objs[i];
    82   assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?");
    84   var o2 = Object.preventExtensions(o);
    85   assertEq(o, o2);
    87   assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?");
    89   assertEq(trySetProperty(o, "baz", 17, true), "throw",
    90            "unexpected behavior for strict-mode property-addition to " +
    91            "object " + i);
    92   assertEq(trySetProperty(o, "baz", 17, false), "swallowed",
    93            "unexpected behavior for property-addition to object " + i);
    95   assertEq(tryDefineProperty(o, "baz", 17), "throw",
    96            "unexpected behavior for new property definition on object " + i);
    97 }
    99 /******************************************************************************/
   101 reportCompare(true, true);
   103 print("All tests passed!");

mercurial