Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: browser/components/urlbar/tests/unit/xpcshell.toml
/* 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
/**
* sure that multiple parameter queries get spaces converted to +, + converted
* to %2B, non-ascii become escaped, and pages in history that match the
* keyword uses the page's title.
*
* same keyword appear in the list.
*/
testEngine_setup();
add_task(async function test_keyword_search() {
await PlacesTestUtils.addVisits([
{ uri: uri1 },
{ uri: uri2 },
{ uri: uri3 },
{ uri: uri6 },
{ uri: uri7 },
]);
await PlacesTestUtils.addBookmarkWithDetails({
uri: uri1,
title: "Keyword",
keyword: "key",
});
await PlacesTestUtils.addBookmarkWithDetails({
uri: uri1,
title: "Post",
keyword: "post",
postData: "post_search=%s",
});
await PlacesTestUtils.addBookmarkWithDetails({
uri: uri3,
title: "Encoded",
keyword: "encoded",
});
await PlacesTestUtils.addBookmarkWithDetails({
uri: uri4,
title: "Charset",
keyword: "charset",
});
await PlacesTestUtils.addBookmarkWithDetails({
uri: uri2,
title: "Noparam",
keyword: "noparam",
});
await PlacesTestUtils.addBookmarkWithDetails({
uri: uri2,
title: "Noparam-Post",
keyword: "post_noparam",
postData: "noparam=1",
});
await PlacesTestUtils.addBookmarkWithDetails({
uri: uri5,
title: "Keyword",
keyword: "key2",
});
await PlacesTestUtils.addBookmarkWithDetails({
uri: uri6,
title: "Charset-history",
keyword: "charset_history",
});
await PlacesUtils.history.update({
url: uri6,
annotations: new Map([[PlacesUtils.CHARSET_ANNO, "ISO-8859-1"]]),
});
info("Plain keyword query");
let context = createContext("key term", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: term",
heuristic: true,
}),
],
});
info("Plain keyword UC");
context = createContext("key TERM", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: TERM",
heuristic: true,
}),
],
});
info("Multi-word keyword query");
context = createContext("key multi word", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: multi word",
heuristic: true,
}),
],
});
info("Keyword query with +");
context = createContext("key blocking+", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: blocking+",
heuristic: true,
}),
],
});
info("Keyword query with *");
// We need a space before the asterisk to ensure it's considered a restriction
// token otherwise it will be a regular string character.
context = createContext("key blocking *", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: blocking *",
heuristic: true,
}),
],
});
info("Keyword query with?");
context = createContext("key blocking?", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: blocking?",
heuristic: true,
}),
],
});
info("Keyword query with ?");
context = createContext("key blocking ?", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: blocking ?",
heuristic: true,
}),
],
});
info("Unescaped term in query");
// ... but note that we call encodeURIComponent() on the query string when we
// build the URL, so the expected result will have the ユニコード substring
// encoded in the URL.
context = createContext("key ユニコード", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: ユニコード",
heuristic: true,
}),
],
});
info("Keyword that happens to match a page");
context = createContext("key ThisPageIsInHistory", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: ThisPageIsInHistory",
heuristic: true,
}),
],
});
info("Keyword with partial page match");
context = createContext("key ThisPage", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: ThisPage",
heuristic: true,
}),
// Only the most recent bookmark for the URL:
makeBookmarkResult(context, {
title: "Noparam-Post",
}),
],
});
// For the keyword with no query terms (with or without space after), the
// domain is different from the other tests because otherwise all the other
// test bookmarks and history entries would be matches.
info("Keyword without query (without space)");
context = createContext("key2", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key2",
heuristic: true,
}),
makeBookmarkResult(context, {
uri: uri5,
title: "Keyword",
}),
],
});
info("Keyword without query (with space)");
context = createContext("key2 ", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key2",
heuristic: true,
}),
makeBookmarkResult(context, {
uri: uri5,
title: "Keyword",
}),
],
});
info("POST Keyword");
context = createContext("post foo", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "post",
title: "abc: foo",
postData: "post_search=foo",
heuristic: true,
}),
],
});
info("escaping with default UTF-8 charset");
context = createContext("encoded foé", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "encoded",
title: "abc: foé",
heuristic: true,
}),
],
});
info("escaping with forced ISO-8859-1 charset");
context = createContext("charset foé", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "charset",
title: "abc: foé",
heuristic: true,
}),
],
});
info("escaping with ISO-8859-1 charset annotated in history");
context = createContext("charset_history foé", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "charset_history",
title: "ghi: foé",
heuristic: true,
}),
],
});
context = createContext("encoded +/@", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "encoded",
title: "abc: +/@",
heuristic: true,
}),
],
});
context = createContext("charset +/@", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "charset",
title: "abc: +/@",
heuristic: true,
}),
],
});
context = createContext(" key test", { isPrivate: false });
await check_results({
context,
matches: [
makeKeywordSearchResult(context, {
keyword: "key",
title: "abc: test",
heuristic: true,
}),
],
});
await check_results({
context,
matches: [
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
heuristic: true,
providerName: "HeuristicFallback",
}),
makeVisitResult(context, {
uri: uri7,
}),
],
});
await cleanupPlaces();
});