summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/test/browser_autocomplete_popup_consecutive-show.js
blob: 1af2df3a1fe287639ae97d93ab8fab7566a42251 (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// Test that calling `showPopup` multiple time does not lead to invalid state.

add_task(async function () {
  const AutocompletePopup = require("resource://devtools/client/shared/autocomplete-popup.js");

  info("Create an autocompletion popup");
  const { doc } = await createHost();
  const input = doc.createElement("input");
  doc.body.appendChild(input);

  const autocompleteOptions = {
    position: "top",
    autoSelect: true,
    useXulWrapper: true,
  };
  const popup = new AutocompletePopup(doc, autocompleteOptions);
  const items = [{ label: "a" }, { label: "b" }, { label: "c" }];
  popup.setItems(items);

  input.focus();

  let onAllEventsReceived = waitForNEvents(popup, "popup-opened", 3);
  // Note that the lack of `await` on those function calls are wanted.
  popup.openPopup(input, 0, 0, 0);
  popup.openPopup(input, 0, 0, 1);
  popup.openPopup(input, 0, 0, 2);
  await onAllEventsReceived;

  ok(popup.isOpen, "popup is open");
  is(
    popup.selectedIndex,
    2,
    "Selected index matches the one that was set last when calling openPopup"
  );

  onAllEventsReceived = waitForNEvents(popup, "popup-opened", 2);
  // Note that the lack of `await` on those function calls are wanted.
  popup.openPopup(input, 0, 0, 1);
  popup.openPopup(input);
  await onAllEventsReceived;

  ok(popup.isOpen, "popup is open");
  is(
    popup.selectedIndex,
    0,
    "First item is selected, as last call to openPopup did not specify an index and autoSelect is true"
  );

  const onPopupClose = popup.once("popup-closed");
  popup.hidePopup();
  await onPopupClose;
});