Crash accessing static property on sealed object
[webkit:qtwebkit.git] / LayoutTests / fast / js / script-tests / preventExtensions.js
1 description(
2 "This test checks whether various seal/freeze/preventExtentions work on a regular object."
3 );
4
5 function obj()
6 {
7     return { a: 1, b: 2 };
8 }
9
10 function test(obj)
11 {
12     obj.c =3;
13     obj.b =4;
14     delete obj.a;
15
16     var result = "";
17     for (key in obj)
18         result += ("(" + key + ":" + obj[key] + ")");
19     if (Object.isSealed(obj))
20         result += "S";
21     if (Object.isFrozen(obj))
22         result += "F";
23     if (Object.isExtensible(obj))
24         result += "E";
25     return result;
26 }
27
28 function seal(obj)
29 {
30     Object.seal(obj);
31     return obj;
32 }
33
34 function freeze(obj)
35 {
36     Object.freeze(obj);
37     return obj;
38 }
39
40 function preventExtensions(obj)
41 {
42     Object.preventExtensions(obj);
43     return obj;
44 }
45
46 function inextensible(){}
47 function sealed(){}
48 function frozen(){};
49 preventExtensions(inextensible);
50 seal(sealed);
51 freeze(frozen);
52 new inextensible;
53 new sealed;
54 new frozen;
55 inextensible.prototype.prototypeExists = true;
56 sealed.prototype.prototypeExists = true;
57 frozen.prototype.prototypeExists = true;
58
59 shouldBeTrue("(new inextensible).prototypeExists");
60 shouldBeTrue("(new sealed).prototypeExists");
61 shouldBeTrue("(new frozen).prototypeExists");
62
63 shouldBe('test(obj())', '"(b:4)(c:3)E"'); // extensible, can delete a, can modify b, and can add c
64 shouldBe('test(preventExtensions(obj()))', '"(b:4)"'); // <nothing>, can delete a, can modify b, and CANNOT add c
65 shouldBe('test(seal(obj()))', '"(a:1)(b:4)S"'); // sealed, CANNOT delete a, can modify b, and CANNOT add c
66 shouldBe('test(freeze(obj()))', '"(a:1)(b:2)SF"'); // sealed and frozen, CANNOT delete a, CANNOT modify b, and CANNOT add c
67
68 // check that we can still access static properties on an object after calling preventExtensions.
69 shouldBe('Object.preventExtensions(Math); Math.sqrt(4)', '2');
70
71 successfullyParsed = true;