1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
function check(aBrowser, aElementName, aBarred, aType) {
return SpecialPowers.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 SpecialPowers.spawn(
aBrowser,
[[aElementName, aBarred]],
async function ([aElementName]) {
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,<!DOCTYPE html><html><body><form id='content'></form></body></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]);
}
}
);
});
|