Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/**
* Tests that the title of a bookmark can be changed from the bookmark star, toolbar, sidebar, and library.
*/
"use strict";
const TEST_URL = "about:buildconfig";
const titleAfterFirstUpdate = "BookmarkStar title";
function getToolbarNodeForItemGuid(aItemGuid) {
var children = document.getElementById("PlacesToolbarItems").children;
for (let child of children) {
if (aItemGuid == child._placesNode.bookmarkGuid) {
return child;
}
}
return null;
}
// Setup.
add_setup(async function () {
let toolbar = document.getElementById("PersonalToolbar");
let wasCollapsed = toolbar.collapsed;
// Uncollapse the personal toolbar if needed.
if (wasCollapsed) {
await promiseSetToolbarVisibility(toolbar, true);
}
registerCleanupFunction(async () => {
// Collapse the personal toolbar if needed.
if (wasCollapsed) {
await promiseSetToolbarVisibility(toolbar, false);
}
await PlacesUtils.bookmarks.eraseEverything();
});
});
add_task(async function test_change_title_from_BookmarkStar() {
let originalBm = await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: TEST_URL,
title: "Before Edit",
});
const win = await BrowserTestUtils.openNewBrowserWindow();
let tab = await BrowserTestUtils.openNewForegroundTab({
gBrowser: win.gBrowser,
opening: TEST_URL,
waitForStateStop: true,
});
registerCleanupFunction(async () => {
BrowserTestUtils.removeTab(tab);
await BrowserTestUtils.closeWindow(win);
});
win.StarUI._createPanelIfNeeded();
let bookmarkPanel = win.document.getElementById("editBookmarkPanel");
let shownPromise = promisePopupShown(bookmarkPanel);
let bookmarkStar = win.BookmarkingUI.star;
bookmarkStar.click();
await shownPromise;
let bookmarkPanelTitle = win.document.getElementById(
"editBookmarkPanelTitle"
);
await BrowserTestUtils.waitForCondition(
() =>
bookmarkPanelTitle.textContent ===
gFluentStrings.formatValueSync("bookmarks-edit-bookmark"),
"Wait until the bookmark panel title will be changed expectedly."
);
Assert.ok(true, "Bookmark title is correct");
let promiseNotification = PlacesTestUtils.waitForNotification(
"bookmark-title-changed",
events => events.some(e => e.title === titleAfterFirstUpdate)
);
// Update the bookmark's title.
await fillBookmarkTextField(
"editBMPanel_namePicker",
titleAfterFirstUpdate,
win
);
let doneButton = win.document.getElementById("editBookmarkPanelDoneButton");
doneButton.click();
await promiseNotification;
let updatedBm = await PlacesUtils.bookmarks.fetch(originalBm.guid);
Assert.equal(
updatedBm.title,
titleAfterFirstUpdate,
"Should have updated the bookmark title in the database"
);
await PlacesUtils.bookmarks.remove(originalBm.guid);
});
add_task(async function test_change_title_from_Toolbar() {
let toolbarBookmark = await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: titleAfterFirstUpdate,
url: TEST_URL,
});
let toolbarNode = getToolbarNodeForItemGuid(toolbarBookmark.guid);
await withBookmarksDialog(
false,
async function openPropertiesDialog() {
let placesContext = document.getElementById("placesContext");
let promisePopup = BrowserTestUtils.waitForEvent(
placesContext,
"popupshown"
);
EventUtils.synthesizeMouseAtCenter(toolbarNode, {
button: 2,
type: "contextmenu",
});
await promisePopup;
let properties = document.getElementById(
"placesContext_show_bookmark:info"
);
placesContext.activateItem(properties, {});
},
async function test(dialogWin) {
// Ensure the dialog has initialized.
await TestUtils.waitForCondition(() => dialogWin.document.title);
let namepicker = dialogWin.document.getElementById(
"editBMPanel_namePicker"
);
let editBookmarkDialogTitle =
dialogWin.document.getElementById("titleText");
let bundle = dialogWin.document.getElementById("stringBundle");
Assert.equal(
bundle.getString("dialogTitleEditBookmark2"),
editBookmarkDialogTitle.textContent
);
Assert.equal(
namepicker.value,
titleAfterFirstUpdate,
"Name field is correct before update."
);
let promiseTitleChange = PlacesTestUtils.waitForNotification(
"bookmark-title-changed",
events => events.some(e => e.title === "Toolbar title")
);
// Update the bookmark's title.
fillBookmarkTextField(
"editBMPanel_namePicker",
"Toolbar title",
dialogWin,
false
);
// Confirm and close the dialog.
EventUtils.synthesizeKey("VK_RETURN", {}, dialogWin);
await promiseTitleChange;
let updatedBm = await PlacesUtils.bookmarks.fetch(toolbarBookmark.guid);
Assert.equal(
updatedBm.title,
"Toolbar title",
"Should have updated the bookmark title in the database"
);
}
);
});
add_task(async function test_change_title_from_Sidebar() {
let bookmarks = [];
await PlacesUtils.bookmarks.fetch({ url: TEST_URL }, bm =>
bookmarks.push(bm)
);
await withSidebarTree("bookmarks", async function (tree) {
tree.selectItems([bookmarks[0].guid]);
await withBookmarksDialog(
false,
function openPropertiesDialog() {
tree.controller.doCommand("placesCmd_show:info");
},
async function test(dialogWin) {
let namepicker = dialogWin.document.getElementById(
"editBMPanel_namePicker"
);
Assert.equal(
namepicker.value,
"Toolbar title",
"Name field is correct before update."
);
let promiseTitleChange = PlacesTestUtils.waitForNotification(
"bookmark-title-changed",
events => events.some(e => e.title === "Sidebar Title")
);
// Update the bookmark's title.
fillBookmarkTextField(
"editBMPanel_namePicker",
"Sidebar Title",
dialogWin,
false
);
// Confirm and close the dialog.
EventUtils.synthesizeKey("VK_RETURN", {}, dialogWin);
await promiseTitleChange;
// Get updated bookmarks, check the new title.
bookmarks = [];
await PlacesUtils.bookmarks.fetch({ url: TEST_URL }, bm =>
bookmarks.push(bm)
);
Assert.equal(
bookmarks[0].title,
"Sidebar Title",
"Should have updated the bookmark title in the database"
);
Assert.equal(bookmarks.length, 1, "One bookmark should exist");
}
);
});
});
add_task(async function test_change_title_from_Library() {
info("Open library and select the bookmark.");
const library = await promiseLibrary("BookmarksToolbar");
registerCleanupFunction(async function () {
await promiseLibraryClosed(library);
});
library.ContentTree.view.selectNode(
library.ContentTree.view.view.nodeForTreeIndex(0)
);
const newTitle = "Library";
const promiseTitleChange = PlacesTestUtils.waitForNotification(
"bookmark-title-changed",
events => events.some(e => e.title === newTitle)
);
info("Update the bookmark's title.");
fillBookmarkTextField("editBMPanel_namePicker", newTitle, library);
await promiseTitleChange;
info("The bookmark's title was updated.");
await promiseLibraryClosed(library);
});