js/src/tests/js1_8_5/regress/regress-591846.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  */
     6 function check(obj, name, value, readonly) {
     7     // Start with a non-configurable, writable data property implemented via
     8     // js::PropertyOp getter and setter.
     9     var pd = Object.getOwnPropertyDescriptor(obj, name);
    11     assertEq(pd.configurable, false, "non-configurable " + name);
    12     assertEq(pd.writable, !readonly, "writable " + name);
    14     try {
    15         // Do not allow a transition from js::PropertyOp to writable js::Value
    16         // data property.
    17         Object.defineProperty(obj, name, {writable: true});
    18         assertEq(0, 1);
    19     } catch (e) {
    20         assertEq('' + e, "TypeError: can't redefine non-configurable property '" + name + "'");
    21     }
    23     if (!readonly) {
    24         try {
    25             // Do not allow the property denoted by name to become a true data
    26             // property via a descriptor that preserves the native property's
    27             // writable attribute.
    28             Object.defineProperty(obj, name, {value: value});
    29             assertEq(0, 1);
    30         } catch (e) {
    31             assertEq('' + e, "TypeError: can't redefine non-configurable property '" + name + "'");
    32         }
    33     }
    35     try {
    36         // Do not allow the property to be frozen at some bogus value.
    37         Object.defineProperty(obj, name, {value: "bogus", writable: false});
    38         assertEq(0, 1);
    39     } catch (e) {
    40         assertEq('' + e, "TypeError: can't redefine non-configurable property '" + name + "'");
    41     }
    43     // Now make name non-writable.
    44     Object.defineProperty(obj, name, {writable: false})
    46     // Assert that the right getter result "stuck".
    47     assertEq(obj[name], value);
    49     // Test that it is operationally non-writable now.
    50     obj[name] = "eek!";
    51     assertEq(obj[name], value);
    52 }
    54 check(Object, 'caller', null, false);
    55 check(Object, 'arguments', null, false);
    57 // Reset RegExp.leftContext to the empty string.
    58 /x/.test('x');
    60 var d = Object.getOwnPropertyDescriptor(RegExp, "leftContext");
    61 assertEq(d.set, undefined);
    62 assertEq(typeof d.get, "function");
    63 assertEq(d.enumerable, true);
    64 assertEq(d.configurable, false);
    65 assertEq(d.get.call(RegExp), "");
    67 reportCompare(0, 0, "ok");

mercurial