mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-20 03:13:09 +09:00
529 lines
11 KiB
JavaScript
529 lines
11 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
_("Making sure after processing incoming bookmarks, they show up in the right order");
|
|
Cu.import("resource://gre/modules/PlacesUtils.jsm");
|
|
Cu.import("resource://gre/modules/Task.jsm");
|
|
Cu.import("resource://services-sync/engines/bookmarks.js");
|
|
Cu.import("resource://services-sync/service.js");
|
|
Cu.import("resource://services-sync/util.js");
|
|
|
|
var check = Task.async(function* (expected, message) {
|
|
let root = yield PlacesUtils.promiseBookmarksTree();
|
|
|
|
let bookmarks = (function mapTree(children) {
|
|
return children.map(child => {
|
|
let result = {
|
|
guid: child.guid,
|
|
index: child.index,
|
|
};
|
|
if (child.children) {
|
|
result.children = mapTree(child.children);
|
|
}
|
|
if (child.annos) {
|
|
let orphanAnno = child.annos.find(
|
|
anno => anno.name == "sync/parent");
|
|
if (orphanAnno) {
|
|
result.requestedParent = orphanAnno.value;
|
|
}
|
|
}
|
|
return result;
|
|
});
|
|
}(root.children));
|
|
|
|
_("Checking if the bookmark structure is", JSON.stringify(expected));
|
|
_("Got bookmarks:", JSON.stringify(bookmarks));
|
|
deepEqual(bookmarks, expected);
|
|
});
|
|
|
|
add_task(function* test_bookmark_order() {
|
|
let store = new BookmarksEngine(Service)._store;
|
|
initTestLogging("Trace");
|
|
|
|
_("Starting with a clean slate of no bookmarks");
|
|
store.wipe();
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
// Index 2 is the tags root. (Root indices depend on the order of the
|
|
// `CreateRoot` calls in `Database::CreateBookmarkRoots`).
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "clean slate");
|
|
|
|
function bookmark(name, parent) {
|
|
let bookmark = new Bookmark("http://weave.server/my-bookmark");
|
|
bookmark.id = name;
|
|
bookmark.title = name;
|
|
bookmark.bmkUri = "http://uri/";
|
|
bookmark.parentid = parent || "unfiled";
|
|
bookmark.tags = [];
|
|
return bookmark;
|
|
}
|
|
|
|
function folder(name, parent, children) {
|
|
let folder = new BookmarkFolder("http://weave.server/my-bookmark-folder");
|
|
folder.id = name;
|
|
folder.title = name;
|
|
folder.parentid = parent || "unfiled";
|
|
folder.children = children;
|
|
return folder;
|
|
}
|
|
|
|
function apply(record) {
|
|
store._childrenToOrder = {};
|
|
store.applyIncoming(record);
|
|
store._orderChildren();
|
|
delete store._childrenToOrder;
|
|
}
|
|
let id10 = "10_aaaaaaaaa";
|
|
_("basic add first bookmark");
|
|
apply(bookmark(id10, ""));
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "basic add first bookmark");
|
|
let id20 = "20_aaaaaaaaa";
|
|
_("basic append behind 10");
|
|
apply(bookmark(id20, ""));
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id20,
|
|
index: 1,
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "basic append behind 10");
|
|
|
|
let id31 = "31_aaaaaaaaa";
|
|
let id30 = "f30_aaaaaaaa";
|
|
_("basic create in folder");
|
|
apply(bookmark(id31, id30));
|
|
let f30 = folder(id30, "", [id31]);
|
|
apply(f30);
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id20,
|
|
index: 1,
|
|
}, {
|
|
guid: id30,
|
|
index: 2,
|
|
children: [{
|
|
guid: id31,
|
|
index: 0,
|
|
}],
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "basic create in folder");
|
|
|
|
let id41 = "41_aaaaaaaaa";
|
|
let id40 = "f40_aaaaaaaa";
|
|
_("insert missing parent -> append to unfiled");
|
|
apply(bookmark(id41, id40));
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id20,
|
|
index: 1,
|
|
}, {
|
|
guid: id30,
|
|
index: 2,
|
|
children: [{
|
|
guid: id31,
|
|
index: 0,
|
|
}],
|
|
}, {
|
|
guid: id41,
|
|
index: 3,
|
|
requestedParent: id40,
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "insert missing parent -> append to unfiled");
|
|
|
|
let id42 = "42_aaaaaaaaa";
|
|
|
|
_("insert another missing parent -> append");
|
|
apply(bookmark(id42, id40));
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id20,
|
|
index: 1,
|
|
}, {
|
|
guid: id30,
|
|
index: 2,
|
|
children: [{
|
|
guid: id31,
|
|
index: 0,
|
|
}],
|
|
}, {
|
|
guid: id41,
|
|
index: 3,
|
|
requestedParent: id40,
|
|
}, {
|
|
guid: id42,
|
|
index: 4,
|
|
requestedParent: id40,
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "insert another missing parent -> append");
|
|
|
|
_("insert folder -> move children and followers");
|
|
let f40 = folder(id40, "", [id41, id42]);
|
|
apply(f40);
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id20,
|
|
index: 1,
|
|
}, {
|
|
guid: id30,
|
|
index: 2,
|
|
children: [{
|
|
guid: id31,
|
|
index: 0,
|
|
}],
|
|
}, {
|
|
guid: id40,
|
|
index: 3,
|
|
children: [{
|
|
guid: id41,
|
|
index: 0,
|
|
}, {
|
|
guid: id42,
|
|
index: 1,
|
|
}]
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "insert folder -> move children and followers");
|
|
|
|
_("Moving 41 behind 42 -> update f40");
|
|
f40.children = [id42, id41];
|
|
apply(f40);
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id20,
|
|
index: 1,
|
|
}, {
|
|
guid: id30,
|
|
index: 2,
|
|
children: [{
|
|
guid: id31,
|
|
index: 0,
|
|
}],
|
|
}, {
|
|
guid: id40,
|
|
index: 3,
|
|
children: [{
|
|
guid: id42,
|
|
index: 0,
|
|
}, {
|
|
guid: id41,
|
|
index: 1,
|
|
}]
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "Moving 41 behind 42 -> update f40");
|
|
|
|
_("Moving 10 back to front -> update 10, 20");
|
|
f40.children = [id41, id42];
|
|
apply(f40);
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id20,
|
|
index: 1,
|
|
}, {
|
|
guid: id30,
|
|
index: 2,
|
|
children: [{
|
|
guid: id31,
|
|
index: 0,
|
|
}],
|
|
}, {
|
|
guid: id40,
|
|
index: 3,
|
|
children: [{
|
|
guid: id41,
|
|
index: 0,
|
|
}, {
|
|
guid: id42,
|
|
index: 1,
|
|
}]
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "Moving 10 back to front -> update 10, 20");
|
|
|
|
_("Moving 20 behind 42 in f40 -> update 50");
|
|
apply(bookmark(id20, id40));
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id30,
|
|
index: 1,
|
|
children: [{
|
|
guid: id31,
|
|
index: 0,
|
|
}],
|
|
}, {
|
|
guid: id40,
|
|
index: 2,
|
|
children: [{
|
|
guid: id41,
|
|
index: 0,
|
|
}, {
|
|
guid: id42,
|
|
index: 1,
|
|
}, {
|
|
guid: id20,
|
|
index: 2,
|
|
}]
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "Moving 20 behind 42 in f40 -> update 50");
|
|
|
|
_("Moving 10 in front of 31 in f30 -> update 10, f30");
|
|
apply(bookmark(id10, id30));
|
|
f30.children = [id10, id31];
|
|
apply(f30);
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id30,
|
|
index: 0,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id31,
|
|
index: 1,
|
|
}],
|
|
}, {
|
|
guid: id40,
|
|
index: 1,
|
|
children: [{
|
|
guid: id41,
|
|
index: 0,
|
|
}, {
|
|
guid: id42,
|
|
index: 1,
|
|
}, {
|
|
guid: id20,
|
|
index: 2,
|
|
}]
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "Moving 10 in front of 31 in f30 -> update 10, f30");
|
|
|
|
_("Moving 20 from f40 to f30 -> update 20, f30");
|
|
apply(bookmark(id20, id30));
|
|
f30.children = [id10, id20, id31];
|
|
apply(f30);
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id30,
|
|
index: 0,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id20,
|
|
index: 1,
|
|
}, {
|
|
guid: id31,
|
|
index: 2,
|
|
}],
|
|
}, {
|
|
guid: id40,
|
|
index: 1,
|
|
children: [{
|
|
guid: id41,
|
|
index: 0,
|
|
}, {
|
|
guid: id42,
|
|
index: 1,
|
|
}]
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "Moving 20 from f40 to f30 -> update 20, f30");
|
|
|
|
_("Move 20 back to front -> update 20, f30");
|
|
apply(bookmark(id20, ""));
|
|
f30.children = [id10, id31];
|
|
apply(f30);
|
|
yield check([{
|
|
guid: PlacesUtils.bookmarks.menuGuid,
|
|
index: 0,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.toolbarGuid,
|
|
index: 1,
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.unfiledGuid,
|
|
index: 3,
|
|
children: [{
|
|
guid: id30,
|
|
index: 0,
|
|
children: [{
|
|
guid: id10,
|
|
index: 0,
|
|
}, {
|
|
guid: id31,
|
|
index: 1,
|
|
}],
|
|
}, {
|
|
guid: id40,
|
|
index: 1,
|
|
children: [{
|
|
guid: id41,
|
|
index: 0,
|
|
}, {
|
|
guid: id42,
|
|
index: 1,
|
|
}],
|
|
}, {
|
|
guid: id20,
|
|
index: 2,
|
|
}],
|
|
}, {
|
|
guid: PlacesUtils.bookmarks.mobileGuid,
|
|
index: 4,
|
|
}], "Move 20 back to front -> update 20, f30");
|
|
|
|
});
|