mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-30 19:28:40 +09:00
173 lines
6.2 KiB
JavaScript
173 lines
6.2 KiB
JavaScript
const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
|
|
const DESCRIPTION_ANNO = "bookmarkProperties/description";
|
|
|
|
var tagData = [
|
|
{ uri: uri("http://slint.us"), tags: ["indie", "kentucky", "music"] },
|
|
{ uri: uri("http://en.wikipedia.org/wiki/Diplodocus"), tags: ["dinosaur", "dj", "rad word"] }
|
|
];
|
|
|
|
var bookmarkData = [
|
|
{ uri: uri("http://slint.us"), title: "indie, kentucky, music" },
|
|
{ uri: uri("http://en.wikipedia.org/wiki/Diplodocus"), title: "dinosaur, dj, rad word" }
|
|
];
|
|
|
|
function run_test() {
|
|
run_next_test();
|
|
}
|
|
|
|
/*
|
|
HTML+FEATURES SUMMARY:
|
|
- import legacy bookmarks
|
|
- export as json, import, test (tests integrity of html > json)
|
|
- export as html, import, test (tests integrity of json > html)
|
|
|
|
BACKUP/RESTORE SUMMARY:
|
|
- create a bookmark in each root
|
|
- tag multiple URIs with multiple tags
|
|
- export as json, import, test
|
|
*/
|
|
add_task(function* () {
|
|
// Remove eventual bookmarks.exported.json.
|
|
let jsonFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.exported.json");
|
|
if ((yield OS.File.exists(jsonFile)))
|
|
yield OS.File.remove(jsonFile);
|
|
|
|
// Test importing a pre-Places canonical bookmarks file.
|
|
// Note: we do not empty the db before this import to catch bugs like 380999
|
|
let htmlFile = OS.Path.join(do_get_cwd().path, "bookmarks.preplaces.html");
|
|
yield BookmarkHTMLUtils.importFromFile(htmlFile, true);
|
|
|
|
// Populate the database.
|
|
for (let { uri, tags } of tagData) {
|
|
PlacesUtils.tagging.tagURI(uri, tags);
|
|
}
|
|
for (let { uri, title } of bookmarkData) {
|
|
yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
|
|
url: uri,
|
|
title });
|
|
}
|
|
for (let { uri, title } of bookmarkData) {
|
|
yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.toolbarGuid,
|
|
url: uri,
|
|
title });
|
|
}
|
|
|
|
yield validate();
|
|
|
|
// Test exporting a Places canonical json file.
|
|
// 1. export to bookmarks.exported.json
|
|
yield BookmarkJSONUtils.exportToFile(jsonFile);
|
|
do_print("exported json");
|
|
|
|
// 2. empty bookmarks db
|
|
// 3. import bookmarks.exported.json
|
|
yield BookmarkJSONUtils.importFromFile(jsonFile, true);
|
|
do_print("imported json");
|
|
|
|
// 4. run the test-suite
|
|
yield validate();
|
|
do_print("validated import");
|
|
});
|
|
|
|
function* validate() {
|
|
yield testMenuBookmarks();
|
|
yield testToolbarBookmarks();
|
|
testUnfiledBookmarks();
|
|
testTags();
|
|
yield PlacesTestUtils.promiseAsyncUpdates();
|
|
}
|
|
|
|
// Tests a bookmarks datastore that has a set of bookmarks, etc
|
|
// that flex each supported field and feature.
|
|
function* testMenuBookmarks() {
|
|
let root = PlacesUtils.getFolderContents(PlacesUtils.bookmarksMenuFolderId).root;
|
|
Assert.equal(root.childCount, 3);
|
|
|
|
let separatorNode = root.getChild(1);
|
|
Assert.equal(separatorNode.type, separatorNode.RESULT_TYPE_SEPARATOR);
|
|
|
|
let folderNode = root.getChild(2);
|
|
Assert.equal(folderNode.type, folderNode.RESULT_TYPE_FOLDER);
|
|
Assert.equal(folderNode.title, "test");
|
|
let folder = yield PlacesUtils.bookmarks.fetch(folderNode.bookmarkGuid);
|
|
Assert.equal(folder.dateAdded.getTime(), 1177541020000);
|
|
|
|
Assert.equal(PlacesUtils.asQuery(folderNode).hasChildren, true);
|
|
|
|
Assert.equal("folder test comment",
|
|
PlacesUtils.annotations.getItemAnnotation(folderNode.itemId,
|
|
DESCRIPTION_ANNO));
|
|
|
|
// open test folder, and test the children
|
|
folderNode.containerOpen = true;
|
|
Assert.equal(folderNode.childCount, 1);
|
|
|
|
let bookmarkNode = folderNode.getChild(0);
|
|
Assert.equal("http://test/post", bookmarkNode.uri);
|
|
Assert.equal("test post keyword", bookmarkNode.title);
|
|
Assert.ok(PlacesUtils.annotations.itemHasAnnotation(bookmarkNode.itemId,
|
|
LOAD_IN_SIDEBAR_ANNO));
|
|
Assert.equal(bookmarkNode.dateAdded, 1177375336000000);
|
|
|
|
let entry = yield PlacesUtils.keywords.fetch({ url: bookmarkNode.uri });
|
|
Assert.equal("test", entry.keyword);
|
|
Assert.equal("hidden1%3Dbar&text1%3D%25s", entry.postData);
|
|
|
|
Assert.equal("ISO-8859-1",
|
|
(yield PlacesUtils.getCharsetForURI(NetUtil.newURI(bookmarkNode.uri))));
|
|
Assert.equal("item description",
|
|
PlacesUtils.annotations.getItemAnnotation(bookmarkNode.itemId,
|
|
DESCRIPTION_ANNO));
|
|
|
|
folderNode.containerOpen = false;
|
|
root.containerOpen = false;
|
|
}
|
|
|
|
function* testToolbarBookmarks() {
|
|
let root = PlacesUtils.getFolderContents(PlacesUtils.toolbarFolderId).root;
|
|
|
|
// child count (add 2 for pre-existing items)
|
|
Assert.equal(root.childCount, bookmarkData.length + 2);
|
|
|
|
let livemarkNode = root.getChild(1);
|
|
Assert.equal("Latest Headlines", livemarkNode.title);
|
|
|
|
let livemark = yield PlacesUtils.livemarks.getLivemark({ id: livemarkNode.itemId });
|
|
Assert.equal("http://en-us.fxfeeds.mozilla.com/en-US/firefox/livebookmarks/",
|
|
livemark.siteURI.spec);
|
|
Assert.equal("http://en-us.fxfeeds.mozilla.com/en-US/firefox/headlines.xml",
|
|
livemark.feedURI.spec);
|
|
|
|
// test added bookmark data
|
|
let bookmarkNode = root.getChild(2);
|
|
Assert.equal(bookmarkNode.uri, bookmarkData[0].uri.spec);
|
|
Assert.equal(bookmarkNode.title, bookmarkData[0].title);
|
|
bookmarkNode = root.getChild(3);
|
|
Assert.equal(bookmarkNode.uri, bookmarkData[1].uri.spec);
|
|
Assert.equal(bookmarkNode.title, bookmarkData[1].title);
|
|
|
|
root.containerOpen = false;
|
|
}
|
|
|
|
function testUnfiledBookmarks() {
|
|
let root = PlacesUtils.getFolderContents(PlacesUtils.unfiledBookmarksFolderId).root;
|
|
// child count (add 1 for pre-existing item)
|
|
Assert.equal(root.childCount, bookmarkData.length + 1);
|
|
for (let i = 1; i < root.childCount; ++i) {
|
|
let child = root.getChild(i);
|
|
Assert.equal(child.uri, bookmarkData[i - 1].uri.spec);
|
|
Assert.equal(child.title, bookmarkData[i - 1].title);
|
|
if (child.tags)
|
|
Assert.equal(child.tags, bookmarkData[i - 1].title);
|
|
}
|
|
root.containerOpen = false;
|
|
}
|
|
|
|
function testTags() {
|
|
for (let { uri, tags } of tagData) {
|
|
do_print("Test tags for " + uri.spec + ": " + tags + "\n");
|
|
let foundTags = PlacesUtils.tagging.getTagsForURI(uri);
|
|
Assert.equal(foundTags.length, tags.length);
|
|
Assert.ok(tags.every(tag => foundTags.includes(tag)));
|
|
}
|
|
}
|