118 lines
3.5 KiB
JavaScript
118 lines
3.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const prefix = "https://www.example.com/search";
|
|
|
|
add_setup(async function () {
|
|
SearchTestUtils.setRemoteSettingsConfig([
|
|
{
|
|
identifier: "utf8_param",
|
|
base: {
|
|
charset: "UTF-8",
|
|
urls: {
|
|
search: {
|
|
base: "https://www.example.com/search",
|
|
searchTermParamName: "q",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
identifier: "utf8_url",
|
|
base: {
|
|
charset: "UTF-8",
|
|
urls: {
|
|
search: {
|
|
base: "https://www.example.com/search/{searchTerms}",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{ identifier: "windows1252", base: { charset: "windows-1252" } },
|
|
]);
|
|
await Services.search.init();
|
|
});
|
|
|
|
function testEncode(engine, charset, query, expected) {
|
|
Assert.equal(
|
|
engine.getSubmission(query).uri.spec,
|
|
prefix + expected,
|
|
`Should have correctly encoded for ${charset}`
|
|
);
|
|
}
|
|
|
|
add_task(async function test_getSubmission_utf8_param() {
|
|
let engine = Services.search.getEngineById("utf8_param");
|
|
// Space should be encoded to + since the search terms are a parameter.
|
|
testEncode(engine, "UTF-8", "caff\u00E8 shop +", "?q=caff%C3%A8+shop+%2B");
|
|
});
|
|
|
|
add_task(async function test_getSubmission_utf8_url() {
|
|
let engine = Services.search.getEngineById("utf8_url");
|
|
// Space should be encoded to %20 since the search terms are part of the URL.
|
|
testEncode(engine, "UTF-8", "caff\u00E8 shop +", "/caff%C3%A8%20shop%20%2B");
|
|
});
|
|
|
|
add_task(async function test_getSubmission_windows1252() {
|
|
let engine = Services.search.getEngineById("windows1252");
|
|
testEncode(engine, "windows-1252", "caff\u00E8+", "?q=caff%E8%2B");
|
|
});
|
|
|
|
// Spaces are percent-encoded to either + or %20, depending on the url component.
|
|
add_task(async function test_encoding_of_spaces() {
|
|
info("Testing spaces in query.");
|
|
let engine = await Services.search.addUserEngine({
|
|
name: "user",
|
|
url: "https://example.com/user?q={searchTerms}#ref",
|
|
});
|
|
Assert.equal(
|
|
engine.getSubmission("f o o").uri.spec,
|
|
"https://example.com/user?q=f+o+o#ref",
|
|
"Encodes spaces in query as +."
|
|
);
|
|
await Services.search.removeEngine(engine);
|
|
|
|
info("Testing spaces in path.");
|
|
engine = await Services.search.addUserEngine({
|
|
name: "user",
|
|
url: "https://example.com/user/{searchTerms}?que=ry#ref",
|
|
});
|
|
Assert.equal(
|
|
engine.getSubmission("f o o").uri.spec,
|
|
"https://example.com/user/f%20o%20o?que=ry#ref",
|
|
"Encodes spaces in path as %20."
|
|
);
|
|
await Services.search.removeEngine(engine);
|
|
|
|
info("Testing spaces in ref.");
|
|
engine = await Services.search.addUserEngine({
|
|
name: "user",
|
|
url: "https://example.com/user?que=ry#{searchTerms}",
|
|
});
|
|
Assert.equal(
|
|
engine.getSubmission("f o o").uri.spec,
|
|
"https://example.com/user?que=ry#f%20o%20o",
|
|
"Encodes spaces in ref as %20."
|
|
);
|
|
await Services.search.removeEngine(engine);
|
|
|
|
info("Testing spaces in post data.");
|
|
let params = new URLSearchParams();
|
|
params.append("q", "{searchTerms}");
|
|
engine = await Services.search.addUserEngine({
|
|
name: "user",
|
|
url: "https://example.com/user",
|
|
params,
|
|
method: "POST",
|
|
});
|
|
let submission = engine.getSubmission("f o o");
|
|
Assert.equal(submission.uri.spec, "https://example.com/user");
|
|
Assert.equal(
|
|
SearchTestUtils.getPostDataString(submission),
|
|
"q=f+o+o",
|
|
"Encodes spaces in body as +."
|
|
);
|
|
await Services.search.removeEngine(engine);
|
|
});
|