summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/popupNotifications/browser_popupNotification_selection_required.js
blob: 31463f5345ddeb723db5786cbfaa0a7c9011dffa (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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

function test() {
  waitForExplicitFinish();

  ok(PopupNotifications, "PopupNotifications object exists");
  ok(PopupNotifications.panel, "PopupNotifications panel exists");

  setup();
}

function promiseElementVisible(element) {
  // HTMLElement.offsetParent is null when the element is not visisble
  // (or if the element has |position: fixed|). See:
  // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
  return TestUtils.waitForCondition(
    () => element.offsetParent !== null,
    "Waiting for element to be visible"
  );
}

var gNotification;

var tests = [
  // Test that passing selection required prevents the button from clicking
  {
    id: "require_selection_check",
    run() {
      this.notifyObj = new BasicNotification(this.id);
      this.notifyObj.options.checkbox = {
        label: "This is a checkbox",
      };
      gNotification = showNotification(this.notifyObj);
    },
    async onShown(popup) {
      checkPopup(popup, this.notifyObj);
      let notification = popup.children[0];
      notification.setAttribute("invalidselection", true);
      await promiseElementVisible(notification.checkbox);
      EventUtils.synthesizeMouseAtCenter(notification.checkbox, {});
      ok(
        notification.button.disabled,
        "should be disabled when invalidselection"
      );
      notification.removeAttribute("invalidselection");
      EventUtils.synthesizeMouseAtCenter(notification.checkbox, {});
      ok(
        !notification.button.disabled,
        "should not be disabled when invalidselection is not present"
      );
      triggerMainCommand(popup);
    },
    onHidden() {},
  },
];