Bug 1274545 - Add a test for user-set keyword & order preservation on search engine update. r=florian
authorIan Moody <moz-ian@perix.co.uk>
Tue, 12 Jul 2016 12:54:19 +0100
changeset 325483 305b50a208ae
parent 325482 4fdc04bd6100
child 325484 929a78239631
push id9810
push usercbook@mozilla.com
push dateThu, 21 Jul 2016 12:04:41 +0000
treeherdermozilla-aurora@929a78239631 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersflorian
bugs1274545
milestone49.0a2
Bug 1274545 - Add a test for user-set keyword & order preservation on search engine update. r=florian
toolkit/components/search/tests/xpcshell/test_engineUpdate.js
toolkit/components/search/tests/xpcshell/xpcshell.ini
new file mode 100644
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_engineUpdate.js
@@ -0,0 +1,50 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/* Test that user-set metadata isn't lost on engine update */
+
+"use strict";
+
+function run_test() {
+  updateAppInfo();
+  useHttpServer();
+
+  run_next_test();
+}
+
+add_task(function* test_engineUpdate() {
+  const KEYWORD = "keyword";
+  const FILENAME = "engine.xml"
+  const TOPIC = "browser-search-engine-modified";
+  const ONE_DAY_IN_MS = 24 * 60 * 60 * 1000;
+
+  yield asyncInit();
+
+  let [engine] = yield addTestEngines([
+    { name: "Test search engine", xmlFileName: FILENAME },
+  ]);
+
+  engine.alias = KEYWORD;
+  Services.search.moveEngine(engine, 0);
+  // can't have an accurate updateURL in the file since we can't know the test
+  // server origin, so manually set it
+  engine.wrappedJSObject._updateURL = gDataUrl + FILENAME;
+
+  yield new Promise(resolve => {
+    Services.obs.addObserver(function obs(subject, topic, data) {
+      if (data == "engine-loaded") {
+        let engine = subject.QueryInterface(Ci.nsISearchEngine);
+        let rawEngine = engine.wrappedJSObject;
+        equal(engine.alias, KEYWORD, "Keyword not cleared by update");
+        equal(rawEngine.getAttr("order"), 1, "Order not cleared by update");
+        Services.obs.removeObserver(obs, TOPIC, false);
+        resolve();
+      }
+    }, TOPIC, false);
+
+    // set last update to 8 days ago, since the default interval is 7, then
+    // trigger an update
+    engine.wrappedJSObject.setAttr("updateexpir", Date.now() - (ONE_DAY_IN_MS * 8));
+    Services.search.QueryInterface(Components.interfaces.nsITimerCallback).notify(null);
+  });
+});
--- a/toolkit/components/search/tests/xpcshell/xpcshell.ini
+++ b/toolkit/components/search/tests/xpcshell/xpcshell.ini
@@ -91,8 +91,9 @@ tags = addons
 [test_geodefaults.js]
 [test_hidden.js]
 [test_currentEngine_fallback.js]
 [test_require_engines_in_cache.js]
 [test_update_telemetry.js]
 [test_svg_icon.js]
 [test_searchReset.js]
 [test_addEngineWithDetails.js]
+[test_engineUpdate.js]