Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
/**
* Tests inheritance of certain query options like:
* excludeItems, excludeQueries, expandQueries.
*/
"use strict";
add_task(async function () {
await PlacesUtils.bookmarks.insertTree({
guid: PlacesUtils.bookmarks.unfiledGuid,
children: [
{
title: "folder",
type: PlacesUtils.bookmarks.TYPE_FOLDER,
children: [
{
title: "query",
url:
"place:queryType=" +
Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS,
},
{ title: "bm", url: "http://example.com" },
{
type: PlacesUtils.bookmarks.TYPE_SEPARATOR,
},
],
},
{ title: "bm", url: "http://example.com" },
{
type: PlacesUtils.bookmarks.TYPE_SEPARATOR,
},
],
});
await test_query({}, 3, 3, 2);
await test_query({ expandQueries: false }, 3, 3, 0);
await test_query({ excludeItems: true }, 1, 1, 0);
await test_query({ excludeItems: true, expandQueries: false }, 1, 1, 0);
await test_query({ excludeItems: true, excludeQueries: true }, 1, 0, 0);
});
async function test_query(
opts,
expectedRootCc,
expectedFolderCc,
expectedQueryCc
) {
let query = PlacesUtils.history.getNewQuery();
query.setParents([PlacesUtils.bookmarks.unfiledGuid]);
let options = PlacesUtils.history.getNewQueryOptions();
for (const [o, v] of Object.entries(opts)) {
info(`Setting ${o} to ${v}`);
options[o] = v;
}
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
Assert.equal(root.childCount, expectedRootCc, "Checking root child count");
if (root.childCount > 0) {
let folder = root.getChild(0);
Assert.equal(folder.title, "folder", "Found the expected folder");
// Check the folder uri doesn't reflect the root options, since those
// options are inherited and not part of this node declaration.
checkURIOptions(folder.uri);
PlacesUtils.asContainer(folder).containerOpen = true;
Assert.equal(
folder.childCount,
expectedFolderCc,
"Checking folder child count"
);
if (folder.childCount) {
let placeQuery = folder.getChild(0);
PlacesUtils.asQuery(placeQuery).containerOpen = true;
Assert.equal(
placeQuery.childCount,
expectedQueryCc,
"Checking query child count"
);
placeQuery.containerOpen = false;
}
folder.containerOpen = false;
}
let f = await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
type: PlacesUtils.bookmarks.TYPE_FOLDER,
});
checkURIOptions(root.getChild(root.childCount - 1).uri);
await PlacesUtils.bookmarks.remove(f);
root.containerOpen = false;
}
function checkURIOptions(uri) {
info("Checking options for uri " + uri);
let folderOptions = {};
PlacesUtils.history.queryStringToQuery(uri, {}, folderOptions);
folderOptions = folderOptions.value;
Assert.equal(
folderOptions.excludeItems,
false,
"ExcludeItems should not be changed"
);
Assert.equal(
folderOptions.excludeQueries,
false,
"ExcludeQueries should not be changed"
);
Assert.equal(
folderOptions.expandQueries,
true,
"ExpandQueries should not be changed"
);
}