summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js
blob: ecebce94a6de4da9aae988ffe4c7c5a3af330bee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/* -*- 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/. */

 /**
  * Check for correct functionality of PlacesUtils.getURLsForContainerNode and
  * PlacesUtils.hasChildURIs (those helpers share almost all of their code)
  */

var PU = PlacesUtils;
var hs = PU.history;
var bs = PU.bookmarks;

var tests = [

function() {
  dump("\n\n*** TEST: folder\n");
  // This is the folder we will check for children.
  var folderId = bs.createFolder(bs.toolbarFolder, "folder", bs.DEFAULT_INDEX);

  // Create a folder and a query node inside it, these should not be considered
  // uri nodes.
  bs.createFolder(folderId, "inside folder", bs.DEFAULT_INDEX);
  bs.insertBookmark(folderId, uri("place:sort=1"),
                    bs.DEFAULT_INDEX, "inside query");

  var query = hs.getNewQuery();
  query.setFolders([bs.toolbarFolder], 1);
  var options = hs.getNewQueryOptions();

  dump("Check folder without uri nodes\n");
  check_uri_nodes(query, options, 0);

  dump("Check folder with uri nodes\n");
  // Add an uri node, this should be considered.
  bs.insertBookmark(folderId, uri("http://www.mozilla.org/"),
                    bs.DEFAULT_INDEX, "bookmark");
  check_uri_nodes(query, options, 1);
},

function() {
  dump("\n\n*** TEST: folder in an excludeItems root\n");
  // This is the folder we will check for children.
  var folderId = bs.createFolder(bs.toolbarFolder, "folder", bs.DEFAULT_INDEX);

  // Create a folder and a query node inside it, these should not be considered
  // uri nodes.
  bs.createFolder(folderId, "inside folder", bs.DEFAULT_INDEX);
  bs.insertBookmark(folderId, uri("place:sort=1"), bs.DEFAULT_INDEX, "inside query");

  var query = hs.getNewQuery();
  query.setFolders([bs.toolbarFolder], 1);
  var options = hs.getNewQueryOptions();
  options.excludeItems = true;

  dump("Check folder without uri nodes\n");
  check_uri_nodes(query, options, 0);

  dump("Check folder with uri nodes\n");
  // Add an uri node, this should be considered.
  bs.insertBookmark(folderId, uri("http://www.mozilla.org/"),
                    bs.DEFAULT_INDEX, "bookmark");
  check_uri_nodes(query, options, 1);
},

function() {
  dump("\n\n*** TEST: query\n");
  // This is the query we will check for children.
  bs.insertBookmark(bs.toolbarFolder, uri("place:folder=BOOKMARKS_MENU&sort=1"),
                    bs.DEFAULT_INDEX, "inside query");

  // Create a folder and a query node inside it, these should not be considered
  // uri nodes.
  bs.createFolder(bs.bookmarksMenuFolder, "inside folder", bs.DEFAULT_INDEX);
  bs.insertBookmark(bs.bookmarksMenuFolder, uri("place:sort=1"),
                    bs.DEFAULT_INDEX, "inside query");

  var query = hs.getNewQuery();
  query.setFolders([bs.toolbarFolder], 1);
  var options = hs.getNewQueryOptions();

  dump("Check query without uri nodes\n");
  check_uri_nodes(query, options, 0);

  dump("Check query with uri nodes\n");
  // Add an uri node, this should be considered.
  bs.insertBookmark(bs.bookmarksMenuFolder, uri("http://www.mozilla.org/"),
                    bs.DEFAULT_INDEX, "bookmark");
  check_uri_nodes(query, options, 1);
},

function() {
  dump("\n\n*** TEST: excludeItems Query\n");
  // This is the query we will check for children.
  bs.insertBookmark(bs.toolbarFolder, uri("place:folder=BOOKMARKS_MENU&sort=8"),
                    bs.DEFAULT_INDEX, "inside query");

  // Create a folder and a query node inside it, these should not be considered
  // uri nodes.
  bs.createFolder(bs.bookmarksMenuFolder, "inside folder", bs.DEFAULT_INDEX);
  bs.insertBookmark(bs.bookmarksMenuFolder, uri("place:sort=1"),
                    bs.DEFAULT_INDEX, "inside query");

  var query = hs.getNewQuery();
  query.setFolders([bs.toolbarFolder], 1);
  var options = hs.getNewQueryOptions();
  options.excludeItems = true;

  dump("Check folder without uri nodes\n");
  check_uri_nodes(query, options, 0);

  dump("Check folder with uri nodes\n");
  // Add an uri node, this should be considered.
  bs.insertBookmark(bs.bookmarksMenuFolder, uri("http://www.mozilla.org/"),
                    bs.DEFAULT_INDEX, "bookmark");
  check_uri_nodes(query, options, 1);
},

function() {
  dump("\n\n*** TEST: !expandQueries Query\n");
  // This is the query we will check for children.
  bs.insertBookmark(bs.toolbarFolder, uri("place:folder=BOOKMARKS_MENU&sort=8"),
                    bs.DEFAULT_INDEX, "inside query");

  // Create a folder and a query node inside it, these should not be considered
  // uri nodes.
  bs.createFolder(bs.bookmarksMenuFolder, "inside folder", bs.DEFAULT_INDEX);
  bs.insertBookmark(bs.bookmarksMenuFolder, uri("place:sort=1"),
                    bs.DEFAULT_INDEX, "inside query");

  var query = hs.getNewQuery();
  query.setFolders([bs.toolbarFolder], 1);
  var options = hs.getNewQueryOptions();
  options.expandQueries = false;

  dump("Check folder without uri nodes\n");
  check_uri_nodes(query, options, 0);

  dump("Check folder with uri nodes\n");
  // Add an uri node, this should be considered.
  bs.insertBookmark(bs.bookmarksMenuFolder, uri("http://www.mozilla.org/"),
                    bs.DEFAULT_INDEX, "bookmark");
  check_uri_nodes(query, options, 1);
}

];

/**
 * Executes a query and checks number of uri nodes in the first container in
 * query's results.  To correctly test a container ensure that the query will
 * return only your container in the first level.
 *
 * @param  aQuery
 *         nsINavHistoryQuery object defining the query
 * @param  aOptions
 *         nsINavHistoryQueryOptions object defining the query's options
 * @param  aExpectedURINodes
 *         number of expected uri nodes
 */
function check_uri_nodes(aQuery, aOptions, aExpectedURINodes) {
  var result = hs.executeQuery(aQuery, aOptions);
  var root = result.root;
  root.containerOpen = true;
  var node = root.getChild(0);
  do_check_eq(PU.hasChildURIs(node), aExpectedURINodes > 0);
  do_check_eq(PU.getURLsForContainerNode(node).length, aExpectedURINodes);
  root.containerOpen = false;
}

add_task(function* () {
  for (let test of tests) {
    yield PlacesUtils.bookmarks.eraseEverything();
    test();
  }

  // Cleanup.
  yield PlacesUtils.bookmarks.eraseEverything();
});