summaryrefslogtreecommitdiffstats
path: root/browser/components/places/tests/browser/browser_library_commands.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/places/tests/browser/browser_library_commands.js')
-rw-r--r--browser/components/places/tests/browser/browser_library_commands.js335
1 files changed, 335 insertions, 0 deletions
diff --git a/browser/components/places/tests/browser/browser_library_commands.js b/browser/components/places/tests/browser/browser_library_commands.js
new file mode 100644
index 0000000000..254c9503c2
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_library_commands.js
@@ -0,0 +1,335 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test enabled commands in the left pane folder of the Library.
+ */
+
+const TEST_URI = NetUtil.newURI("http://www.mozilla.org/");
+
+registerCleanupFunction(async function () {
+ await PlacesUtils.bookmarks.eraseEverything();
+ await PlacesUtils.history.clear();
+});
+
+add_task(async function test_date_container() {
+ let library = await promiseLibrary();
+ info("Ensure date containers under History cannot be cut but can be deleted");
+
+ await PlacesTestUtils.addVisits(TEST_URI);
+
+ // Select and open the left pane "History" query.
+ let PO = library.PlacesOrganizer;
+
+ PO.selectLeftPaneBuiltIn("History");
+ Assert.notEqual(
+ PO._places.selectedNode,
+ null,
+ "We correctly selected History"
+ );
+
+ // Check that both delete and cut commands are disabled, cause this is
+ // a child of the left pane folder.
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_copy"),
+ "Copy command is enabled"
+ );
+ Assert.ok(
+ !PO._places.controller.isCommandEnabled("cmd_cut"),
+ "Cut command is disabled"
+ );
+ Assert.ok(
+ !PO._places.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is disabled"
+ );
+ let historyNode = PlacesUtils.asContainer(PO._places.selectedNode);
+ historyNode.containerOpen = true;
+
+ // Check that we have a child container. It is "Today" container.
+ Assert.equal(historyNode.childCount, 1, "History node has one child");
+ let todayNode = historyNode.getChild(0);
+ let todayNodeExpectedTitle = PlacesUtils.getString("finduri-AgeInDays-is-0");
+ Assert.equal(
+ todayNode.title,
+ todayNodeExpectedTitle,
+ "History child is the expected container"
+ );
+
+ // Select "Today" container.
+ PO._places.selectNode(todayNode);
+ Assert.equal(
+ PO._places.selectedNode,
+ todayNode,
+ "We correctly selected Today container"
+ );
+ // Check that delete command is enabled but cut command is disabled, cause
+ // this is an history item.
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_copy"),
+ "Copy command is enabled"
+ );
+ Assert.ok(
+ !PO._places.controller.isCommandEnabled("cmd_cut"),
+ "Cut command is disabled"
+ );
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is enabled"
+ );
+
+ // Execute the delete command and check visit has been removed.
+ const promiseURIRemoved = PlacesTestUtils.waitForNotification(
+ "page-removed",
+ events => events[0].url === TEST_URI.spec
+ );
+ PO._places.controller.doCommand("cmd_delete");
+ const removeEvents = await promiseURIRemoved;
+ Assert.ok(
+ removeEvents[0].isRemovedFromStore,
+ "isRemovedFromStore should be true"
+ );
+
+ // Test live update of "History" query.
+ Assert.equal(historyNode.childCount, 0, "History node has no more children");
+
+ historyNode.containerOpen = false;
+
+ Assert.ok(
+ !(await PlacesUtils.history.hasVisits(TEST_URI)),
+ "Visit has been removed"
+ );
+
+ library.close();
+});
+
+add_task(async function test_query_on_toolbar() {
+ let library = await promiseLibrary();
+ info("Ensure queries can be cut or deleted");
+
+ // Select and open the left pane "Bookmarks Toolbar" folder.
+ let PO = library.PlacesOrganizer;
+
+ PO.selectLeftPaneBuiltIn("BookmarksToolbar");
+ Assert.notEqual(PO._places.selectedNode, null, "We have a valid selection");
+ Assert.equal(
+ PlacesUtils.getConcreteItemGuid(PO._places.selectedNode),
+ PlacesUtils.bookmarks.toolbarGuid,
+ "We have correctly selected bookmarks toolbar node."
+ );
+
+ // Check that both cut and delete commands are disabled, cause this is a child
+ // of the All Bookmarks special query.
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_copy"),
+ "Copy command is enabled"
+ );
+ Assert.ok(
+ !PO._places.controller.isCommandEnabled("cmd_cut"),
+ "Cut command is disabled"
+ );
+ Assert.ok(
+ !PO._places.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is disabled"
+ );
+
+ let toolbarNode = PlacesUtils.asContainer(PO._places.selectedNode);
+ toolbarNode.containerOpen = true;
+
+ // Add an History query to the toolbar.
+ let query = await PlacesUtils.bookmarks.insert({
+ type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
+ url: "place:sort=4",
+ title: "special_query",
+ parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+ index: 0,
+ });
+
+ // Get first child and check it is the just inserted query.
+ Assert.greater(toolbarNode.childCount, 0, "Toolbar node has children");
+ let queryNode = toolbarNode.getChild(0);
+ Assert.equal(
+ queryNode.title,
+ "special_query",
+ "Query node is correctly selected"
+ );
+
+ // Select query node.
+ PO._places.selectNode(queryNode);
+ Assert.equal(
+ PO._places.selectedNode,
+ queryNode,
+ "We correctly selected query node"
+ );
+
+ // Check that both cut and delete commands are enabled.
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_copy"),
+ "Copy command is enabled"
+ );
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_cut"),
+ "Cut command is enabled"
+ );
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is enabled"
+ );
+
+ // Execute the delete command and check bookmark has been removed.
+ let promiseItemRemoved = PlacesTestUtils.waitForNotification(
+ "bookmark-removed",
+ events => events.some(event => query.guid == event.guid)
+ );
+ PO._places.controller.doCommand("cmd_delete");
+ await promiseItemRemoved;
+
+ Assert.equal(
+ await PlacesUtils.bookmarks.fetch(query.guid),
+ null,
+ "Query node bookmark has been correctly removed"
+ );
+
+ toolbarNode.containerOpen = false;
+
+ library.close();
+});
+
+add_task(async function test_search_contents() {
+ await PlacesUtils.bookmarks.insert({
+ type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
+ url: "http://example.com/",
+ title: "example page",
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ index: 0,
+ });
+
+ let library = await promiseLibrary();
+ info("Ensure query contents can be cut or deleted");
+
+ // Select and open the left pane "Bookmarks Toolbar" folder.
+ let PO = library.PlacesOrganizer;
+
+ PO.selectLeftPaneBuiltIn("BookmarksToolbar");
+ Assert.notEqual(PO._places.selectedNode, null, "We have a valid selection");
+ Assert.equal(
+ PlacesUtils.getConcreteItemGuid(PO._places.selectedNode),
+ PlacesUtils.bookmarks.toolbarGuid,
+ "We have correctly selected bookmarks toolbar node."
+ );
+
+ let searchBox = library.document.getElementById("searchFilter");
+ searchBox.value = "example";
+ library.PlacesSearchBox.search(searchBox.value);
+
+ let bookmarkNode = library.ContentTree.view.selectedNode;
+ Assert.equal(
+ bookmarkNode.uri,
+ "http://example.com/",
+ "Found the expected bookmark"
+ );
+
+ // Check that both cut and delete commands are enabled.
+ Assert.ok(
+ library.ContentTree.view.controller.isCommandEnabled("cmd_copy"),
+ "Copy command is enabled"
+ );
+ Assert.ok(
+ library.ContentTree.view.controller.isCommandEnabled("cmd_cut"),
+ "Cut command is enabled"
+ );
+ Assert.ok(
+ library.ContentTree.view.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is enabled"
+ );
+
+ library.close();
+});
+
+add_task(async function test_tags() {
+ await PlacesUtils.bookmarks.insert({
+ type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
+ url: "http://example.com/",
+ title: "example page",
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ index: 0,
+ });
+ PlacesUtils.tagging.tagURI(NetUtil.newURI("http://example.com/"), ["test"]);
+
+ let library = await promiseLibrary();
+ info("Ensure query contents can be cut or deleted");
+
+ // Select and open the left pane "Bookmarks Toolbar" folder.
+ let PO = library.PlacesOrganizer;
+
+ PO.selectLeftPaneBuiltIn("Tags");
+ let tagsNode = PO._places.selectedNode;
+ Assert.notEqual(tagsNode, null, "We have a valid selection");
+ let tagsTitle = PlacesUtils.getString("TagsFolderTitle");
+ Assert.equal(tagsNode.title, tagsTitle, "Tags has been properly selected");
+
+ // Check that both cut and delete commands are disabled.
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_copy"),
+ "Copy command is enabled"
+ );
+ Assert.ok(
+ !PO._places.controller.isCommandEnabled("cmd_cut"),
+ "Cut command is disabled"
+ );
+ Assert.ok(
+ !PO._places.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is disabled"
+ );
+
+ // Now select the tag.
+ PlacesUtils.asContainer(tagsNode).containerOpen = true;
+ let tag = tagsNode.getChild(0);
+ PO._places.selectNode(tag);
+ Assert.equal(
+ PO._places.selectedNode.title,
+ "test",
+ "The created tag has been properly selected"
+ );
+
+ // Check that cut is disabled but delete is enabled.
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_copy"),
+ "Copy command is enabled"
+ );
+ Assert.ok(
+ !PO._places.controller.isCommandEnabled("cmd_cut"),
+ "Cut command is disabled"
+ );
+ Assert.ok(
+ PO._places.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is enabled"
+ );
+
+ let bookmarkNode = library.ContentTree.view.selectedNode;
+ Assert.equal(
+ bookmarkNode.uri,
+ "http://example.com/",
+ "Found the expected bookmark"
+ );
+
+ // Check that both cut and delete commands are enabled.
+ Assert.ok(
+ library.ContentTree.view.controller.isCommandEnabled("cmd_copy"),
+ "Copy command is enabled"
+ );
+ Assert.ok(
+ !library.ContentTree.view.controller.isCommandEnabled("cmd_cut"),
+ "Cut command is disabled"
+ );
+ Assert.ok(
+ library.ContentTree.view.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is enabled"
+ );
+
+ tagsNode.containerOpen = false;
+
+ library.close();
+});