Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/**
* Tests that the bookmark tags can be removed from the bookmark star, toolbar and sidebar.
*/
"use strict";
const TEST_URL = "about:buildconfig";
const TEST_URI = Services.io.newURI(TEST_URL);
const TEST_TAG = "tag";
// 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);
}
// Cleanup.
registerCleanupFunction(async () => {
// Collapse the personal toolbar if needed.
if (wasCollapsed) {
await promiseSetToolbarVisibility(toolbar, false);
}
await PlacesUtils.bookmarks.eraseEverything();
});
});
add_task(async function test_remove_tags_from_BookmarkStar() {
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: TEST_URL,
title: TEST_URL,
});
PlacesUtils.tagging.tagURI(TEST_URI, ["tag1", "tag2", "tag3", "tag4"]);
let tab = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening: TEST_URL,
waitForStateStop: true,
});
registerCleanupFunction(async () => {
BrowserTestUtils.removeTab(tab);
});
StarUI._createPanelIfNeeded();
await clickBookmarkStar();
// Check if the "Edit This Bookmark" panel is open.
let bookmarkPanelTitle = document.getElementById("editBookmarkPanelTitle");
Assert.equal(
document.l10n.getAttributes(bookmarkPanelTitle).id,
"bookmarks-edit-bookmark",
"Bookmark panel title is correct."
);
let promiseTagsChange = PlacesTestUtils.waitForNotification(
"bookmark-tags-changed"
);
// Update the "tags" field.
fillBookmarkTextField("editBMPanel_tagsField", "tag1, tag2, tag3", window);
let tagspicker = document.getElementById("editBMPanel_tagsField");
await TestUtils.waitForCondition(
() => tagspicker.value === "tag1, tag2, tag3",
"Tags are correct after update."
);
let doneButton = document.getElementById("editBookmarkPanelDoneButton");
doneButton.click();
await promiseTagsChange;
let tags = PlacesUtils.tagging.getTagsForURI(TEST_URI);
Assert.deepEqual(
tags,
["tag1", "tag2", "tag3"],
"Should have updated the bookmark tags in the database."
);
});
add_task(async function test_remove_tags_from_Toolbar() {
let toolbarBookmark = await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: TEST_URL,
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) {
let tagspicker = dialogWin.document.getElementById(
"editBMPanel_tagsField"
);
Assert.equal(
tagspicker.value,
"tag1, tag2, tag3",
"Tags are correct before update."
);
let promiseTagsChange = PlacesTestUtils.waitForNotification(
"bookmark-tags-changed"
);
// Update the "tags" field.
fillBookmarkTextField(
"editBMPanel_tagsField",
"tag1, tag2",
dialogWin,
false
);
await TestUtils.waitForCondition(
() => tagspicker.value === "tag1, tag2",
"Tags are correct after update."
);
// Confirm and close the dialog.
EventUtils.synthesizeKey("VK_RETURN", {}, dialogWin);
await promiseTagsChange;
let tags = PlacesUtils.tagging.getTagsForURI(TEST_URI);
Assert.deepEqual(
tags,
["tag1", "tag2"],
"Should have updated the bookmark tags in the database."
);
}
);
});
add_task(async function test_remove_tags_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 tagspicker = dialogWin.document.getElementById(
"editBMPanel_tagsField"
);
Assert.equal(
tagspicker.value,
"tag1, tag2",
"Tags are correct before update."
);
let promiseTagsChange = PlacesTestUtils.waitForNotification(
"bookmark-tags-changed"
);
// Update the "tags" field.
fillBookmarkTextField(
"editBMPanel_tagsField",
"tag1",
dialogWin,
false
);
await TestUtils.waitForCondition(
() => tagspicker.value === "tag1",
"Tags are correct after update."
);
// Confirm and close the dialog.
EventUtils.synthesizeKey("VK_RETURN", {}, dialogWin);
await promiseTagsChange;
let tags = PlacesUtils.tagging.getTagsForURI(TEST_URI);
Assert.deepEqual(
tags,
["tag1"],
"Should have updated the bookmark tags in the database."
);
}
);
});
});
add_task(async function test_remove_tags_from_Library() {
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: TEST_URL,
title: TEST_URL,
});
PlacesUtils.tagging.tagURI(TEST_URI, [TEST_TAG]);
const getTags = () => PlacesUtils.tagging.getTagsForURI(TEST_URI);
// Open the Library and select the tag.
const library = await promiseLibrary("place:tag=" + TEST_TAG);
registerCleanupFunction(async function () {
await promiseLibraryClosed(library);
});
const contextMenu = library.document.getElementById("placesContext");
const contextMenuDeleteTag = library.document.getElementById(
"placesContext_removeTag"
);
let firstColumn = library.ContentTree.view.columns[0];
let firstBookmarkRect = library.ContentTree.view.getCoordsForCellItem(
0,
firstColumn,
"bm0"
);
EventUtils.synthesizeMouse(
library.ContentTree.view.body,
firstBookmarkRect.x,
firstBookmarkRect.y,
{ type: "contextmenu", button: 2 },
library
);
await BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
ok(getTags().includes(TEST_TAG), "Test tag exists before delete.");
contextMenu.activateItem(contextMenuDeleteTag, {});
await PlacesTestUtils.waitForNotification("bookmark-tags-changed");
await promiseLibraryClosed(library);
ok(
await PlacesUtils.bookmarks.fetch({ url: TEST_URL }),
"Bookmark still exists after removing tag."
);
ok(!getTags().includes(TEST_TAG), "Test tag is removed after delete.");
});