Hello,

One of the reasons developers have been avoiding pushPrefEnv compared to the synchronous set*Pref (with a registerCleanupFunction) is because pushPrefEnv required using a callback function to wait for the preference change before moving on in the test file. This can make the test flow more complicated (especially when using add_task) and therefore harder to follow.

Bug 1197310[1] made pushPrefEnv/popPrefEnv/flushPrefEnv return a promise which resolves when the callbacks would have been called so now you can simply write test code like so:

add_task(function* setup() {
  yield SpecialPowers.pushPrefEnv({"set": [["signon.debug", true]]});
  …
})

As a reminder, the nice thing about pushPrefEnv is that the pref changes are reverted at the end of the test file which avoids them leaking into other tests unintentionally.

There are various places in the tree which wrote their own Promise wrappers for pushPrefEnv so feel free to file follow-up bugs blocking bug 1197310 to remove them.

Cheers,
Matthew N. (:MattN)

[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1197310

P.S. For those of you who didn't hear (since there was no announcement), you can use add_task in mochitest-plain and mochitest-chrome thanks to bug 1187701 if you load …/tests/SimpleTest/SpawnTask.js.
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to