1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim:set ts=2 sw=2 sts=2 et: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const EXCLUDE_FROM_BACKUP_ANNO = "places/excludeFromBackup";
// Menu, Toolbar, Unsorted, Tags, Mobile
const PLACES_ROOTS_COUNT = 5;
var tests = [];
/*
Backup/restore tests example:
var myTest = {
populate: function () { ... add bookmarks ... },
validate: function () { ... query for your bookmarks ... }
}
this.push(myTest);
*/
var test = {
populate: function populate() {
// check initial size
var rootNode = PlacesUtils.getFolderContents(PlacesUtils.placesRootId,
false, false).root;
do_check_eq(rootNode.childCount, PLACES_ROOTS_COUNT );
rootNode.containerOpen = false;
var idx = PlacesUtils.bookmarks.DEFAULT_INDEX;
// create a root to be restore
this._restoreRootTitle = "restore root";
var restoreRootId = PlacesUtils.bookmarks
.createFolder(PlacesUtils.placesRootId,
this._restoreRootTitle, idx);
// add a test bookmark
this._restoreRootURI = uri("http://restore.uri");
PlacesUtils.bookmarks.insertBookmark(restoreRootId, this._restoreRootURI,
idx, "restore uri");
// add a test bookmark to be exclude
this._restoreRootExcludeURI = uri("http://exclude.uri");
var exItemId = PlacesUtils.bookmarks
.insertBookmark(restoreRootId,
this._restoreRootExcludeURI,
idx, "exclude uri");
// Annotate the bookmark for exclusion.
PlacesUtils.annotations.setItemAnnotation(exItemId,
EXCLUDE_FROM_BACKUP_ANNO, 1, 0,
PlacesUtils.annotations.EXPIRE_NEVER);
// create a root to be exclude
this._excludeRootTitle = "exclude root";
this._excludeRootId = PlacesUtils.bookmarks
.createFolder(PlacesUtils.placesRootId,
this._excludeRootTitle, idx);
// Annotate the root for exclusion.
PlacesUtils.annotations.setItemAnnotation(this._excludeRootId,
EXCLUDE_FROM_BACKUP_ANNO, 1, 0,
PlacesUtils.annotations.EXPIRE_NEVER);
// add a test bookmark exclude by exclusion of its parent
PlacesUtils.bookmarks.insertBookmark(this._excludeRootId,
this._restoreRootExcludeURI,
idx, "exclude uri");
},
validate: function validate(aEmptyBookmarks) {
var rootNode = PlacesUtils.getFolderContents(PlacesUtils.placesRootId,
false, false).root;
if (!aEmptyBookmarks) {
// since restore does not remove backup exclude items both
// roots should still exist.
do_check_eq(rootNode.childCount, PLACES_ROOTS_COUNT + 2);
// open exclude root and check it still contains one item
var restoreRootIndex = PLACES_ROOTS_COUNT;
var excludeRootIndex = PLACES_ROOTS_COUNT+1;
var excludeRootNode = rootNode.getChild(excludeRootIndex);
do_check_eq(this._excludeRootTitle, excludeRootNode.title);
excludeRootNode.QueryInterface(Ci.nsINavHistoryQueryResultNode);
excludeRootNode.containerOpen = true;
do_check_eq(excludeRootNode.childCount, 1);
var excludeRootChildNode = excludeRootNode.getChild(0);
do_check_eq(excludeRootChildNode.uri, this._restoreRootExcludeURI.spec);
excludeRootNode.containerOpen = false;
}
else {
// exclude root should not exist anymore
do_check_eq(rootNode.childCount, PLACES_ROOTS_COUNT + 1);
restoreRootIndex = PLACES_ROOTS_COUNT;
}
var restoreRootNode = rootNode.getChild(restoreRootIndex);
do_check_eq(this._restoreRootTitle, restoreRootNode.title);
restoreRootNode.QueryInterface(Ci.nsINavHistoryQueryResultNode);
restoreRootNode.containerOpen = true;
do_check_eq(restoreRootNode.childCount, 1);
var restoreRootChildNode = restoreRootNode.getChild(0);
do_check_eq(restoreRootChildNode.uri, this._restoreRootURI.spec);
restoreRootNode.containerOpen = false;
rootNode.containerOpen = false;
}
}
function run_test() {
run_next_test();
}
add_task(function*() {
// make json file
let jsonFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.json");
// populate db
test.populate();
yield BookmarkJSONUtils.exportToFile(jsonFile);
// restore json file
yield BookmarkJSONUtils.importFromFile(jsonFile, true);
// validate without removing all bookmarks
// restore do not remove backup exclude entries
test.validate(false);
// cleanup
yield PlacesUtils.bookmarks.eraseEverything();
// manually remove the excluded root
PlacesUtils.bookmarks.removeItem(test._excludeRootId);
// restore json file
yield BookmarkJSONUtils.importFromFile(jsonFile, true);
// validate after a complete bookmarks cleanup
test.validate(true);
// clean up
yield OS.File.remove(jsonFile);
});
|