summaryrefslogtreecommitdiffstats
path: root/browser/components/places/tests/browser/browser_bookmark_remove_tags.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/places/tests/browser/browser_bookmark_remove_tags.js')
-rw-r--r--browser/components/places/tests/browser/browser_bookmark_remove_tags.js256
1 files changed, 256 insertions, 0 deletions
diff --git a/browser/components/places/tests/browser/browser_bookmark_remove_tags.js b/browser/components/places/tests/browser/browser_bookmark_remove_tags.js
new file mode 100644
index 0000000000..ece5fdbce0
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_bookmark_remove_tags.js
@@ -0,0 +1,256 @@
+/**
+ * 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.");
+});