| <html> |
| <head> |
| <script> |
| function print(message) |
| { |
| var block = document.createElement("div"); |
| block.appendChild(document.createTextNode(message)); |
| block.appendChild(document.createElement("br")); |
| document.getElementById("console").appendChild(block); |
| } |
| |
| function isReadOnly(object, property) |
| { |
| var oldValue = object[property]; |
| object[property] = !object[property]; |
| var result = (object[property] == oldValue); |
| object[property] = oldValue; |
| return result; |
| } |
| |
| function printPropertiesWithReadOnly(object) |
| { |
| var array = new Array; |
| for (var property in object) { |
| array.push(property); |
| } |
| array.sort(); |
| for (var i = 0; i < array.length; i++) { |
| var property = array[i]; |
| print(property + ": {" + object[property] + "} " + (isReadOnly(object, property) ? "(read-only)" : "(read-write)")); |
| } |
| } |
| |
| function printProperties(object) |
| { |
| var array = new Array; |
| for (var property in object) { |
| array.push(property); |
| } |
| array.sort(); |
| for (var i = 0; i < array.length; i++) { |
| var property = array[i]; |
| print(property + ": {" + object[property] + "}"); |
| } |
| } |
| |
| function test() { |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| print("Properties of RegExp at startup:"); |
| printPropertiesWithReadOnly(RegExp); |
| |
| var r = /(1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/; |
| var matchingString = "<1234567890>"; |
| var unmatchingString = "XXX"; |
| |
| var dummyRegExp = new RegExp(); |
| var dummyString = ""; |
| |
| print(""); |
| r.exec(matchingString); |
| print("Properties of RegExp after " + r + ".exec(" + matchingString + "):"); |
| printProperties(RegExp); |
| |
| print(""); |
| print("RegExp.$0 " + (RegExp.$0 ? "exists" : "does not exist")); |
| print("RegExp.$10 " + (RegExp.$10 ? "exists" : "does not exist")); |
| print("RegExp " + (r.test() ? "uses" : "doesn't use") + " RegExp.input"); |
| |
| RegExp.multiline = "foo"; |
| print("RegExp.multiline " + (typeof RegExp.multiline == typeof Boolean() ? "coerces" : "doesn't coerce") + " values to booleans"); |
| RegExp.input = Number(); |
| print("RegExp.input " + (typeof RegExp.input == typeof String() ? "coerces" : "doesn't coerce") + " values to strings"); |
| |
| print(""); |
| r.exec(unmatchingString); |
| print("Properties of RegExp after " + r + ".exec(" + unmatchingString + "):"); |
| printProperties(RegExp); |
| |
| print(""); |
| print("---------- [Cleared RegExp values] ----------"); |
| dummyRegExp.exec(dummyString); |
| if (RegExp.lastMatch != "") |
| print("Clear failed"); |
| |
| matchingString.search(r); |
| print("Properties of RegExp after " + matchingString + ".search(" + r + "):"); |
| printProperties(RegExp); |
| |
| print(""); |
| print("---------- [Cleared RegExp values] ----------"); |
| dummyRegExp.exec(dummyString); |
| |
| matchingString.replace(r); |
| print("Properties of RegExp after " + matchingString + ".replace(" + r + "):"); |
| printProperties(RegExp); |
| } |
| </script> |
| </head> |
| <body onload="test();"> |
| <p> |
| This test checks our implementation of the special RegExp member variables. |
| </p> |
| <hr> |
| <div id='console'/ style="font-family: courier; font-size: 12"> |
| </body> |
| </html> |