| Index: third_party/WebKit/LayoutTests/external/wpt/selection/getSelection.html
|
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/getSelection.html b/third_party/WebKit/LayoutTests/external/wpt/selection/getSelection.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ea119f2fc40c11884f7602a685c1094282884214
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/external/wpt/selection/getSelection.html
|
| @@ -0,0 +1,160 @@
|
| +<!doctype html>
|
| +<title>getSelection() tests</title>
|
| +<div id=log></div>
|
| +<script src=/resources/testharness.js></script>
|
| +<script src=/resources/testharnessreport.js></script>
|
| +<script>
|
| +"use strict";
|
| +
|
| +// TODO: Figure out more places where defaultView is or is not guaranteed to be
|
| +// null, and test whether getSelection() is null.
|
| +//
|
| +// TODO: Figure out a good way to test display: none iframes.
|
| +
|
| +test(function() {
|
| + // Sanity checks like this are to flag known browser bugs with clearer
|
| + // error messages, instead of throwing inscrutable exceptions.
|
| + assert_true("Selection" in window,
|
| + "Sanity check: window must have Selection property");
|
| +
|
| + assert_true(window.getSelection() instanceof Selection);
|
| +}, "window.getSelection() instanceof Selection");
|
| +
|
| +test(function() {
|
| + assert_equals(window.getSelection(), window.getSelection());
|
| +}, "window.getSelection() === window.getSelection()");
|
| +
|
| +test(function() {
|
| + assert_true("Selection" in window,
|
| + "Sanity check: window must have Selection property");
|
| + // This sanity check (which occurs a number of times below, too) is because
|
| + // document.getSelection() is supposed to return null if defaultView is
|
| + // null, so we need to figure out whether defaultView is null or not before
|
| + // we can make correct assertions about getSelection().
|
| + assert_not_equals(document.defaultView, null,
|
| + "Sanity check: document.defaultView must not be null");
|
| +
|
| + assert_equals(typeof document.getSelection(), "object",
|
| + "document.getSelection() must be an object");
|
| + assert_true(document.getSelection() instanceof Selection);
|
| +}, "document.getSelection() instanceof Selection");
|
| +
|
| +test(function() {
|
| + assert_not_equals(document.defaultView, null,
|
| + "Sanity check: document.defaultView must not be null");
|
| + assert_equals(document.getSelection(), document.getSelection());
|
| +}, "document.getSelection() === document.getSelection()");
|
| +
|
| +test(function() {
|
| + assert_not_equals(document.defaultView, null,
|
| + "Sanity check: document.defaultView must not be null");
|
| + assert_equals(window.getSelection(), document.getSelection());
|
| +}, "window.getSelection() === document.getSelection()");
|
| +
|
| +// "Each selection is associated with a single range, which may be null and is
|
| +// initially null."
|
| +//
|
| +// "The rangeCount attribute must return 0 if the context object's range is
|
| +// null, otherwise 1."
|
| +test(function() {
|
| + assert_equals(window.getSelection().rangeCount, 0,
|
| + "window.getSelection().rangeCount must initially be 0");
|
| + assert_equals(typeof document.getSelection(), "object",
|
| + "Sanity check: document.getSelection() must be an object");
|
| + assert_equals(document.getSelection().rangeCount, 0,
|
| + "document.getSelection().rangeCount must initially be 0");
|
| +}, "Selection's range must initially be null");
|
| +
|
| +test(function() {
|
| + var doc = document.implementation.createHTMLDocument("");
|
| + assert_equals(doc.defaultView, null,
|
| + "Sanity check: defaultView of created HTML document must be null");
|
| + assert_equals(doc.getSelection(), null);
|
| +}, "getSelection() on HTML document with null defaultView must be null");
|
| +
|
| +test(function() {
|
| + var xmlDoc = document.implementation.createDocument(null, "", null);
|
| +
|
| + assert_true("getSelection" in xmlDoc, "XML document must have getSelection()");
|
| +
|
| + assert_equals(xmlDoc.defaultView, null,
|
| + "Sanity check: defaultView of created XML document must be null");
|
| + assert_equals(xmlDoc.getSelection(), null);
|
| +}, "getSelection() on XML document with null defaultView must be null");
|
| +
|
| +
|
| +// Run a bunch of iframe tests, once immediately after the iframe is appended
|
| +// to the document and once onload. This makes a difference, because browsers
|
| +// differ (at the time of this writing) in whether they load about:blank in
|
| +// iframes synchronously or not. Per the HTML spec, there must be a browsing
|
| +// context associated with the iframe as soon as it's appended to the document,
|
| +// so there should be a selection too.
|
| +var iframe = document.createElement("iframe");
|
| +add_completion_callback(function() {
|
| + document.body.removeChild(iframe);
|
| +});
|
| +
|
| +var testDescs = [];
|
| +var testFuncs = [];
|
| +testDescs.push("window.getSelection() instanceof Selection in an iframe");
|
| +testFuncs.push(function() {
|
| + assert_true("Selection" in iframe.contentWindow,
|
| + "Sanity check: window must have Selection property");
|
| + assert_not_equals(iframe.contentWindow.document.defaultView, null,
|
| + "Sanity check: document.defaultView must not be null");
|
| + assert_not_equals(iframe.contentWindow.getSelection(), null,
|
| + "window.getSelection() must not be null");
|
| + assert_true(iframe.contentWindow.getSelection() instanceof iframe.contentWindow.Selection);
|
| +});
|
| +
|
| +testDescs.push("document.getSelection() instanceof Selection in an iframe");
|
| +testFuncs.push(function() {
|
| + assert_true("Selection" in iframe.contentWindow,
|
| + "Sanity check: window must have Selection property");
|
| + assert_not_equals(iframe.contentDocument.defaultView, null,
|
| + "Sanity check: document.defaultView must not be null");
|
| + assert_not_equals(iframe.contentDocument.getSelection(), null,
|
| + "document.getSelection() must not be null");
|
| + assert_equals(typeof iframe.contentDocument.getSelection(), "object",
|
| + "document.getSelection() must be an object");
|
| + assert_true(iframe.contentDocument.getSelection() instanceof iframe.contentWindow.Selection);
|
| +});
|
| +
|
| +testDescs.push("window.getSelection() === document.getSelection() in an iframe");
|
| +testFuncs.push(function() {
|
| + assert_not_equals(iframe.contentDocument.defaultView, null,
|
| + "Sanity check: document.defaultView must not be null");
|
| + assert_equals(iframe.contentWindow.getSelection(), iframe.contentDocument.getSelection());
|
| +});
|
| +
|
| +testDescs.push("getSelection() inside and outside iframe must return different objects");
|
| +testFuncs.push(function() {
|
| + assert_not_equals(iframe.contentWindow.getSelection(), getSelection());
|
| +});
|
| +
|
| +testDescs.push("getSelection() on HTML document with null defaultView must be null inside an iframe");
|
| +testFuncs.push(function() {
|
| + var doc = iframe.contentDocument.implementation.createHTMLDocument("");
|
| + assert_equals(doc.defaultView, null,
|
| + "Sanity check: defaultView of created HTML document must be null");
|
| + assert_equals(doc.getSelection(), null);
|
| +});
|
| +
|
| +var asyncTests = [];
|
| +testDescs.forEach(function(desc) {
|
| + asyncTests.push(async_test(desc + " onload"));
|
| +});
|
| +
|
| +iframe.onload = function() {
|
| + asyncTests.forEach(function(t, i) {
|
| + t.step(testFuncs[i]);
|
| + t.done();
|
| + });
|
| +};
|
| +
|
| +document.body.appendChild(iframe);
|
| +
|
| +testDescs.forEach(function(desc, i) {
|
| + test(testFuncs[i], desc + " immediately after appendChild");
|
| +});
|
| +</script>
|
|
|