summaryrefslogtreecommitdiffstats
path: root/browser/components/places/tests/browser/browser_bookmark_copy_folder_tree.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/places/tests/browser/browser_bookmark_copy_folder_tree.js')
-rw-r--r--browser/components/places/tests/browser/browser_bookmark_copy_folder_tree.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/browser/components/places/tests/browser/browser_bookmark_copy_folder_tree.js b/browser/components/places/tests/browser/browser_bookmark_copy_folder_tree.js
new file mode 100644
index 0000000000..71b947f7ac
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_bookmark_copy_folder_tree.js
@@ -0,0 +1,172 @@
+/* Any copyright is dedicated to the Public Domain.
+ * https://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function () {
+ let mainFolder = await PlacesUtils.bookmarks.insert({
+ title: "mainFolder",
+ type: PlacesUtils.bookmarks.TYPE_FOLDER,
+ parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+ });
+
+ registerCleanupFunction(async function () {
+ await PlacesUtils.bookmarks.eraseEverything();
+ });
+
+ await withSidebarTree("bookmarks", async function (tree) {
+ const selectedNodeComparator = {
+ equalTitle: itemNode => {
+ Assert.equal(
+ tree.selectedNode.title,
+ itemNode.title,
+ "Select expected title"
+ );
+ },
+ equalNode: itemNode => {
+ Assert.equal(
+ tree.selectedNode.bookmarkGuid,
+ itemNode.guid,
+ "Selected the expected node"
+ );
+ },
+ equalType: itemType => {
+ Assert.equal(tree.selectedNode.type, itemType, "Correct type");
+ },
+
+ equalChildCount: childrenAmount => {
+ Assert.equal(
+ tree.selectedNode.childCount,
+ childrenAmount,
+ `${childrenAmount} children`
+ );
+ },
+ };
+ let urlType = Ci.nsINavHistoryResultNode.RESULT_TYPE_URI;
+
+ info("Create tree of: folderA => subFolderA => 3 bookmarkItems");
+ await PlacesUtils.bookmarks.insertTree({
+ guid: mainFolder.guid,
+ children: [
+ {
+ title: "FolderA",
+ type: PlacesUtils.bookmarks.TYPE_FOLDER,
+ children: [
+ {
+ title: "subFolderA",
+ type: PlacesUtils.bookmarks.TYPE_FOLDER,
+ children: [
+ {
+ title: "firstBM",
+ url: "http://example.com/1",
+ },
+ {
+ title: "secondBM",
+ url: "http://example.com/2",
+ },
+ {
+ title: "thirdBM",
+ url: "http://example.com/3",
+ },
+ ],
+ },
+ ],
+ },
+ ],
+ });
+
+ info("Sanity check folderA, subFolderA, bookmarkItems");
+ tree.selectItems([mainFolder.guid]);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+ selectedNodeComparator.equalTitle(mainFolder);
+ selectedNodeComparator.equalChildCount(1);
+
+ let sourceFolder = tree.selectedNode.getChild(0);
+ tree.selectNode(sourceFolder);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+ selectedNodeComparator.equalTitle(sourceFolder);
+ selectedNodeComparator.equalChildCount(1);
+
+ let subSourceFolder = tree.selectedNode.getChild(0);
+ tree.selectNode(subSourceFolder);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+ selectedNodeComparator.equalTitle(subSourceFolder);
+ selectedNodeComparator.equalChildCount(3);
+
+ let bm_2 = tree.selectedNode.getChild(1);
+ tree.selectNode(bm_2);
+ selectedNodeComparator.equalTitle(bm_2);
+
+ info(
+ "Copy folder tree from sourceFolder (folderA, subFolderA, bookmarkItems)"
+ );
+ tree.selectNode(sourceFolder);
+ await promiseClipboard(() => {
+ tree.controller.copy();
+ }, PlacesUtils.TYPE_X_MOZ_PLACE);
+
+ tree.selectItems([mainFolder.guid]);
+
+ info("Paste copy of folderA");
+ await tree.controller.paste();
+
+ info("Sanity check copy/paste operation - mainFolder has 2 children");
+ tree.selectItems([mainFolder.guid]);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+ selectedNodeComparator.equalChildCount(2);
+
+ info("Sanity check copy of folderA");
+ let copySourceFolder = tree.selectedNode.getChild(1);
+ tree.selectNode(copySourceFolder);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+ selectedNodeComparator.equalTitle(copySourceFolder);
+ selectedNodeComparator.equalChildCount(1);
+
+ info("Sanity check copy subFolderA");
+ let copySubSourceFolder = tree.selectedNode.getChild(0);
+ tree.selectNode(copySubSourceFolder);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+ selectedNodeComparator.equalTitle(copySubSourceFolder);
+ selectedNodeComparator.equalChildCount(3);
+
+ info("Sanity check copy BookmarkItem");
+ let copyBm_1 = tree.selectedNode.getChild(0);
+ tree.selectNode(copyBm_1);
+ selectedNodeComparator.equalTitle(copyBm_1);
+
+ info("Undo copy operation");
+ await PlacesTransactions.undo();
+ tree.selectItems([mainFolder.guid]);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+
+ info("Sanity check undo operation - mainFolder has 1 child");
+ selectedNodeComparator.equalChildCount(1);
+
+ info("Redo copy operation");
+ await PlacesTransactions.redo();
+ tree.selectItems([mainFolder.guid]);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+
+ info("Sanity check redo operation - mainFolder has 2 children");
+ selectedNodeComparator.equalChildCount(2);
+
+ info("Sanity check copy of folderA");
+ copySourceFolder = tree.selectedNode.getChild(1);
+ tree.selectNode(copySourceFolder);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+ selectedNodeComparator.equalChildCount(1);
+
+ info("Sanity check copy subFolderA");
+ copySubSourceFolder = tree.selectedNode.getChild(0);
+ tree.selectNode(copySubSourceFolder);
+ PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+ selectedNodeComparator.equalTitle(copySubSourceFolder);
+ selectedNodeComparator.equalChildCount(3);
+
+ info("Sanity check copy BookmarkItem");
+ let copyBm_2 = tree.selectedNode.getChild(1);
+ tree.selectNode(copyBm_2);
+ selectedNodeComparator.equalTitle(copyBm_2);
+ selectedNodeComparator.equalType(urlType);
+ });
+});