Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
const { sinon } = ChromeUtils.importESModule(
);
const sandbox = sinon.createSandbox();
registerCleanupFunction(async function () {
sandbox.restore();
await PlacesUtils.bookmarks.eraseEverything();
await PlacesUtils.history.clear();
});
let bookmarks; // Bookmarks added via insertTree.
add_setup(async function () {
bookmarks = await PlacesUtils.bookmarks.insertTree({
guid: PlacesUtils.bookmarks.unfiledGuid,
children: [
{
title: "bm1",
},
{
title: "bm2",
},
],
});
// Undo is called asynchronously - and not waited for. Since we're not
// expecting undo to be called, we can only tell this by stubbing it.
sandbox.stub(PlacesTransactions, "undo").returns(Promise.resolve());
});
// Tests for bug 1391393 - Ensures that if the user cancels the bookmark properties
// dialog without having done any changes, then no undo is called.
add_task(async function test_cancel_with_no_changes() {
await withSidebarTree("bookmarks", async tree => {
tree.selectItems([bookmarks[0].guid]);
// Delete the bookmark to put something in the undo history.
// Rather than calling cmd_delete, we call the remove directly, so that we
// can await on it finishing, and be guaranteed that there's something
// in the history.
await tree.controller.remove("Remove Selection");
tree.selectItems([bookmarks[1].guid]);
// Now open the bookmarks dialog and cancel it.
await withBookmarksDialog(
true,
function openDialog() {
tree.controller.doCommand("placesCmd_show:info");
},
async function test(dialogWin) {
let acceptButton = dialogWin.document
.getElementById("bookmarkpropertiesdialog")
.getButton("accept");
await TestUtils.waitForCondition(
() => !acceptButton.disabled,
"The accept button should be enabled"
);
}
);
// Check the bookmark is still removed.
Assert.ok(
!(await PlacesUtils.bookmarks.fetch(bookmarks[0].guid)),
"The originally removed bookmark should not exist."
);
Assert.ok(
await PlacesUtils.bookmarks.fetch(bookmarks[1].guid),
"The second bookmark should still exist"
);
Assert.ok(
PlacesTransactions.undo.notCalled,
"undo should not have been called"
);
});
});
add_task(async function test_cancel_with_changes() {
await withSidebarTree("bookmarks", async tree => {
tree.selectItems([bookmarks[1].guid]);
// Now open the bookmarks dialog and cancel it.
await withBookmarksDialog(
true,
function openDialog() {
tree.controller.doCommand("placesCmd_show:info");
},
async function test(dialogWin) {
let acceptButton = dialogWin.document
.getElementById("bookmarkpropertiesdialog")
.getButton("accept");
await TestUtils.waitForCondition(
() => !acceptButton.disabled,
"EditBookmark: The accept button should be enabled"
);
let namePicker = dialogWin.document.getElementById(
"editBMPanel_namePicker"
);
fillBookmarkTextField("editBMPanel_namePicker", "new_n", dialogWin);
// Ensure that value in field has changed
Assert.equal(
namePicker.value,
"new_n",
"EditBookmark: The title is the expected one."
);
}
);
let oldBookmark = await PlacesUtils.bookmarks.fetch(bookmarks[1].guid);
Assert.equal(
oldBookmark.title,
"bm2",
"EditBookmark: The title hasn't been changed"
);
});
});