toolkit/components/places/tests/unit/test_nsINavHistoryViewer.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim:set ts=2 sw=2 sts=2 et: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 // Get history service
     8 var histsvc = PlacesUtils.history;
     9 var bhist = PlacesUtils.bhistory;
    10 var bmsvc = PlacesUtils.bookmarks;
    12 var resultObserver = {
    13   insertedNode: null,
    14   nodeInserted: function(parent, node, newIndex) {
    15     this.insertedNode = node;
    16   },
    17   removedNode: null,
    18   nodeRemoved: function(parent, node, oldIndex) {
    19     this.removedNode = node;
    20   },
    22   nodeAnnotationChanged: function() {},
    24   newTitle: "",
    25   nodeChangedByTitle: null,
    26   nodeTitleChanged: function(node, newTitle) {
    27     this.nodeChangedByTitle = node;
    28     this.newTitle = newTitle;
    29   },
    31   newAccessCount: 0,
    32   newTime: 0,
    33   nodeChangedByHistoryDetails: null,
    34   nodeHistoryDetailsChanged: function(node,
    35                                          updatedVisitDate,
    36                                          updatedVisitCount) {
    37     this.nodeChangedByHistoryDetails = node
    38     this.newTime = updatedVisitDate;
    39     this.newAccessCount = updatedVisitCount;
    40   },
    42   movedNode: null,
    43   nodeMoved: function(node, oldParent, oldIndex, newParent, newIndex) {
    44     this.movedNode = node;
    45   },
    46   openedContainer: null,
    47   closedContainer: null,
    48   containerStateChanged: function (aNode, aOldState, aNewState) {
    49     if (aNewState == Ci.nsINavHistoryContainerResultNode.STATE_OPENED) {
    50       this.openedContainer = aNode;
    51     }
    52     else if (aNewState == Ci.nsINavHistoryContainerResultNode.STATE_CLOSED) {
    53       this.closedContainer = aNode;
    54     }
    55   },
    56   invalidatedContainer: null,
    57   invalidateContainer: function(node) {
    58     this.invalidatedContainer = node;
    59   },
    60   sortingMode: null,
    61   sortingChanged: function(sortingMode) {
    62     this.sortingMode = sortingMode;
    63   },
    64   inBatchMode: false,
    65   batching: function(aToggleMode) {
    66     do_check_neq(this.inBatchMode, aToggleMode);
    67     this.inBatchMode = aToggleMode;
    68   },
    69   result: null,
    70   reset: function() {
    71     this.insertedNode = null;
    72     this.removedNode = null;
    73     this.nodeChangedByTitle = null;
    74     this.nodeChangedByHistoryDetails = null;
    75     this.replacedNode = null;
    76     this.movedNode = null;
    77     this.openedContainer = null;
    78     this.closedContainer = null;
    79     this.invalidatedContainer = null;
    80     this.sortingMode = null;
    81   }
    82 };
    84 var testURI = uri("http://mozilla.com");
    86 function run_test() {
    87   run_next_test();
    88 }
    90 add_test(function check_history_query() {
    91   var options = histsvc.getNewQueryOptions();
    92   options.sortingMode = options.SORT_BY_DATE_DESCENDING;
    93   options.resultType = options.RESULTS_AS_VISIT;
    94   var query = histsvc.getNewQuery();
    95   var result = histsvc.executeQuery(query, options);
    96   result.addObserver(resultObserver, false);
    97   var root = result.root;
    98   root.containerOpen = true;
   100   do_check_neq(resultObserver.openedContainer, null);
   102   // nsINavHistoryResultObserver.nodeInserted
   103   // add a visit
   104   promiseAddVisits(testURI).then(function() {
   105     do_check_eq(testURI.spec, resultObserver.insertedNode.uri);
   107     // nsINavHistoryResultObserver.nodeHistoryDetailsChanged
   108     // adding a visit causes nodeHistoryDetailsChanged for the folder
   109     do_check_eq(root.uri, resultObserver.nodeChangedByHistoryDetails.uri);
   111     // nsINavHistoryResultObserver.itemTitleChanged for a leaf node
   112     promiseAddVisits({ uri: testURI, title: "baz" }).then(function () {
   113       do_check_eq(resultObserver.nodeChangedByTitle.title, "baz");
   115       // nsINavHistoryResultObserver.nodeRemoved
   116       var removedURI = uri("http://google.com");
   117       promiseAddVisits(removedURI).then(function() {
   118         bhist.removePage(removedURI);
   119         do_check_eq(removedURI.spec, resultObserver.removedNode.uri);
   121         // nsINavHistoryResultObserver.invalidateContainer
   122         bhist.removePagesFromHost("mozilla.com", false);
   123         do_check_eq(root.uri, resultObserver.invalidatedContainer.uri);
   125         // nsINavHistoryResultObserver.sortingChanged
   126         resultObserver.invalidatedContainer = null;
   127         result.sortingMode = options.SORT_BY_TITLE_ASCENDING;
   128         do_check_eq(resultObserver.sortingMode, options.SORT_BY_TITLE_ASCENDING);
   129         do_check_eq(resultObserver.invalidatedContainer, result.root);
   131         // nsINavHistoryResultObserver.invalidateContainer
   132         bhist.removeAllPages();
   133         do_check_eq(root.uri, resultObserver.invalidatedContainer.uri);
   135         // nsINavHistoryResultObserver.batching
   136         do_check_false(resultObserver.inBatchMode);
   137         histsvc.runInBatchMode({
   138           runBatched: function (aUserData) {
   139             do_check_true(resultObserver.inBatchMode);
   140           }
   141         }, null);
   142         do_check_false(resultObserver.inBatchMode);
   143         bmsvc.runInBatchMode({
   144           runBatched: function (aUserData) {
   145             do_check_true(resultObserver.inBatchMode);
   146           }
   147         }, null);
   148         do_check_false(resultObserver.inBatchMode);
   150         root.containerOpen = false;
   151         do_check_eq(resultObserver.closedContainer, resultObserver.openedContainer);
   152         result.removeObserver(resultObserver);
   153         resultObserver.reset();
   154         promiseAsyncUpdates().then(run_next_test);
   155       });
   156     });
   157   });
   158 });
   160 add_test(function check_bookmarks_query() {
   161   var options = histsvc.getNewQueryOptions();
   162   var query = histsvc.getNewQuery();
   163   query.setFolders([bmsvc.bookmarksMenuFolder], 1);
   164   var result = histsvc.executeQuery(query, options);
   165   result.addObserver(resultObserver, false);
   166   var root = result.root;
   167   root.containerOpen = true;
   169   do_check_neq(resultObserver.openedContainer, null);
   171   // nsINavHistoryResultObserver.nodeInserted
   172   // add a bookmark
   173   var testBookmark = bmsvc.insertBookmark(bmsvc.bookmarksMenuFolder, testURI, bmsvc.DEFAULT_INDEX, "foo");
   174   do_check_eq("foo", resultObserver.insertedNode.title);
   175   do_check_eq(testURI.spec, resultObserver.insertedNode.uri);
   177   // nsINavHistoryResultObserver.nodeHistoryDetailsChanged
   178   // adding a visit causes nodeHistoryDetailsChanged for the folder
   179   do_check_eq(root.uri, resultObserver.nodeChangedByHistoryDetails.uri);
   181   // nsINavHistoryResultObserver.nodeTitleChanged for a leaf node
   182   bmsvc.setItemTitle(testBookmark, "baz");
   183   do_check_eq(resultObserver.nodeChangedByTitle.title, "baz");
   184   do_check_eq(resultObserver.newTitle, "baz");
   186   var testBookmark2 = bmsvc.insertBookmark(bmsvc.bookmarksMenuFolder, uri("http://google.com"), bmsvc.DEFAULT_INDEX, "foo");
   187   bmsvc.moveItem(testBookmark2, bmsvc.bookmarksMenuFolder, 0);
   188   do_check_eq(resultObserver.movedNode.itemId, testBookmark2);
   190   // nsINavHistoryResultObserver.nodeRemoved
   191   bmsvc.removeItem(testBookmark2);
   192   do_check_eq(testBookmark2, resultObserver.removedNode.itemId);
   194   // XXX nsINavHistoryResultObserver.invalidateContainer
   196   // nsINavHistoryResultObserver.sortingChanged
   197   resultObserver.invalidatedContainer = null;
   198   result.sortingMode = options.SORT_BY_TITLE_ASCENDING;
   199   do_check_eq(resultObserver.sortingMode, options.SORT_BY_TITLE_ASCENDING);
   200   do_check_eq(resultObserver.invalidatedContainer, result.root);
   202   // nsINavHistoryResultObserver.batching
   203   do_check_false(resultObserver.inBatchMode);
   204   histsvc.runInBatchMode({
   205     runBatched: function (aUserData) {
   206       do_check_true(resultObserver.inBatchMode);
   207     }
   208   }, null);
   209   do_check_false(resultObserver.inBatchMode);
   210   bmsvc.runInBatchMode({
   211     runBatched: function (aUserData) {
   212       do_check_true(resultObserver.inBatchMode);
   213     }
   214   }, null);
   215   do_check_false(resultObserver.inBatchMode);
   217   root.containerOpen = false;
   218   do_check_eq(resultObserver.closedContainer, resultObserver.openedContainer);
   219   result.removeObserver(resultObserver);
   220   resultObserver.reset();
   221   promiseAsyncUpdates().then(run_next_test);
   222 });
   224 add_test(function check_mixed_query() {
   225   var options = histsvc.getNewQueryOptions();
   226   var query = histsvc.getNewQuery();
   227   query.onlyBookmarked = true;
   228   var result = histsvc.executeQuery(query, options);
   229   result.addObserver(resultObserver, false);
   230   var root = result.root;
   231   root.containerOpen = true;
   233   do_check_neq(resultObserver.openedContainer, null);
   235   // nsINavHistoryResultObserver.batching
   236   do_check_false(resultObserver.inBatchMode);
   237   histsvc.runInBatchMode({
   238     runBatched: function (aUserData) {
   239       do_check_true(resultObserver.inBatchMode);
   240     }
   241   }, null);
   242   do_check_false(resultObserver.inBatchMode);
   243   bmsvc.runInBatchMode({
   244     runBatched: function (aUserData) {
   245       do_check_true(resultObserver.inBatchMode);
   246     }
   247   }, null);
   248   do_check_false(resultObserver.inBatchMode);
   250   root.containerOpen = false;
   251   do_check_eq(resultObserver.closedContainer, resultObserver.openedContainer);
   252   result.removeObserver(resultObserver);
   253   resultObserver.reset();
   254   promiseAsyncUpdates().then(run_next_test);
   255 });

mercurial