Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
// This test ensures that tags changes are correctly live-updated in a history
// query.
let timeInMicroseconds = PlacesUtils.toPRTime(Date.now() - 10000);
function newTimeInMicroseconds() {
timeInMicroseconds = timeInMicroseconds + 1000;
return timeInMicroseconds;
}
var gTestData = [
{
isVisit: true,
lastVisit: newTimeInMicroseconds(),
isInQuery: true,
title: "title1",
},
{
isVisit: true,
lastVisit: newTimeInMicroseconds(),
isInQuery: true,
title: "title2",
},
{
isVisit: true,
lastVisit: newTimeInMicroseconds(),
isInQuery: true,
title: "title3",
},
];
function searchNodeHavingUrl(aRoot, aUrl) {
for (let i = 0; i < aRoot.childCount; i++) {
if (aRoot.getChild(i).uri == aUrl) {
return aRoot.getChild(i);
}
}
return undefined;
}
function newQueryWithOptions() {
return [
PlacesUtils.history.getNewQuery(),
PlacesUtils.history.getNewQueryOptions(),
];
}
add_task(async function pages_query() {
await task_populateDB(gTestData);
let [query, options] = newQueryWithOptions();
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
compareArrayToResult([gTestData[0], gTestData[1], gTestData[2]], root);
for (let i = 0; i < root.childCount; i++) {
let node = root.getChild(i);
Assert.equal(node.title, gTestData[i].title);
let uri = NetUtil.newURI(node.uri);
await PlacesTestUtils.addVisits({ uri, title: "changedTitle" });
Assert.equal(node.title, "changedTitle");
await PlacesTestUtils.addVisits({ uri, title: gTestData[i].title });
Assert.equal(node.title, gTestData[i].title);
}
root.containerOpen = false;
await PlacesUtils.history.clear();
});
add_task(async function visits_query() {
await task_populateDB(gTestData);
let [query, options] = newQueryWithOptions();
options.resultType = Ci.nsINavHistoryQueryOptions.RESULTS_AS_VISIT;
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
compareArrayToResult([gTestData[0], gTestData[1], gTestData[2]], root);
for (let testData of gTestData) {
let uri = NetUtil.newURI(testData.uri);
let node = searchNodeHavingUrl(root, testData.uri);
Assert.equal(node.title, testData.title);
await PlacesTestUtils.addVisits({ uri, title: "changedTitle" });
node = searchNodeHavingUrl(root, testData.uri);
Assert.equal(node.title, "changedTitle");
await PlacesTestUtils.addVisits({ uri, title: testData.title });
node = searchNodeHavingUrl(root, testData.uri);
Assert.equal(node.title, testData.title);
}
root.containerOpen = false;
await PlacesUtils.history.clear();
});
add_task(async function pages_searchterm_query() {
await task_populateDB(gTestData);
let [query, options] = newQueryWithOptions();
query.searchTerms = "example";
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
compareArrayToResult([gTestData[0], gTestData[1], gTestData[2]], root);
for (let i = 0; i < root.childCount; i++) {
let node = root.getChild(i);
let uri = NetUtil.newURI(node.uri);
Assert.equal(node.title, gTestData[i].title);
await PlacesTestUtils.addVisits({ uri, title: "changedTitle" });
Assert.equal(node.title, "changedTitle");
await PlacesTestUtils.addVisits({ uri, title: gTestData[i].title });
Assert.equal(node.title, gTestData[i].title);
}
root.containerOpen = false;
await PlacesUtils.history.clear();
});
add_task(async function visits_searchterm_query() {
await task_populateDB(gTestData);
let [query, options] = newQueryWithOptions();
query.searchTerms = "example";
options.resultType = Ci.nsINavHistoryQueryOptions.RESULTS_AS_VISIT;
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
compareArrayToResult([gTestData[0], gTestData[1], gTestData[2]], root);
for (let testData of gTestData) {
let uri = NetUtil.newURI(testData.uri);
let node = searchNodeHavingUrl(root, testData.uri);
Assert.equal(node.title, testData.title);
await PlacesTestUtils.addVisits({ uri, title: "changedTitle" });
node = searchNodeHavingUrl(root, testData.uri);
Assert.equal(node.title, "changedTitle");
await PlacesTestUtils.addVisits({ uri, title: testData.title });
node = searchNodeHavingUrl(root, testData.uri);
Assert.equal(node.title, testData.title);
}
root.containerOpen = false;
await PlacesUtils.history.clear();
});
add_task(async function pages_searchterm_is_title_query() {
await task_populateDB(gTestData);
let [query, options] = newQueryWithOptions();
query.searchTerms = "match";
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
compareArrayToResult([], root);
for (let data of gTestData) {
let uri = NetUtil.newURI(data.uri);
let origTitle = data.title;
data.title = "match";
await PlacesTestUtils.addVisits({
uri,
title: data.title,
visitDate: data.lastVisit,
});
compareArrayToResult([data], root);
data.title = origTitle;
await PlacesTestUtils.addVisits({
uri,
title: data.title,
visitDate: data.lastVisit,
});
compareArrayToResult([], root);
}
root.containerOpen = false;
await PlacesUtils.history.clear();
});
add_task(async function visits_searchterm_is_title_query() {
await task_populateDB(gTestData);
let [query, options] = newQueryWithOptions();
query.searchTerms = "match";
options.resultType = Ci.nsINavHistoryQueryOptions.RESULTS_AS_VISIT;
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
compareArrayToResult([], root);
for (let data of gTestData) {
let uri = NetUtil.newURI(data.uri);
let origTitle = data.title;
data.title = "match";
info("Adding " + uri.spec);
await PlacesTestUtils.addVisits({
uri,
title: data.title,
visitDate: data.lastVisit,
});
compareArrayToResult([data], root);
data.title = origTitle;
info("Clobbering " + uri.spec);
await PlacesTestUtils.addVisits({
uri,
title: data.title,
visitDate: data.lastVisit,
});
compareArrayToResult([], root);
}
root.containerOpen = false;
await PlacesUtils.history.clear();
});