2011-04-25 Geoffrey Garen <ggaren@apple.com>
[WebKit-https.git] / LayoutTests / fast / dom / gc-custom-prototype.html
1 <p>Tests that custom prototypes on DOM objects persist after garbage collection.</p>
2 <pre id="console"></pre>
3
4 <p id="p"></p>
5
6 <script>
7 function $(id)
8 {
9     return document.getElementById(id);
10 }
11
12 function log(s)
13 {
14     $("console").appendChild(document.createTextNode(s + "\n"));
15 }
16
17 function shouldBe(aDescription, a, b)
18 {
19     if (a != b) {
20         log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + ".");
21         return;
22     }
23
24     log("PASS: " + aDescription + " should be " + b + " and is.");
25 }
26
27 function gc()
28 {
29     if (window.GCController) {
30         GCController.collect();
31         return;
32     }
33     
34     for (var i = 0; i < 10000; ++i)
35         new Object;
36 }
37
38 function shouldBeNull(aDescription, a)
39 {
40     if (a == null) {
41         log("PASS: " + aDescription + " should be null and is.");
42         return;
43     }
44     
45     log("FAIL: " + aDescription + " should be null but instead is " + a + ".");
46 }
47
48 function shouldBeNonNull(aDescription, a)
49 {
50     if (a != null) {
51         log("PASS: " + aDescription + " should be null and is.");
52         return;
53     }
54     
55     log("FAIL: " + aDescription + " should be null but instead is " + a + ".");
56 }
57
58 (function () {
59     if (window.layoutTestController)
60         layoutTestController.dumpAsText();
61
62     shouldBeNonNull("$('p').__proto__", $('p').__proto__);
63     $('p').__proto__ = null;
64     shouldBeNull("$('p').__proto__", $('p').__proto__);
65
66     gc();
67
68     shouldBeNull("$('p').__proto__", $('p').__proto__);
69 })();
70 </script>