118 lines
3.3 KiB
JavaScript
118 lines
3.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* 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"
|
|
);
|
|
}
|