summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_addEngineWithDetailsObject.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_addEngineWithDetailsObject.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_addEngineWithDetailsObject.js92
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);
+});