304 lines
6.5 KiB
HTML
304 lines
6.5 KiB
HTML
<p>This page tests getting and setting window properties and functions.</p>
|
|
<pre id="console"></pre>
|
|
|
|
<script>
|
|
function log(s)
|
|
{
|
|
document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
|
|
}
|
|
|
|
function shouldBe(a, b)
|
|
{
|
|
var evalA, evalB;
|
|
try {
|
|
evalA = eval(a);
|
|
evalB = eval(b);
|
|
} catch(e) {
|
|
evalA = e;
|
|
}
|
|
|
|
var message = (evalA === evalB)
|
|
? "PASS: " + a + " should be '" + evalB + "' and is."
|
|
: "*** FAIL: " + a + " should be '" + evalB + "' but instead is " + evalA + ". ***";
|
|
log(message);
|
|
}
|
|
|
|
function shouldBeTrue(a)
|
|
{
|
|
shouldBe(a, "true");
|
|
}
|
|
|
|
function shouldBeFalse(b)
|
|
{
|
|
shouldBe(b, "false");
|
|
}
|
|
|
|
function canGet(keyPath)
|
|
{
|
|
try {
|
|
return eval("window." + keyPath) !== undefined;
|
|
} catch(e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
window.marker = { "foo": "bar", toString: function(){ return "window.marker.toString()"; } };
|
|
|
|
function canSet(keyPath)
|
|
{
|
|
var valuePath = "window.marker";
|
|
|
|
try {
|
|
eval("window." + keyPath + " = " + valuePath);
|
|
return eval("window." + keyPath) === eval("window." + valuePath);
|
|
} catch(e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function canSetWithTypeConversion(keyPath)
|
|
{
|
|
var valuePath = "window.marker";
|
|
|
|
try {
|
|
eval("window." + keyPath + " = " + valuePath);
|
|
return eval("window." + keyPath) == eval("window." + valuePath);
|
|
} catch(e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
var windowReadWriteProperties = [
|
|
"Attr",
|
|
"CDATASection",
|
|
"CSSPrimitiveValue",
|
|
"CSSRule",
|
|
"CSSStyleDeclaration",
|
|
"CSSValue",
|
|
"CharacterData",
|
|
"Comment",
|
|
"DOMException",
|
|
"DOMImplementation",
|
|
"DOMParser",
|
|
"Document",
|
|
"DocumentFragment",
|
|
"DocumentType",
|
|
"Element",
|
|
"EvalError",
|
|
"Event",
|
|
"HTMLAnchorElement",
|
|
"HTMLAreaElement",
|
|
"HTMLBRElement",
|
|
"HTMLBaseElement",
|
|
"HTMLBodyElement",
|
|
"HTMLButtonElement",
|
|
"HTMLCanvasElement",
|
|
"HTMLDListElement",
|
|
"HTMLDirectoryElement",
|
|
"HTMLDivElement",
|
|
"HTMLDocument",
|
|
"HTMLElement",
|
|
"HTMLFieldSetElement",
|
|
"HTMLFontElement",
|
|
"HTMLFormElement",
|
|
"HTMLFrameElement",
|
|
"HTMLFrameSetElement",
|
|
"HTMLHRElement",
|
|
"HTMLHeadElement",
|
|
"HTMLHeadingElement",
|
|
"HTMLHtmlElement",
|
|
"HTMLIFrameElement",
|
|
"HTMLImageElement",
|
|
"HTMLInputElement",
|
|
"HTMLIsIndexElement",
|
|
"HTMLLIElement",
|
|
"HTMLLabelElement",
|
|
"HTMLLegendElement",
|
|
"HTMLLinkElement",
|
|
"HTMLMapElement",
|
|
"HTMLMarqueeElement",
|
|
"HTMLMenuElement",
|
|
"HTMLMetaElement",
|
|
"HTMLModElement",
|
|
"HTMLOListElement",
|
|
"HTMLOptGroupElement",
|
|
"HTMLOptionElement",
|
|
"HTMLParagraphElement",
|
|
"HTMLParamElement",
|
|
"HTMLPreElement",
|
|
"HTMLQuoteElement",
|
|
"HTMLScriptElement",
|
|
"HTMLSelectElement",
|
|
"HTMLStyleElement",
|
|
"HTMLTableCaptionElement",
|
|
"HTMLTableCellElement",
|
|
"HTMLTableColElement",
|
|
"HTMLTableElement",
|
|
"HTMLTableRowElement",
|
|
"HTMLTableSectionElement",
|
|
"HTMLTextAreaElement",
|
|
"HTMLTitleElement",
|
|
"HTMLUListElement",
|
|
"Image",
|
|
"MutationEvent",
|
|
"Node",
|
|
"NodeFilter",
|
|
"Option",
|
|
"OverconstrainedError",
|
|
"ProcessingInstruction",
|
|
"Range",
|
|
"RangeError",
|
|
"ReferenceError",
|
|
"SyntaxError",
|
|
"Text",
|
|
"TypeError",
|
|
"URIError",
|
|
"XMLDocument",
|
|
"XMLHttpRequest",
|
|
"XMLSerializer",
|
|
"XPathEvaluator",
|
|
"XPathResult",
|
|
"XSLTProcessor",
|
|
"addEventListener",
|
|
"alert",
|
|
"atob",
|
|
"btoa",
|
|
"captureEvents",
|
|
"clearInterval",
|
|
"clearTimeout",
|
|
"clientInformation",
|
|
"console",
|
|
"devicePixelRatio",
|
|
"event",
|
|
"frames",
|
|
"innerHeight",
|
|
"innerWidth",
|
|
"length",
|
|
"locationbar",
|
|
"menubar",
|
|
"offscreenBuffering",
|
|
"opener",
|
|
"outerHeight",
|
|
"outerWidth",
|
|
"parent",
|
|
"personalbar",
|
|
"screenLeft",
|
|
"screenTop",
|
|
"screenX",
|
|
"screenY",
|
|
"scrollX",
|
|
"scrollY",
|
|
"pageXOffset",
|
|
"pageYOffset",
|
|
"scrollbars",
|
|
"self",
|
|
"statusbar",
|
|
"toolbar"
|
|
];
|
|
|
|
var windowReadOnlyProperties = [
|
|
"closed",
|
|
"document",
|
|
"history",
|
|
"navigator",
|
|
"window",
|
|
"top"
|
|
];
|
|
|
|
var windowReadWriteStringProperties = [
|
|
"defaultStatus",
|
|
"defaultstatus",
|
|
"name",
|
|
"status"
|
|
];
|
|
|
|
var windowFunctions = [
|
|
"blur",
|
|
"close",
|
|
"confirm",
|
|
"find",
|
|
"focus",
|
|
"getComputedStyle",
|
|
"getMatchedCSSRules",
|
|
"getSelection",
|
|
"moveBy",
|
|
"moveTo",
|
|
"onabort",
|
|
"onbeforeunload",
|
|
"onblur",
|
|
"onchange",
|
|
"onclick",
|
|
"ondblclick",
|
|
"onerror",
|
|
"onfocus",
|
|
"onkeydown",
|
|
"onkeypress",
|
|
"onkeyup",
|
|
"onload",
|
|
"onmousedown",
|
|
"onmousemove",
|
|
"onmouseout",
|
|
"onmouseover",
|
|
"onmouseup",
|
|
"onmousewheel",
|
|
"onreset",
|
|
"onresize",
|
|
"onscroll",
|
|
"onsearch",
|
|
"onselect",
|
|
"onsubmit",
|
|
"onunload",
|
|
"open",
|
|
"print",
|
|
"prompt",
|
|
"releaseEvents",
|
|
"removeEventListener",
|
|
"resizeBy",
|
|
"resizeTo",
|
|
"scroll",
|
|
"scrollBy",
|
|
"scrollTo",
|
|
"setInterval",
|
|
"setTimeout",
|
|
"stop"
|
|
];
|
|
|
|
window.onload = function()
|
|
{
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
log("\n----- tests for getting/setting read-write properties -----\n");
|
|
|
|
for (var i = 0; i < windowReadWriteProperties.length; i++) { //>
|
|
var property = windowReadWriteProperties[i];
|
|
shouldBeTrue("canGet('" + property + "')");
|
|
shouldBeTrue("canSet('" + property + "')");
|
|
}
|
|
|
|
log("\n----- tests for getting/setting readonly properties -----\n");
|
|
|
|
for (var i = 0; i < windowReadOnlyProperties.length; i++) { //>
|
|
var property = windowReadOnlyProperties[i];
|
|
shouldBeTrue("canGet('" + property + "')");
|
|
shouldBeFalse("canSet('" + property + "')");
|
|
}
|
|
|
|
log("\n----- tests for getting/setting string properties -----\n");
|
|
for (var i = 0; i < windowReadWriteStringProperties.length; i++) { //>
|
|
var property = windowReadWriteStringProperties[i];
|
|
shouldBeTrue("canGet('" + property + "')");
|
|
shouldBeTrue("canSetWithTypeConversion('" + property + "')");
|
|
|
|
}
|
|
|
|
log("\n----- tests for getting/setting functions -----\n");
|
|
|
|
for (var i = 0; i < windowFunctions.length; i++) { //>
|
|
var property = windowFunctions[i];
|
|
shouldBeTrue("canGet('" + property + "')");
|
|
shouldBeTrue("canSet('" + property + "')");
|
|
}
|
|
}
|
|
</script>
|