| Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Element-matches.js
|
| diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Element-matches.js b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Element-matches.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1bc0f3d0887d442c54e99a329f5b15a83f689081
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/Element-matches.js
|
| @@ -0,0 +1,127 @@
|
| +/*
|
| + * Check that the matches() method exists on the given Node
|
| + */
|
| +function interfaceCheckMatches(type, obj) {
|
| + if (obj.nodeType === obj.ELEMENT_NODE) {
|
| + test(function() {
|
| + assert_idl_attribute(obj, "matches", type + " supports matches");
|
| + }, type + " supports matches")
|
| + }
|
| +}
|
| +
|
| +function runSpecialMatchesTests(type, element) {
|
| + test(function() { // 1
|
| + if (element.tagName.toLowerCase() === "null") {
|
| + assert_true(element.matches(null), "An element with the tag name '" + element.tagName.toLowerCase() + "' should match.");
|
| + } else {
|
| + assert_false(element.matches(null), "An element with the tag name '" + element.tagName.toLowerCase() + "' should not match.");
|
| + }
|
| + }, type + ".matches(null)")
|
| +
|
| + test(function() { // 2
|
| + if (element.tagName.toLowerCase() === "undefined") {
|
| + assert_true(element.matches(undefined), "An element with the tag name '" + element.tagName.toLowerCase() + "' should match.");
|
| + } else {
|
| + assert_false(element.matches(undefined), "An element with the tag name '" + element.tagName.toLowerCase() + "' should not match.");
|
| + }
|
| + }, type + ".matches(undefined)")
|
| +
|
| + test(function() { // 3
|
| + assert_throws(TypeError(), function() {
|
| + element.matches();
|
| + }, "This should throw a TypeError.")
|
| + }, type + ".matches no parameter")
|
| +}
|
| +
|
| +/*
|
| + * Execute queries with the specified invalid selectors for matches()
|
| + * Only run these tests when errors are expected. Don't run for valid selector tests.
|
| + */
|
| +function runInvalidSelectorTestMatches(type, root, selectors) {
|
| + if (root.nodeType === root.ELEMENT_NODE) {
|
| + for (var i = 0; i < selectors.length; i++) {
|
| + var s = selectors[i];
|
| + var n = s["name"];
|
| + var q = s["selector"];
|
| +
|
| + test(function() {
|
| + assert_throws("SyntaxError", function() {
|
| + root.matches(q)
|
| + })
|
| + }, type + ".matches: " + n + ": " + q);
|
| + }
|
| + }
|
| +}
|
| +
|
| +function runMatchesTest(type, root, selectors, docType) {
|
| + var nodeType = getNodeType(root);
|
| +
|
| + for (var i = 0; i < selectors.length; i++) {
|
| + var s = selectors[i];
|
| + var n = s["name"];
|
| + var q = s["selector"];
|
| + var e = s["expect"];
|
| + var u = s["unexpected"];
|
| +
|
| + var ctx = s["ctx"];
|
| + var ref = s["ref"];
|
| +
|
| + if ((!s["exclude"] || (s["exclude"].indexOf(nodeType) === -1 && s["exclude"].indexOf(docType) === -1))
|
| + && (s["testType"] & TEST_MATCH) ) {
|
| +
|
| + if (ctx && !ref) {
|
| + test(function() {
|
| + var j, element, refNode;
|
| + for (j = 0; j < e.length; j++) {
|
| + element = root.querySelector("#" + e[j]);
|
| + refNode = root.querySelector(ctx);
|
| + assert_true(element.matches(q, refNode), "The element #" + e[j] + " should match the selector.")
|
| + }
|
| +
|
| + if (u) {
|
| + for (j = 0; j < u.length; j++) {
|
| + element = root.querySelector("#" + u[j]);
|
| + refNode = root.querySelector(ctx);
|
| + assert_false(element.matches(q, refNode), "The element #" + u[j] + " should not match the selector.")
|
| + }
|
| + }
|
| + }, type + " Element.matches: " + n + " (with refNode Element): " + q);
|
| + }
|
| +
|
| + if (ref) {
|
| + test(function() {
|
| + var j, element, refNodes;
|
| + for (j = 0; j < e.length; j++) {
|
| + element = root.querySelector("#" + e[j]);
|
| + refNodes = root.querySelectorAll(ref);
|
| + assert_true(element.matches(q, refNodes), "The element #" + e[j] + " should match the selector.")
|
| + }
|
| +
|
| + if (u) {
|
| + for (j = 0; j < u.length; j++) {
|
| + element = root.querySelector("#" + u[j]);
|
| + refNodes = root.querySelectorAll(ref);
|
| + assert_false(element.matches(q, refNodes), "The element #" + u[j] + " should not match the selector.")
|
| + }
|
| + }
|
| + }, type + " Element.matches: " + n + " (with refNodes NodeList): " + q);
|
| + }
|
| +
|
| + if (!ctx && !ref) {
|
| + test(function() {
|
| + for (var j = 0; j < e.length; j++) {
|
| + var element = root.querySelector("#" + e[j]);
|
| + assert_true(element.matches(q), "The element #" + e[j] + " should match the selector.")
|
| + }
|
| +
|
| + if (u) {
|
| + for (j = 0; j < u.length; j++) {
|
| + element = root.querySelector("#" + u[j]);
|
| + assert_false(element.matches(q), "The element #" + u[j] + " should not match the selector.")
|
| + }
|
| + }
|
| + }, type + " Element.matches: " + n + " (with no refNodes): " + q);
|
| + }
|
| + }
|
| + }
|
| +}
|
|
|