Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"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",
},
{
title: "secondBM",
},
{
title: "thirdBM",
},
],
},
],
},
],
});
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);
});
});