diff options
Diffstat (limited to 'testing/web-platform/tests/html/browsers/the-window-object/window-properties.html')
-rw-r--r-- | testing/web-platform/tests/html/browsers/the-window-object/window-properties.html | 322 |
1 files changed, 322 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/browsers/the-window-object/window-properties.html b/testing/web-platform/tests/html/browsers/the-window-object/window-properties.html new file mode 100644 index 000000000..3316bf531 --- /dev/null +++ b/testing/web-platform/tests/html/browsers/the-window-object/window-properties.html @@ -0,0 +1,322 @@ +<!doctype html> +<meta charset=utf-8> +<title>Properties of the window object</title> +<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> +<link rel="help" href="http://ecma-international.org/ecma-262/5.1/#sec-15.1"> +<link rel="help" href="https://heycam.github.io/webidl/#interface-prototype-object"> +<link rel="help" href="https://heycam.github.io/webidl/#es-attributes"> +<link rel="help" href="https://heycam.github.io/webidl/#es-operations"> +<link rel="help" href="https://dom.spec.whatwg.org/#eventtarget"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#window"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#windowtimers"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#windowbase64"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#windowsessionstorage"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#windowlocalstorage"> +<link rel="help" href="https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#dom-window-getselection"> +<link rel="help" href="http://dev.w3.org/csswg/cssom/#widl-def-Window"> +<link rel="help" href="http://dev.w3.org/csswg/cssom-view/#widl-def-Window"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script> +function assert_data_propdesc(pd, Writable, Enumerable, Configurable) { + assert_equals(typeof pd, "object"); + assert_equals(pd.writable, Writable); + assert_equals(pd.enumerable, Enumerable); + assert_equals(pd.configurable, Configurable); +} +function assert_accessor_propdesc(pd, hasSetter, Enumerable, Configurable) { + assert_equals(typeof pd, "object"); + assert_equals(typeof pd.get, "function"); + assert_true("set" in pd, + "Should always have a setter property on the property descriptor"); + assert_equals(typeof pd.set, hasSetter ? "function" : "undefined"); + assert_equals(pd.enumerable, Enumerable); + assert_equals(pd.configurable, Configurable); +} + +var unforgeableAttributes = [ + "window", + "document", + "location", + "top" +]; + +var replaceableAttributes = [ + "self", + "locationbar", + "menubar", + "personalbar", + "scrollbars", + "statusbar", + "toolbar", + "frames", + "parent", + "external", + "length", + + // CSSOM-View + "screen", + "scrollX", + "scrollY", + "pageXOffset", + "pageYOffset", + "innerWidth", + "innerHeight", + "screenX", + "screenY", + "outerWidth", + "outerHeight", + "devicePixelRatio", +]; + +var methods = [ + "close", + "stop", + "focus", + "blur", + "open", + "alert", + "confirm", + "prompt", + "print", + // See below: "showModalDialog", + "postMessage", + + // WindowBase64 + "btoa", + "atob", + + // WindowTimers + "setTimeout", + "clearTimeout", + "setInterval", + "clearInterval", + + // HTML Editing APIs + "getSelection", + + // CSSOM + "getComputedStyle", + + // CSSOM-View + "matchMedia", + "scroll", + "scrollTo", + "scrollBy" +]; + +// We would like to remove showModalDialog from the platform, +// see <https://www.w3.org/Bugs/Public/show_bug.cgi?id=26437>. +if ("showModalDialog" in window) { + methods.push("showModalDialog"); +} + +var readonlyAttributes = [ + "history", + "frameElement", + "navigator", + "applicationCache", + + // WindowSessionStorage + "sessionStorage", + + // WindowLocalStorage + "localStorage", +]; + +var writableAttributes = [ + "name", + "status", + "opener", + "onabort", + "onafterprint", + "onbeforeprint", + "onbeforeunload", + "onblur", + "oncancel", + "oncanplay", + "oncanplaythrough", + "onchange", + "onclick", + "onclose", + "oncontextmenu", + "oncuechange", + "ondblclick", + "ondrag", + "ondragend", + "ondragenter", + "ondragleave", + "ondragover", + "ondragstart", + "ondrop", + "ondurationchange", + "onemptied", + "onended", + "onerror", + "onfocus", + "onhashchange", + "oninput", + "oninvalid", + "onkeydown", + "onkeypress", + "onkeyup", + "onload", + "onloadeddata", + "onloadedmetadata", + "onloadstart", + "onmessage", + "onmousedown", + "onmousemove", + "onmouseout", + "onmouseover", + "onmouseup", + "onmousewheel", + "onoffline", + "ononline", + "onpause", + "onplay", + "onplaying", + "onpagehide", + "onpageshow", + "onpopstate", + "onprogress", + "onratechange", + "onreset", + "onresize", + "onscroll", + "onseeked", + "onseeking", + "onselect", + "onshow", + "onstalled", + "onstorage", + "onsubmit", + "onsuspend", + "ontimeupdate", + "onunload", + "onvolumechange", + "onwaiting" +]; + +test(function() { + // 15.1.1 Value Properties of the Global Object + ["NaN", "Infinity", "undefined"].forEach(function(id) { + test(function() { + assert_true(id in window, id + " in window"); + assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), + false, false, false); + }, "Value Property: " + id); + }); +}, "Value Properties of the Global Object"); +test(function() { + // 15.1.2 Function Properties of the Global Object + ["eval", "parseInt", "parseFloat", "isNaN", "isFinite"].forEach(function(id) { + test(function() { + assert_true(id in window, id + " in window"); + assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), + true, false, true); + }, "Function Property: " + id); + }); +}, "Function Properties of the Global Object"); +test(function() { + // 15.1.3 URI Handling Function Properties + ["decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent"].forEach(function(id) { + test(function() { + assert_true(id in window, id + " in window"); + assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), + true, false, true); + }, "URI Handling Function Property: " + id); + }); +}, "URI Handling Function Properties"); +test(function() { + // 15.1.4 Constructor Properties of the Global Object + ["Object", "Function", "Array", "String", "Boolean", "Number", "Date", + "RegExp", "Error", "EvalError", "RangeError", "ReferenceError", + "SyntaxError", "TypeError", "URIError"].forEach(function(id) { + test(function() { + assert_true(id in window, id + " in window"); + assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), + true, false, true); + }, "Constructor Property: " + id); + }); +}, "Constructor Properties of the Global Object"); +test(function() { + // 15.1.5 Other Properties of the Global Object + ["Math", "JSON"].forEach(function(id) { + test(function() { + assert_true(id in window, id + " in window"); + assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), + true, false, true); + }, "Other Property: " + id); + }); +}, "Other Properties of the Global Object"); +test(function() { + // EventTarget interface + ["addEventListener", "removeEventListener", "dispatchEvent"].forEach(function(id) { + test(function() { + var EventTargetProto = EventTarget.prototype; + assert_true(id in window, id + " in window"); + assert_equals(window[id], EventTargetProto[id]); + assert_data_propdesc(Object.getOwnPropertyDescriptor(EventTargetProto, id), + true, true, true); + assert_equals(Object.getOwnPropertyDescriptor(window, id), undefined); + }, "EventTarget method: " + id); + }); +}, "EventTarget interface"); +test(function() { + // Window interface + methods.forEach(function(id) { + test(function() { + var WindowProto = Window.prototype; + assert_true(id in window, id + " in window"); + assert_false(id in WindowProto, id + " in Window.prototype"); + assert_data_propdesc(Object.getOwnPropertyDescriptor(window, id), + true, true, true); + }, "Window method: " + id); + }); + readonlyAttributes.forEach(function(id) { + test(function() { + var WindowProto = Window.prototype; + assert_true(id in window, id + " in window"); + assert_false(id in WindowProto, id + " in Window.prototype"); + assert_accessor_propdesc(Object.getOwnPropertyDescriptor(window, id), + false, true, true); + }, "Window readonly attribute: " + id); + }); + writableAttributes.forEach(function(id) { + test(function() { + var WindowProto = Window.prototype; + assert_true(id in window, id + " in window"); + assert_false(id in WindowProto, id + " in Window.prototype"); + assert_accessor_propdesc(Object.getOwnPropertyDescriptor(window, id), + true, true, true); + }, "Window attribute: " + id); + }); + unforgeableAttributes.forEach(function(id) { + test(function() { + var WindowProto = Window.prototype; + assert_true(id in window, id + " in window"); + assert_false(id in WindowProto, id + " in Window.prototype"); + // location has a [PutForwards] extended attribute. + assert_accessor_propdesc(Object.getOwnPropertyDescriptor(window, id), + id === "location", true, false); + }, "Window unforgeable attribute: " + id); + }); + replaceableAttributes.forEach(function(id) { + test(function() { + var WindowProto = Window.prototype; + assert_true(id in window, id + " in window"); + assert_false(id in WindowProto, id + " in Window.prototype"); + assert_accessor_propdesc(Object.getOwnPropertyDescriptor(window, id), + true, true, true); + }, "Window replaceable attribute: " + id); + }); +}, "Window interface"); +test(function() { + assert_equals(window.constructor, Window); + assert_false(window.hasOwnProperty("constructor"), "window.constructor should not be an own property."); + assert_data_propdesc(Object.getOwnPropertyDescriptor(Window.prototype, "constructor"), + true, false, true); +}, "constructor"); +</script> |