/tests/wpt/web-platform-tests/html/browsers/the-window-object/window-properties.html
HTML | 322 lines | 307 code | 15 blank | 0 comment | 0 complexity | 3a74577f5232e74d5b6f2f1b364efd47 MD5 | raw file
- <!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>