diff -r 000000000000 -r 6474c204b198 dom/fmradio/test/marionette/test_enable_disable.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/fmradio/test/marionette/test_enable_disable.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,85 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +MARIONETTE_TIMEOUT = 10000; + +SpecialPowers.addPermission("fmradio", true, document); + +let FMRadio = window.navigator.mozFMRadio; + +function verifyInitialState() { + log("Verifying initial state."); + ok(FMRadio); + is(FMRadio.enabled, false); + + log("Verifying attributes when disabled."); + is(FMRadio.frequency, null); + ok(FMRadio.frequencyLowerBound); + ok(FMRadio.frequencyUpperBound); + ok(FMRadio.frequencyUpperBound > FMRadio.frequencyLowerBound); + ok(FMRadio.channelWidth); + + enableFMRadio(); +} + +function enableFMRadio() { + log("Verifying behaviors when enabled."); + var frequency = FMRadio.frequencyLowerBound + FMRadio.channelWidth; + var request = FMRadio.enable(frequency); + ok(request, "FMRadio.enable(r" + frequency + ") returns request"); + + request.onsuccess = function() { + ok(FMRadio.enabled); + ok(typeof FMRadio.frequency == "number"); + ok(FMRadio.frequency > FMRadio.frequencyLowerBound); + }; + + request.onerror = function() { + ok(null, "Failed to enable"); + }; + + var enabled = false; + FMRadio.onenabled = function() { + FMRadio.onenabled = null; + enabled = FMRadio.enabled; + }; + + FMRadio.onfrequencychange = function() { + log("Check if 'onfrequencychange' event is fired after the 'enabled' event"); + FMRadio.onfrequencychange = null; + ok(enabled, "FMRadio is enabled when handling `onfrequencychange`"); + disableFMRadio(); + }; +} + +function disableFMRadio() { + log("Verify behaviors when disabled"); + + // There are two possibilities which depends on the system + // process scheduling (bug 911063 comment 0): + // - seek fails + // - seek's onsuccess fires before disable's onsucess + var seekRequest = FMRadio.seekUp(); + var seekCompletes = false; + var failedToSeek = false; + seekRequest.onerror = function() { + ok(!seekCompletes); + failedToSeek = true; + }; + + seekRequest.onsuccess = function() { + ok(!failedToSeek); + seekCompletes = true; + }; + + FMRadio.disable(); + FMRadio.ondisabled = function() { + FMRadio.ondisabled = null; + ok(seekCompletes || failedToSeek); + ok(!FMRadio.enabled); + finish(); + }; +} + +verifyInitialState(); +