summaryrefslogtreecommitdiffstats
path: root/browser/components/places/tests/browser/browser_bookmarkProperties_newFolder.js
blob: 23eec11e1dbbfd98a4f8413d5c7bfa6f6431d036 (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

const TEST_URL = "about:robots";
StarUI._createPanelIfNeeded();
const bookmarkPanel = document.getElementById("editBookmarkPanel");
let folders;

add_setup(async function () {
  await PlacesUtils.bookmarks.eraseEverything();

  bookmarkPanel.setAttribute("animate", false);

  let oldTimeout = StarUI._autoCloseTimeout;
  // Make the timeout something big, so it doesn't iteract badly with tests.
  StarUI._autoCloseTimeout = 6000000;

  let tab = await BrowserTestUtils.openNewForegroundTab({
    gBrowser,
    opening: TEST_URL,
    waitForStateStop: true,
  });

  registerCleanupFunction(async () => {
    StarUI._autoCloseTimeout = oldTimeout;
    BrowserTestUtils.removeTab(tab);
    bookmarkPanel.removeAttribute("animate");
    await PlacesUtils.bookmarks.eraseEverything();
  });
});

add_task(async function test_newFolder() {
  let newBookmarkObserver = PlacesTestUtils.waitForNotification(
    "bookmark-added",
    events => events.some(({ url }) => url === TEST_URL)
  );
  await clickBookmarkStar();

  // Open folder selector.
  document.getElementById("editBMPanel_foldersExpander").click();

  let folderTree = document.getElementById("editBMPanel_folderTree");

  // Create new folder.
  let newFolderButton = document.getElementById("editBMPanel_newFolderButton");
  newFolderButton.click();

  let newFolderGuid;
  let newFolderObserver = PlacesTestUtils.waitForNotification(
    "bookmark-added",
    events => {
      for (let { guid, itemType } of events) {
        newFolderGuid = guid;
        if (itemType == PlacesUtils.bookmarks.TYPE_FOLDER) {
          return true;
        }
      }
      return false;
    }
  );

  let menulist = document.getElementById("editBMPanel_folderMenuList");

  await newFolderObserver;

  // Wait for the folder to be created and for editing to start.
  await TestUtils.waitForCondition(
    () => folderTree.hasAttribute("editing"),
    "Should be in edit mode for the new folder"
  );

  Assert.equal(
    menulist.selectedItem.label,
    newFolderButton.label,
    "Should have the new folder selected by default"
  );

  let renameObserver = PlacesTestUtils.waitForNotification(
    "bookmark-title-changed",
    events => events.some(e => e.title === "f")
  );

  // Enter a new name.
  EventUtils.synthesizeKey("f", {}, window);
  EventUtils.synthesizeKey("VK_RETURN", {}, window);

  await renameObserver;

  await TestUtils.waitForCondition(
    () => !folderTree.hasAttribute("editing"),
    "Should have stopped editing the new folder"
  );

  Assert.equal(
    menulist.selectedItem.label,
    "f",
    "Should have the new folder title"
  );

  await hideBookmarksPanel();
  await newBookmarkObserver;
  let bookmark = await PlacesUtils.bookmarks.fetch({ url: TEST_URL });

  Assert.equal(
    bookmark.parentGuid,
    newFolderGuid,
    "The bookmark should be parented by the new folder"
  );
});