Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: toolkit/components/places/tests/bookmarks/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
/**
* This test ensures that reinserting a folder within a transaction gives it
* the same GUID, and passes it to the observers.
*/
add_task(async function test_removeFolderTransaction_reinsert() {
let folder = await PlacesUtils.bookmarks.insert({
type: PlacesUtils.bookmarks.TYPE_FOLDER,
parentGuid: PlacesUtils.bookmarks.menuGuid,
title: "Test folder",
});
let fx = await PlacesUtils.bookmarks.insert({
parentGuid: folder.guid,
title: "Get Firefox!",
});
let tb = await PlacesUtils.bookmarks.insert({
parentGuid: folder.guid,
title: "Get Thunderbird!",
});
let notifications = [];
function checkNotifications(expected, message) {
deepEqual(notifications, expected, message);
notifications.length = 0;
}
let listener = events => {
for (let event of events) {
notifications.push([
event.type,
event.id,
event.parentId,
event.guid,
event.parentGuid,
]);
}
};
PlacesUtils.observers.addListener(
["bookmark-added", "bookmark-removed"],
listener
);
PlacesUtils.registerShutdownFunction(function () {
PlacesUtils.observers.removeListener(
["bookmark-added", "bookmark-removed"],
listener
);
});
let transaction = PlacesTransactions.Remove({ guid: folder.guid });
let folderId = await PlacesTestUtils.promiseItemId(folder.guid);
let fxId = await PlacesTestUtils.promiseItemId(fx.guid);
let tbId = await PlacesTestUtils.promiseItemId(tb.guid);
await transaction.transact();
let bookmarksMenuItemId = await PlacesTestUtils.promiseItemId(
PlacesUtils.bookmarks.menuGuid
);
checkNotifications(
[
["bookmark-removed", tbId, folderId, tb.guid, folder.guid],
["bookmark-removed", fxId, folderId, fx.guid, folder.guid],
[
"bookmark-removed",
folderId,
bookmarksMenuItemId,
folder.guid,
PlacesUtils.bookmarks.menuGuid,
],
],
"Executing transaction should remove folder and its descendants"
);
await PlacesTransactions.undo();
folderId = await PlacesTestUtils.promiseItemId(folder.guid);
fxId = await PlacesTestUtils.promiseItemId(fx.guid);
tbId = await PlacesTestUtils.promiseItemId(tb.guid);
checkNotifications(
[
[
"bookmark-added",
folderId,
bookmarksMenuItemId,
folder.guid,
PlacesUtils.bookmarks.menuGuid,
],
["bookmark-added", fxId, folderId, fx.guid, folder.guid],
["bookmark-added", tbId, folderId, tb.guid, folder.guid],
],
"Undo should reinsert folder with different id but same GUID"
);
await PlacesTransactions.redo();
checkNotifications(
[
["bookmark-removed", tbId, folderId, tb.guid, folder.guid],
["bookmark-removed", fxId, folderId, fx.guid, folder.guid],
[
"bookmark-removed",
folderId,
bookmarksMenuItemId,
folder.guid,
PlacesUtils.bookmarks.menuGuid,
],
],
"Redo should pass the GUID to observer"
);
});