diff options
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_addEngineWithDetailsObject.js')
-rw-r--r-- | toolkit/components/search/tests/xpcshell/test_addEngineWithDetailsObject.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_addEngineWithDetailsObject.js b/toolkit/components/search/tests/xpcshell/test_addEngineWithDetailsObject.js new file mode 100644 index 0000000000..d16c0231c8 --- /dev/null +++ b/toolkit/components/search/tests/xpcshell/test_addEngineWithDetailsObject.js @@ -0,0 +1,92 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const kSearchEngineID = "addEngineWithDetails_test_engine"; +const kSearchEngineURL = "http://example.com/?search={searchTerms}"; +const kSearchSuggestURL = "http://example.com/?suggest={searchTerms}"; +const kIconURL = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="; +const kDescription = "Test Description"; +const kAlias = "alias_foo"; +const kSearchTerm = "foo"; +const kExtensionID = "test@example.com"; +const URLTYPE_SUGGEST_JSON = "application/x-suggestions+json"; +const kSearchEnginePOSTID = "addEngineWithDetails_post_test_engine"; +const kSearchEnginePOSTURL = "http://example.com/"; +const kSearchEnginePOSTData = "search={searchTerms}&extra=more"; + +add_task(async function setup() { + await AddonTestUtils.promiseStartupManager(); +}); + +add_task(async function test_addEngineWithDetails() { + Assert.ok(!Services.search.isInitialized); + + await Services.search.addEngineWithDetails(kSearchEngineID, { + template: kSearchEngineURL, + description: kDescription, + iconURL: kIconURL, + suggestURL: kSearchSuggestURL, + alias: "alias_foo", + extensionID: kExtensionID, + }); + + // An engine added with addEngineWithDetails should have a load path, even + // though we can't point to a specific file. + let engine = Services.search.getEngineByName(kSearchEngineID); + Assert.equal( + engine.wrappedJSObject._loadPath, + "[other]addEngineWithDetails:" + kExtensionID + ); + Assert.equal(engine.description, kDescription); + Assert.equal(engine.iconURI.spec, kIconURL); + Assert.ok(engine.aliases.includes(kAlias)); + + // Set the engine as default; this should set a loadPath verification hash, + // which should ensure we don't show the search reset prompt. + await Services.search.setDefault(engine); + + let expectedURL = kSearchEngineURL.replace("{searchTerms}", kSearchTerm); + let submission = (await Services.search.getDefault()).getSubmission( + kSearchTerm, + null, + "searchbar" + ); + Assert.equal(submission.uri.spec, expectedURL); + let expectedSuggestURL = kSearchSuggestURL.replace( + "{searchTerms}", + kSearchTerm + ); + let submissionSuggest = (await Services.search.getDefault()).getSubmission( + kSearchTerm, + URLTYPE_SUGGEST_JSON + ); + Assert.equal(submissionSuggest.uri.spec, expectedSuggestURL); +}); + +add_task(async function test_addEngineWithDetailsPOST() { + Assert.ok(Services.search.isInitialized); + + await Services.search.addEngineWithDetails(kSearchEnginePOSTID, { + template: kSearchEnginePOSTURL, + method: "POST", + postData: kSearchEnginePOSTData, + }); + + let engine = Services.search.getEngineByName(kSearchEnginePOSTID); + + let expectedPOSTData = kSearchEnginePOSTData.replace( + "{searchTerms}", + kSearchTerm + ); + let submission = engine.getSubmission(kSearchTerm, null, "searchbar"); + Assert.equal(submission.uri.spec, kSearchEnginePOSTURL); + let sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance( + Ci.nsIScriptableInputStream + ); + sis.init(submission.postData); + let data = sis.read(submission.postData.available()); + Assert.equal(data, expectedPOSTData); +}); |