Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* -*- 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;
add_task(async function test_getURLsForContainerNode_folder() {
info("*** TEST: folder");
let bookmarks = await PlacesUtils.bookmarks.insertTree({
guid: PlacesUtils.bookmarks.toolbarGuid,
children: [
{
// This is the folder we will check for children.
title: "folder",
type: PlacesUtils.bookmarks.TYPE_FOLDER,
// Create a folder and a query node inside it, these should not be considered
// uri nodes.
children: [
{
title: "inside folder",
type: PlacesUtils.bookmarks.TYPE_FOLDER,
children: [
{
url: "place:sort=1",
title: "inside query",
},
],
},
],
},
],
});
var query = hs.getNewQuery();
query.setParents([PlacesUtils.bookmarks.toolbarGuid]);
var options = hs.getNewQueryOptions();
info("Check folder without uri nodes");
check_uri_nodes(query, options, 0);
info("Check folder with uri nodes");
// Add an uri node, this should be considered.
await PlacesUtils.bookmarks.insert({
parentGuid: bookmarks[0].guid,
title: "bookmark",
});
check_uri_nodes(query, options, 1);
await PlacesUtils.bookmarks.eraseEverything();
});
add_task(async function test_getURLsForContainerNode_folder_excludeItems() {
info("*** TEST: folder in an excludeItems root");
let bookmarks = await PlacesUtils.bookmarks.insertTree({
guid: PlacesUtils.bookmarks.toolbarGuid,
children: [
{
// This is the folder we will check for children.
title: "folder",
type: PlacesUtils.bookmarks.TYPE_FOLDER,
// Create a folder and a query node inside it, these should not be considered
// uri nodes.
children: [
{
title: "inside folder",
type: PlacesUtils.bookmarks.TYPE_FOLDER,
children: [
{
url: "place:sort=1",
title: "inside query",
},
],
},
],
},
],
});
var query = hs.getNewQuery();
query.setParents([PlacesUtils.bookmarks.toolbarGuid]);
var options = hs.getNewQueryOptions();
options.excludeItems = true;
info("Check folder without uri nodes");
check_uri_nodes(query, options, 0);
info("Check folder with uri nodes");
// Add an uri node, this should be considered.
await PlacesUtils.bookmarks.insert({
parentGuid: bookmarks[0].guid,
title: "bookmark",
});
check_uri_nodes(query, options, 1);
await PlacesUtils.bookmarks.eraseEverything();
});
add_task(async function test_getURLsForContainerNode_query() {
info("*** TEST: query");
// This is the query we will check for children.
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: "inside query",
url: `place:parent=${PlacesUtils.bookmarks.menuGuid}&sort=1`,
});
// Create a folder and a query node inside it, these should not be considered
// uri nodes.
await PlacesUtils.bookmarks.insertTree({
guid: PlacesUtils.bookmarks.menuGuid,
children: [
{
title: "inside folder",
type: PlacesUtils.bookmarks.TYPE_FOLDER,
children: [
{
url: "place:sort=1",
title: "inside query",
},
],
},
],
});
var query = hs.getNewQuery();
query.setParents([PlacesUtils.bookmarks.toolbarGuid]);
var options = hs.getNewQueryOptions();
info("Check query without uri nodes");
check_uri_nodes(query, options, 0);
info("Check query with uri nodes");
// Add an uri node, this should be considered.
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.menuGuid,
title: "bookmark",
});
check_uri_nodes(query, options, 1);
await PlacesUtils.bookmarks.eraseEverything();
});
add_task(async function test_getURLsForContainerNode_query_excludeItems() {
info("*** TEST: excludeItems Query");
// This is the query we will check for children.
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: "inside query",
url: `place:parent=${PlacesUtils.bookmarks.menuGuid}&sort=1`,
});
// Create a folder and a query node inside it, these should not be considered
// uri nodes.
await PlacesUtils.bookmarks.insertTree({
guid: PlacesUtils.bookmarks.menuGuid,
children: [
{
title: "inside folder",
type: PlacesUtils.bookmarks.TYPE_FOLDER,
children: [
{
url: "place:sort=1",
title: "inside query",
},
],
},
],
});
var query = hs.getNewQuery();
query.setParents([PlacesUtils.bookmarks.toolbarGuid]);
var options = hs.getNewQueryOptions();
options.excludeItems = true;
info("Check folder without uri nodes");
check_uri_nodes(query, options, 0);
info("Check folder with uri nodes");
// Add an uri node, this should be considered.
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.menuGuid,
title: "bookmark",
});
check_uri_nodes(query, options, 1);
await PlacesUtils.bookmarks.eraseEverything();
});
add_task(async function test_getURLsForContainerNode_query_excludeQueries() {
info("*** TEST: !expandQueries Query");
// This is the query we will check for children.
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: "inside query",
url: `place:parent=${PlacesUtils.bookmarks.menuGuid}&sort=1`,
});
// Create a folder and a query node inside it, these should not be considered
// uri nodes.
await PlacesUtils.bookmarks.insertTree({
guid: PlacesUtils.bookmarks.menuGuid,
children: [
{
title: "inside folder",
type: PlacesUtils.bookmarks.TYPE_FOLDER,
children: [
{
url: "place:sort=1",
title: "inside query",
},
],
},
],
});
var query = hs.getNewQuery();
query.setParents([PlacesUtils.bookmarks.toolbarGuid]);
var options = hs.getNewQueryOptions();
options.expandQueries = false;
info("Check folder without uri nodes");
check_uri_nodes(query, options, 0);
info("Check folder with uri nodes");
// Add an uri node, this should be considered.
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.menuGuid,
title: "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);
Assert.equal(PU.hasChildURIs(node), aExpectedURINodes > 0);
Assert.equal(PU.getURLsForContainerNode(node).length, aExpectedURINodes);
root.containerOpen = false;
}