summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_5/misc/global-numeric-properties.js
blob: 352c0d3b75071844a40f136ba72db443138eabed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 */

//-----------------------------------------------------------------------------
var BUGNUMBER = 537863;
var summary =
  'undefined, Infinity, and NaN global properties should not be writable';

print(BUGNUMBER + ": " + summary);

/**************
 * BEGIN TEST *
 **************/

var desc, old, error;
var global = this;

var names = ["NaN", "Infinity", "undefined"];

for (var i = 0; i < names.length; i++)
{
  var name = names[i];
  desc = Object.getOwnPropertyDescriptor(global, name);
  assertEq(desc !== undefined, true, name + " should be present");
  assertEq(desc.enumerable, false, name + " should not be enumerable");
  assertEq(desc.configurable, false, name + " should not be configurable");
  assertEq(desc.writable, false, name + " should not be writable");

  old = global[name];
  global[name] = 17;
  assertEq(global[name], old, name + " changed on setting?");

  error = "before";
  try
  {
    throw new TypeError("SpiderMonkey doesn't currently implement " +
                        "strict-mode throwing when setting a readonly " +
                        "property, not running this bit of test for now; " +
                        "see bug 537873");

    (function() { "use strict"; global[name] = 42; error = "didn't throw"; })();
  }
  catch (e)
  {
    if (e instanceof TypeError)
      error = "typeerror";
    else
      error = "bad exception: " + e;
  }
  assertEq(error, "typeerror", "wrong strict mode error setting " + name);
}

/******************************************************************************/

reportCompare(true, true);

print("All tests passed!");