summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/bookmarks/test_458683.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/places/tests/bookmarks/test_458683.js')
-rw-r--r--toolkit/components/places/tests/bookmarks/test_458683.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/toolkit/components/places/tests/bookmarks/test_458683.js b/toolkit/components/places/tests/bookmarks/test_458683.js
new file mode 100644
index 000000000..c3722aab5
--- /dev/null
+++ b/toolkit/components/places/tests/bookmarks/test_458683.js
@@ -0,0 +1,131 @@
+/* -*- 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/. */
+
+var tests = [];
+
+// Get database connection
+try {
+ var mDBConn = PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
+ .DBConnection;
+}
+catch (ex) {
+ do_throw("Could not get database connection\n");
+}
+
+/*
+ This test is:
+ - don't block while doing backup and restore if tag containers contain
+ bogus items (separators, folders)
+*/
+
+var invalidTagChildTest = {
+ _itemTitle: "invalid uri",
+ _itemUrl: "http://test.mozilla.org/",
+ _itemId: -1,
+ _tag: "testTag",
+ _tagItemId: -1,
+
+ populate: function () {
+ // add a valid bookmark
+ this._itemId = PlacesUtils.bookmarks
+ .insertBookmark(PlacesUtils.toolbarFolderId,
+ PlacesUtils._uri(this._itemUrl),
+ PlacesUtils.bookmarks.DEFAULT_INDEX,
+ this._itemTitle);
+
+ // create a tag
+ PlacesUtils.tagging.tagURI(PlacesUtils._uri(this._itemUrl), [this._tag]);
+ // get tag folder id
+ var options = PlacesUtils.history.getNewQueryOptions();
+ var query = PlacesUtils.history.getNewQuery();
+ query.setFolders([PlacesUtils.bookmarks.tagsFolder], 1);
+ var result = PlacesUtils.history.executeQuery(query, options);
+ var tagRoot = result.root;
+ tagRoot.containerOpen = true;
+ do_check_eq(tagRoot.childCount, 1);
+ var tagNode = tagRoot.getChild(0)
+ .QueryInterface(Ci.nsINavHistoryContainerResultNode);
+ this._tagItemId = tagNode.itemId;
+ tagRoot.containerOpen = false;
+
+ // add a separator and a folder inside tag folder
+ PlacesUtils.bookmarks.insertSeparator(this._tagItemId,
+ PlacesUtils.bookmarks.DEFAULT_INDEX);
+ PlacesUtils.bookmarks.createFolder(this._tagItemId,
+ "test folder",
+ PlacesUtils.bookmarks.DEFAULT_INDEX);
+
+ // add a separator and a folder inside tag root
+ PlacesUtils.bookmarks.insertSeparator(PlacesUtils.bookmarks.tagsFolder,
+ PlacesUtils.bookmarks.DEFAULT_INDEX);
+ PlacesUtils.bookmarks.createFolder(PlacesUtils.bookmarks.tagsFolder,
+ "test tags root folder",
+ PlacesUtils.bookmarks.DEFAULT_INDEX);
+ },
+
+ clean: function () {
+ PlacesUtils.tagging.untagURI(PlacesUtils._uri(this._itemUrl), [this._tag]);
+ PlacesUtils.bookmarks.removeItem(this._itemId);
+ },
+
+ validate: function () {
+ var query = PlacesUtils.history.getNewQuery();
+ query.setFolders([PlacesUtils.bookmarks.toolbarFolder], 1);
+ var options = PlacesUtils.history.getNewQueryOptions();
+ var result = PlacesUtils.history.executeQuery(query, options);
+
+ var toolbar = result.root;
+ toolbar.containerOpen = true;
+
+ // test for our bookmark
+ do_check_eq(toolbar.childCount, 1);
+ for (var i = 0; i < toolbar.childCount; i++) {
+ var folderNode = toolbar.getChild(0);
+ do_check_eq(folderNode.type, folderNode.RESULT_TYPE_URI);
+ do_check_eq(folderNode.title, this._itemTitle);
+ }
+ toolbar.containerOpen = false;
+
+ // test for our tag
+ var tags = PlacesUtils.tagging.getTagsForURI(PlacesUtils._uri(this._itemUrl));
+ do_check_eq(tags.length, 1);
+ do_check_eq(tags[0], this._tag);
+ }
+}
+tests.push(invalidTagChildTest);
+
+function run_test() {
+ run_next_test()
+}
+
+add_task(function* () {
+ let jsonFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.json");
+
+ // populate db
+ tests.forEach(function(aTest) {
+ aTest.populate();
+ // sanity
+ aTest.validate();
+ });
+
+ yield BookmarkJSONUtils.exportToFile(jsonFile);
+
+ // clean
+ tests.forEach(function(aTest) {
+ aTest.clean();
+ });
+
+ // restore json file
+ yield BookmarkJSONUtils.importFromFile(jsonFile, true);
+
+ // validate
+ tests.forEach(function(aTest) {
+ aTest.validate();
+ });
+
+ // clean up
+ yield OS.File.remove(jsonFile);
+});