js/src/tests/ecma_5/misc/global-numeric-properties.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/tests/ecma_5/misc/global-numeric-properties.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,59 @@
     1.4 +/*
     1.5 + * Any copyright is dedicated to the Public Domain.
     1.6 + * http://creativecommons.org/licenses/publicdomain/
     1.7 + */
     1.8 +
     1.9 +//-----------------------------------------------------------------------------
    1.10 +var BUGNUMBER = 537863;
    1.11 +var summary =
    1.12 +  'undefined, Infinity, and NaN global properties should not be writable';
    1.13 +
    1.14 +print(BUGNUMBER + ": " + summary);
    1.15 +
    1.16 +/**************
    1.17 + * BEGIN TEST *
    1.18 + **************/
    1.19 +
    1.20 +var desc, old, error;
    1.21 +var global = this;
    1.22 +
    1.23 +var names = ["NaN", "Infinity", "undefined"];
    1.24 +
    1.25 +for (var i = 0; i < names.length; i++)
    1.26 +{
    1.27 +  var name = names[i];
    1.28 +  desc = Object.getOwnPropertyDescriptor(global, name);
    1.29 +  assertEq(desc !== undefined, true, name + " should be present");
    1.30 +  assertEq(desc.enumerable, false, name + " should not be enumerable");
    1.31 +  assertEq(desc.configurable, false, name + " should not be configurable");
    1.32 +  assertEq(desc.writable, false, name + " should not be writable");
    1.33 +
    1.34 +  old = global[name];
    1.35 +  global[name] = 17;
    1.36 +  assertEq(global[name], old, name + " changed on setting?");
    1.37 +
    1.38 +  error = "before";
    1.39 +  try
    1.40 +  {
    1.41 +    throw new TypeError("SpiderMonkey doesn't currently implement " +
    1.42 +                        "strict-mode throwing when setting a readonly " +
    1.43 +                        "property, not running this bit of test for now; " +
    1.44 +                        "see bug 537873");
    1.45 +
    1.46 +    (function() { "use strict"; global[name] = 42; error = "didn't throw"; })();
    1.47 +  }
    1.48 +  catch (e)
    1.49 +  {
    1.50 +    if (e instanceof TypeError)
    1.51 +      error = "typeerror";
    1.52 +    else
    1.53 +      error = "bad exception: " + e;
    1.54 +  }
    1.55 +  assertEq(error, "typeerror", "wrong strict mode error setting " + name);
    1.56 +}
    1.57 +
    1.58 +/******************************************************************************/
    1.59 +
    1.60 +reportCompare(true, true);
    1.61 +
    1.62 +print("All tests passed!");

mercurial