Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

var bookmarkData = [
{
title: "Nathan's Toasty Technology Page",
tags: ["technology", "personal", "retro"],
},
{
uri: uri("http://www.reddit.com"),
title: "reddit: the front page of the internet",
tags: ["social media", "news", "humour"],
},
{
uri: uri("http://www.4chan.org"),
title: "4chan",
tags: ["discussion", "imageboard", "anime"],
},
];
/*
TEST SUMMARY
- Add bookmarks with tags
- Export tagged bookmarks as HTML file
- Delete bookmarks
- Import bookmarks from HTML file
- Check that all bookmarks are successfully imported with tags
*/
add_task(async function test_import_tags() {
// Removes bookmarks.html if the file already exists.
let HTMLFile = PathUtils.join(PathUtils.profileDir, "bookmarks.html");
await IOUtils.remove(HTMLFile, { ignoreAbsent: true });
// Adds bookmarks and tags to the database.
let bookmarkList = new Set();
for (let { uri, title, tags } of bookmarkData) {
bookmarkList.add(
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: uri,
title,
})
);
PlacesUtils.tagging.tagURI(uri, tags);
}
// Exports the bookmarks as a HTML file.
await BookmarkHTMLUtils.exportToFile(HTMLFile);
// Deletes bookmarks and tags from the database.
for (let bookmark of bookmarkList) {
await PlacesUtils.bookmarks.remove(bookmark.guid);
}
// Re-imports the bookmarks from the HTML file.
await BookmarkHTMLUtils.importFromFile(HTMLFile, { replace: true });
// Tests to ensure that the tags are still present for each bookmark URI.
for (let { uri, tags } of bookmarkData) {
info("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)));
}
});