summaryrefslogtreecommitdiffstats
path: root/browser/components/uitour/test/browser_UITour2.js
blob: d911a6142dced8085d3da6d4eb4d5d45fd829e25 (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

var gTestTab;
var gContentAPI;

function test() {
  UITourTest();
}

var tests = [
  function test_info_addons_auto_open_close(done) {
    let popup = document.getElementById("UITourTooltip");
    gContentAPI.showInfo("addons", "Addons", "Let's get addons!");

    let shownPromise = promisePanelShown(window);
    shownPromise.then(() => {
      UITour.getTarget(window, "addons").then(addonsTarget => {
        waitForPopupAtAnchor(
          popup,
          addonsTarget.node,
          function checkPanelIsOpen() {
            isnot(
              PanelUI.panel.state,
              "closed",
              "Panel should have opened before the popup anchored"
            );
            ok(
              PanelUI.panel.hasAttribute("noautohide"),
              "@noautohide on the menu panel should have been set"
            );

            // Move the info outside which should close the app menu.
            gContentAPI.showInfo("appMenu", "Open Me", "You know you want to");
            UITour.getTarget(window, "appMenu").then(target => {
              waitForPopupAtAnchor(
                popup,
                target.node,
                function checkPanelIsClosed() {
                  isnot(
                    PanelUI.panel.state,
                    "open",
                    "Panel should have closed after the info moved elsewhere."
                  );
                  ok(
                    !PanelUI.panel.hasAttribute("noautohide"),
                    "@noautohide on the menu panel should have been cleaned up on close"
                  );
                  done();
                },
                "Info should move to the appMenu button"
              );
            });
          },
          "Info panel should be anchored to the addons button"
        );
      });
    });
  },
  function test_info_addons_manual_open_close(done) {
    let popup = document.getElementById("UITourTooltip");
    // Manually open the app menu then show an info panel there. The menu should remain open.
    let shownPromise = promisePanelShown(window);
    gContentAPI.showMenu("appMenu");
    shownPromise
      .then(() => {
        isnot(PanelUI.panel.state, "closed", "Panel should have opened");
        ok(
          PanelUI.panel.hasAttribute("noautohide"),
          "@noautohide on the menu panel should have been set"
        );
        gContentAPI.showInfo("addons", "Addons", "Let's get addons!");

        UITour.getTarget(window, "addons").then(customizeTarget => {
          waitForPopupAtAnchor(
            popup,
            customizeTarget.node,
            function () {
              isnot(
                PanelUI.panel.state,
                "closed",
                "Panel should still be open"
              );
              ok(
                PanelUI.panel.hasAttribute("noautohide"),
                "@noautohide on the menu panel should still be set"
              );

              // Move the info outside which shouldn't close the app menu since it was manually opened.
              gContentAPI.showInfo(
                "appMenu",
                "Open Me",
                "You know you want to"
              );
              UITour.getTarget(window, "appMenu").then(target => {
                waitForPopupAtAnchor(
                  popup,
                  target.node,
                  function () {
                    isnot(
                      PanelUI.panel.state,
                      "closed",
                      "Menu should remain open since UITour didn't open it in the first place"
                    );
                    waitForElementToBeHidden(window.PanelUI.panel, () => {
                      ok(
                        !PanelUI.panel.hasAttribute("noautohide"),
                        "@noautohide on the menu panel should have been cleaned up on close"
                      );
                      done();
                    });
                    gContentAPI.hideMenu("appMenu");
                  },
                  "Info should move to the appMenu button"
                );
              });
            },
            "Info should be shown after showInfo() for fixed menu panel items"
          );
        });
      })
      .catch(console.error);
  },
  taskify(async function test_bookmarks_menu() {
    CustomizableUI.addWidgetToArea(
      "bookmarks-menu-button",
      CustomizableUI.AREA_NAVBAR,
      0
    );
    registerCleanupFunction(() =>
      CustomizableUI.removeWidgetFromArea("bookmarks-menu-button")
    );

    let bookmarksMenuButton = document.getElementById("bookmarks-menu-button");

    is(bookmarksMenuButton.open, false, "Menu should initially be closed");
    gContentAPI.showMenu("bookmarks");

    await waitForConditionPromise(() => {
      return bookmarksMenuButton.open;
    }, "Menu should be visible after showMenu()");

    gContentAPI.hideMenu("bookmarks");
    await waitForConditionPromise(() => {
      return !bookmarksMenuButton.open;
    }, "Menu should be hidden after hideMenu()");
  }),
];