1
_("Making sure after processing incoming bookmarks, they show up in the right order");
2
Cu.import("resource://services-sync/engines/bookmarks.js");
3
Cu.import("resource://services-sync/util.js");
5
function getBookmarks(folderId) {
10
let itemId = Svc.Bookmark.getIdForItemAt(folderId, pos);
11
_("Got itemId", itemId, "under", folderId, "at", pos);
15
switch (Svc.Bookmark.getItemType(itemId)) {
16
case Svc.Bookmark.TYPE_BOOKMARK:
17
bookmarks.push(Svc.Bookmark.getItemTitle(itemId));
19
case Svc.Bookmark.TYPE_FOLDER:
20
bookmarks.push(getBookmarks(itemId));
23
_("Unsupported item type..");
32
function check(expected) {
33
let bookmarks = getBookmarks(Svc.Bookmark.unfiledBookmarksFolder);
35
_("Checking if the bookmark structure is", JSON.stringify(expected));
36
_("Got bookmarks:", JSON.stringify(bookmarks));
37
do_check_true(Utils.deepEquals(bookmarks, expected));
41
let store = new BookmarksEngine()._store;
42
initTestLogging("Trace");
44
_("Starting with a clean slate of no bookmarks");
48
function bookmark(name, parent) {
49
let bookmark = new Bookmark("http://weave.server/my-bookmark");
51
bookmark.title = name;
52
bookmark.bmkUri = "http://uri/";
53
bookmark.parentid = parent || "unfiled";
58
function folder(name, parent, children) {
59
let folder = new BookmarkFolder("http://weave.server/my-bookmark-folder");
62
folder.parentid = parent || "unfiled";
63
folder.children = children;
67
function apply(record) {
68
store._childrenToOrder = {};
69
store.applyIncoming(record);
70
store._orderChildren();
71
delete store._childrenToOrder;
74
_("basic add first bookmark");
75
apply(bookmark("10", ""));
78
_("basic append behind 10");
79
apply(bookmark("20", ""));
82
_("basic create in folder");
83
apply(bookmark("31", "f30"));
84
let f30 = folder("f30", "", ["31"]);
86
check(["10", "20", ["31"]]);
88
_("insert missing parent -> append to unfiled");
89
apply(bookmark("41", "f40"));
90
check(["10", "20", ["31"], "41"]);
92
_("insert another missing parent -> append");
93
apply(bookmark("42", "f40"));
94
check(["10", "20", ["31"], "41", "42"]);
96
_("insert folder -> move children and followers");
97
let f40 = folder("f40", "", ["41", "42"]);
99
check(["10", "20", ["31"], ["41", "42"]]);
101
_("Moving 41 behind 42 -> update f40");
102
f40.children = ["42", "41"];
104
check(["10", "20", ["31"], ["42", "41"]]);
106
_("Moving 10 back to front -> update 10, 20");
107
f40.children = ["41", "42"];
109
check(["10", "20", ["31"], ["41", "42"]]);
111
_("Moving 20 behind 42 in f40 -> update 50");
112
apply(bookmark("20", "f40"));
113
check(["10", ["31"], ["41", "42", "20"]]);
115
_("Moving 10 in front of 31 in f30 -> update 10, f30");
116
apply(bookmark("10", "f30"));
117
f30.children = ["10", "31"];
119
check([["10", "31"], ["41", "42", "20"]]);
121
_("Moving 20 from f40 to f30 -> update 20, f30");
122
apply(bookmark("20", "f30"));
123
f30.children = ["10", "20", "31"];
125
check([["10", "20", "31"], ["41", "42"]]);
127
_("Move 20 back to front -> update 20, f30");
128
apply(bookmark("20", ""));
129
f30.children = ["10", "31"];
131
check([["10", "31"], ["41", "42"], "20"]);