summaryrefslogtreecommitdiffstats
path: root/toolkit/components/tooltiptext/tests/browser_bug581947.js
blob: 6e5eb9ea14fdb16c5e38e90609d104b4cb7f3b9b (plain)
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, 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,<!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]);
      }
    }
  );
});