c63348dd01547c366dca731da89387d2e29e3ba5
[WebKit-https.git] / LayoutTests / fast / js / regexp-caching.html
1 <html>
2 <head>
3 <script>
4 function print(message) {
5         var paragraph = document.createElement("p");
6         paragraph.appendChild(document.createTextNode(message));
7         document.getElementById("console").appendChild(paragraph);
8 }
9
10 function isReadOnly(p) {
11     var oldValue = RegExp[p];
12     RegExp[p] = !RegExp[p];
13     var result = (RegExp[p] == oldValue);
14     RegExp[p] = oldValue;
15     return result;
16 }
17
18 function test() {
19     if (window.layoutTestController)  
20         layoutTestController.dumpAsText();
21
22     print("Properties of RegExp at startup:");
23     for (var p in RegExp) {
24         print(p + ": {" + RegExp[p] + "} " + (isReadOnly(p) ? "(read-only)" : "(read-write)"));
25         }
26     
27     var r = /(1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/;
28     var matchingString = "<1234567890>";
29     var unmatchingString = "XXX";
30
31     var dummyRegExp = new RegExp();
32     var dummyString = "";
33     
34     print("");
35     r.exec(matchingString);
36     print("Properties of RegExp after " + r + ".exec(" + matchingString + "):");
37     for (var p in RegExp)
38         print(p + ": {" + RegExp[p] + "} ");
39
40     print("");
41     print("RegExp.$0 " + (RegExp.$0 ? "exists" : "does not exist"));
42     print("RegExp.$10 " + (RegExp.$10 ? "exists" : "does not exist"));
43     print("RegExp " + (r.test() ? "uses" : "doesn't use") + " RegExp.input");
44     
45     RegExp.multiline = "foo";
46     print("RegExp.multiline " + (typeof RegExp.multiline == typeof Boolean() ? "coerces" : "doesn't coerce") + " values to booleans");
47     RegExp.input = Number();
48     print("RegExp.input " + (typeof RegExp.input == typeof String() ? "coerces" : "doesn't coerce") + " values to strings");
49
50     print("");
51     r.exec(unmatchingString);
52     print("Properties of RegExp after " + r + ".exec(" + unmatchingString + "):");
53     for (var p in RegExp)
54         print(p + ": {" + RegExp[p] + "} ");
55
56     print("");
57     print("---------- [Cleared RegExp values] ----------");
58     dummyRegExp.exec(dummyString);
59     if (RegExp.lastMatch != "")
60         print("Clear failed");
61
62     matchingString.search(r);
63     print("Properties of RegExp after " + matchingString + ".search(" + r + "):");
64     for (var p in RegExp)
65         print(p + ": {" + RegExp[p] + "} ");
66
67     print("");
68     print("---------- [Cleared RegExp values] ----------");
69     dummyRegExp.exec(dummyString);
70
71     matchingString.replace(r);
72     print("Properties of RegExp after " + matchingString + ".replace(" + r + "):");
73     for (var p in RegExp)
74         print(p + ": {" + RegExp[p] + "} ");
75 }
76 </script>
77 </head>
78 <body onload="test();">
79 <p>
80 This test checks our implementation of the special RegExp member variables.
81 </p>
82 <hr>
83 <div id='console'/ style="font-family: courier; font-size: 12">
84 </body>
85 </html>