summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/unit/test_nsINavHistoryViewer.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/places/tests/unit/test_nsINavHistoryViewer.js')
-rw-r--r--toolkit/components/places/tests/unit/test_nsINavHistoryViewer.js256
1 files changed, 256 insertions, 0 deletions
diff --git a/toolkit/components/places/tests/unit/test_nsINavHistoryViewer.js b/toolkit/components/places/tests/unit/test_nsINavHistoryViewer.js
new file mode 100644
index 000000000..037ab7d08
--- /dev/null
+++ b/toolkit/components/places/tests/unit/test_nsINavHistoryViewer.js
@@ -0,0 +1,256 @@
+/* -*- 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/. */
+
+// Get history service
+var histsvc = PlacesUtils.history;
+var bhist = PlacesUtils.bhistory;
+var bmsvc = PlacesUtils.bookmarks;
+
+var resultObserver = {
+ insertedNode: null,
+ nodeInserted: function(parent, node, newIndex) {
+ this.insertedNode = node;
+ },
+ removedNode: null,
+ nodeRemoved: function(parent, node, oldIndex) {
+ this.removedNode = node;
+ },
+
+ nodeAnnotationChanged: function() {},
+
+ newTitle: "",
+ nodeChangedByTitle: null,
+ nodeTitleChanged: function(node, newTitle) {
+ this.nodeChangedByTitle = node;
+ this.newTitle = newTitle;
+ },
+
+ newAccessCount: 0,
+ newTime: 0,
+ nodeChangedByHistoryDetails: null,
+ nodeHistoryDetailsChanged: function(node,
+ updatedVisitDate,
+ updatedVisitCount) {
+ this.nodeChangedByHistoryDetails = node
+ this.newTime = updatedVisitDate;
+ this.newAccessCount = updatedVisitCount;
+ },
+
+ movedNode: null,
+ nodeMoved: function(node, oldParent, oldIndex, newParent, newIndex) {
+ this.movedNode = node;
+ },
+ openedContainer: null,
+ closedContainer: null,
+ containerStateChanged: function (aNode, aOldState, aNewState) {
+ if (aNewState == Ci.nsINavHistoryContainerResultNode.STATE_OPENED) {
+ this.openedContainer = aNode;
+ }
+ else if (aNewState == Ci.nsINavHistoryContainerResultNode.STATE_CLOSED) {
+ this.closedContainer = aNode;
+ }
+ },
+ invalidatedContainer: null,
+ invalidateContainer: function(node) {
+ this.invalidatedContainer = node;
+ },
+ sortingMode: null,
+ sortingChanged: function(sortingMode) {
+ this.sortingMode = sortingMode;
+ },
+ inBatchMode: false,
+ batching: function(aToggleMode) {
+ do_check_neq(this.inBatchMode, aToggleMode);
+ this.inBatchMode = aToggleMode;
+ },
+ result: null,
+ reset: function() {
+ this.insertedNode = null;
+ this.removedNode = null;
+ this.nodeChangedByTitle = null;
+ this.nodeChangedByHistoryDetails = null;
+ this.replacedNode = null;
+ this.movedNode = null;
+ this.openedContainer = null;
+ this.closedContainer = null;
+ this.invalidatedContainer = null;
+ this.sortingMode = null;
+ }
+};
+
+var testURI = uri("http://mozilla.com");
+
+function run_test() {
+ run_next_test();
+}
+
+add_test(function check_history_query() {
+ var options = histsvc.getNewQueryOptions();
+ options.sortingMode = options.SORT_BY_DATE_DESCENDING;
+ options.resultType = options.RESULTS_AS_VISIT;
+ var query = histsvc.getNewQuery();
+ var result = histsvc.executeQuery(query, options);
+ result.addObserver(resultObserver, false);
+ var root = result.root;
+ root.containerOpen = true;
+
+ do_check_neq(resultObserver.openedContainer, null);
+
+ // nsINavHistoryResultObserver.nodeInserted
+ // add a visit
+ PlacesTestUtils.addVisits(testURI).then(function() {
+ do_check_eq(testURI.spec, resultObserver.insertedNode.uri);
+
+ // nsINavHistoryResultObserver.nodeHistoryDetailsChanged
+ // adding a visit causes nodeHistoryDetailsChanged for the folder
+ do_check_eq(root.uri, resultObserver.nodeChangedByHistoryDetails.uri);
+
+ // nsINavHistoryResultObserver.itemTitleChanged for a leaf node
+ PlacesTestUtils.addVisits({ uri: testURI, title: "baz" }).then(function () {
+ do_check_eq(resultObserver.nodeChangedByTitle.title, "baz");
+
+ // nsINavHistoryResultObserver.nodeRemoved
+ var removedURI = uri("http://google.com");
+ PlacesTestUtils.addVisits(removedURI).then(function() {
+ bhist.removePage(removedURI);
+ do_check_eq(removedURI.spec, resultObserver.removedNode.uri);
+
+ // nsINavHistoryResultObserver.invalidateContainer
+ bhist.removePagesFromHost("mozilla.com", false);
+ do_check_eq(root.uri, resultObserver.invalidatedContainer.uri);
+
+ // nsINavHistoryResultObserver.sortingChanged
+ resultObserver.invalidatedContainer = null;
+ result.sortingMode = options.SORT_BY_TITLE_ASCENDING;
+ do_check_eq(resultObserver.sortingMode, options.SORT_BY_TITLE_ASCENDING);
+ do_check_eq(resultObserver.invalidatedContainer, result.root);
+
+ // nsINavHistoryResultObserver.invalidateContainer
+ PlacesTestUtils.clearHistoryEnabled().then(() => {
+ do_check_eq(root.uri, resultObserver.invalidatedContainer.uri);
+
+ // nsINavHistoryResultObserver.batching
+ do_check_false(resultObserver.inBatchMode);
+ histsvc.runInBatchMode({
+ runBatched: function (aUserData) {
+ do_check_true(resultObserver.inBatchMode);
+ }
+ }, null);
+ do_check_false(resultObserver.inBatchMode);
+ bmsvc.runInBatchMode({
+ runBatched: function (aUserData) {
+ do_check_true(resultObserver.inBatchMode);
+ }
+ }, null);
+ do_check_false(resultObserver.inBatchMode);
+
+ root.containerOpen = false;
+ do_check_eq(resultObserver.closedContainer, resultObserver.openedContainer);
+ result.removeObserver(resultObserver);
+ resultObserver.reset();
+ PlacesTestUtils.promiseAsyncUpdates().then(run_next_test);
+ });
+ });
+ });
+ });
+});
+
+add_test(function check_bookmarks_query() {
+ var options = histsvc.getNewQueryOptions();
+ var query = histsvc.getNewQuery();
+ query.setFolders([bmsvc.bookmarksMenuFolder], 1);
+ var result = histsvc.executeQuery(query, options);
+ result.addObserver(resultObserver, false);
+ var root = result.root;
+ root.containerOpen = true;
+
+ do_check_neq(resultObserver.openedContainer, null);
+
+ // nsINavHistoryResultObserver.nodeInserted
+ // add a bookmark
+ var testBookmark = bmsvc.insertBookmark(bmsvc.bookmarksMenuFolder, testURI, bmsvc.DEFAULT_INDEX, "foo");
+ do_check_eq("foo", resultObserver.insertedNode.title);
+ do_check_eq(testURI.spec, resultObserver.insertedNode.uri);
+
+ // nsINavHistoryResultObserver.nodeHistoryDetailsChanged
+ // adding a visit causes nodeHistoryDetailsChanged for the folder
+ do_check_eq(root.uri, resultObserver.nodeChangedByHistoryDetails.uri);
+
+ // nsINavHistoryResultObserver.nodeTitleChanged for a leaf node
+ bmsvc.setItemTitle(testBookmark, "baz");
+ do_check_eq(resultObserver.nodeChangedByTitle.title, "baz");
+ do_check_eq(resultObserver.newTitle, "baz");
+
+ var testBookmark2 = bmsvc.insertBookmark(bmsvc.bookmarksMenuFolder, uri("http://google.com"), bmsvc.DEFAULT_INDEX, "foo");
+ bmsvc.moveItem(testBookmark2, bmsvc.bookmarksMenuFolder, 0);
+ do_check_eq(resultObserver.movedNode.itemId, testBookmark2);
+
+ // nsINavHistoryResultObserver.nodeRemoved
+ bmsvc.removeItem(testBookmark2);
+ do_check_eq(testBookmark2, resultObserver.removedNode.itemId);
+
+ // XXX nsINavHistoryResultObserver.invalidateContainer
+
+ // nsINavHistoryResultObserver.sortingChanged
+ resultObserver.invalidatedContainer = null;
+ result.sortingMode = options.SORT_BY_TITLE_ASCENDING;
+ do_check_eq(resultObserver.sortingMode, options.SORT_BY_TITLE_ASCENDING);
+ do_check_eq(resultObserver.invalidatedContainer, result.root);
+
+ // nsINavHistoryResultObserver.batching
+ do_check_false(resultObserver.inBatchMode);
+ histsvc.runInBatchMode({
+ runBatched: function (aUserData) {
+ do_check_true(resultObserver.inBatchMode);
+ }
+ }, null);
+ do_check_false(resultObserver.inBatchMode);
+ bmsvc.runInBatchMode({
+ runBatched: function (aUserData) {
+ do_check_true(resultObserver.inBatchMode);
+ }
+ }, null);
+ do_check_false(resultObserver.inBatchMode);
+
+ root.containerOpen = false;
+ do_check_eq(resultObserver.closedContainer, resultObserver.openedContainer);
+ result.removeObserver(resultObserver);
+ resultObserver.reset();
+ PlacesTestUtils.promiseAsyncUpdates().then(run_next_test);
+});
+
+add_test(function check_mixed_query() {
+ var options = histsvc.getNewQueryOptions();
+ var query = histsvc.getNewQuery();
+ query.onlyBookmarked = true;
+ var result = histsvc.executeQuery(query, options);
+ result.addObserver(resultObserver, false);
+ var root = result.root;
+ root.containerOpen = true;
+
+ do_check_neq(resultObserver.openedContainer, null);
+
+ // nsINavHistoryResultObserver.batching
+ do_check_false(resultObserver.inBatchMode);
+ histsvc.runInBatchMode({
+ runBatched: function (aUserData) {
+ do_check_true(resultObserver.inBatchMode);
+ }
+ }, null);
+ do_check_false(resultObserver.inBatchMode);
+ bmsvc.runInBatchMode({
+ runBatched: function (aUserData) {
+ do_check_true(resultObserver.inBatchMode);
+ }
+ }, null);
+ do_check_false(resultObserver.inBatchMode);
+
+ root.containerOpen = false;
+ do_check_eq(resultObserver.closedContainer, resultObserver.openedContainer);
+ result.removeObserver(resultObserver);
+ resultObserver.reset();
+ PlacesTestUtils.promiseAsyncUpdates().then(run_next_test);
+});