function check(aBrowser, aElementName, aBarred, aType) { return ContentTask.spawn(aBrowser, [aElementName, aBarred, aType], async function([aElementName, aBarred, aType]) { let e = content.document.createElement(aElementName); let contentElement = content.document.getElementById("content"); contentElement.appendChild(e); if (aType) { e.type = aType; } let tttp = Cc["@mozilla.org/embedcomp/default-tooltiptextprovider;1"] .getService(Ci.nsITooltipTextProvider); ok(!tttp.getNodeText(e, {}, {}), "No tooltip should be shown when the element is valid"); e.setCustomValidity("foo"); if (aBarred) { ok(!tttp.getNodeText(e, {}, {}), "No tooltip should be shown when the element is barred from constraint validation"); } else { ok(tttp.getNodeText(e, {}, {}), e.tagName + " A tooltip should be shown when the element isn't valid"); } e.setAttribute("title", ""); ok(!tttp.getNodeText(e, {}, {}), "No tooltip should be shown if the title attribute is set"); e.removeAttribute("title"); contentElement.setAttribute("novalidate", ""); ok(!tttp.getNodeText(e, {}, {}), "No tooltip should be shown if the novalidate attribute is set on the form owner"); contentElement.removeAttribute("novalidate"); e.remove(); }); } function todo_check(aBrowser, aElementName, aBarred) { return ContentTask.spawn(aBrowser, [aElementName, aBarred], async function([aElementName, aBarred]) { let e = content.document.createElement(aElementName); let contentElement = content.document.getElementById("content"); contentElement.appendChild(e); let caught = false; try { e.setCustomValidity("foo"); } catch (e) { caught = true; } todo(!caught, "setCustomValidity should exist for " + aElementName); e.remove(); }); } add_task(async function() { await BrowserTestUtils.withNewTab({ gBrowser, url: "data:text/html,
", }, async function(browser) { let testData = [ /* element name, barred */ [ "input", false, null], [ "textarea", false, null], [ "button", true, "button"], [ "button", false, "submit"], [ "select", false, null], [ "output", true, null], [ "fieldset", true, null], [ "object", true, null], ]; for (let data of testData) { await check(browser, data[0], data[1], data[2]); } let todo_testData = [ [ "keygen", "false" ], ]; for (let data of todo_testData) { await todo_check(browser, data[0], data[1]); } }); });