| Index: LayoutTests/imported/web-platform-tests/html/browsers/the-window-object/window-properties.html
|
| diff --git a/LayoutTests/imported/web-platform-tests/html/browsers/the-window-object/window-properties.html b/LayoutTests/imported/web-platform-tests/html/browsers/the-window-object/window-properties.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..04ed6ca0a3b3e8c3cc244068e824fd997e29c495
|
| --- /dev/null
|
| +++ b/LayoutTests/imported/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>
|
|
|