diff --git a/dom/network/tests/marionette/manifest.ini b/dom/network/tests/marionette/manifest.ini index c3efe02cf34e..59f7a4e3e737 100644 --- a/dom/network/tests/marionette/manifest.ini +++ b/dom/network/tests/marionette/manifest.ini @@ -8,6 +8,7 @@ disabled = Bug 808783 [test_mobile_voice_state.js] [test_mobile_operator_names.js] [test_mobile_preferred_network_type.js] +[test_mobile_preferred_network_type_by_setting.js] disabled = Bug 808783 [test_mobile_data_connection.js] [test_mobile_data_location.js] diff --git a/dom/network/tests/marionette/test_mobile_preferred_network_type.js b/dom/network/tests/marionette/test_mobile_preferred_network_type.js index cdfea19badb8..3f5a6fd086cf 100644 --- a/dom/network/tests/marionette/test_mobile_preferred_network_type.js +++ b/dom/network/tests/marionette/test_mobile_preferred_network_type.js @@ -1,65 +1,141 @@ /* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ + http://creativecommons.org/publicdomain/zero/1.0/ */ MARIONETTE_TIMEOUT = 60000; -const KEY = "ril.radio.preferredNetworkType"; - SpecialPowers.addPermission("mobileconnection", true, document); -SpecialPowers.addPermission("settings-read", true, document); -SpecialPowers.addPermission("settings-write", true, document); -let settings = window.navigator.mozSettings; +let connection = navigator.mozMobileConnections[0]; +ok(connection instanceof MozMobileConnection, + "connection is instanceof " + connection.constructor); -function test_revert_previous_setting_on_invalid_value() { - log("Testing reverting to previous setting on invalid value received"); - let getLock = settings.createLock(); - let getReq = getLock.get(KEY); - getReq.addEventListener("success", function onGetSuccess() { - let originalValue = getReq.result[KEY] || "wcdma/gsm"; +function setPreferredNetworkType(type, callback) { + log("setPreferredNetworkType: " + type); - let setDone = false; - settings.addObserver(KEY, function observer(setting) { - // Mark if the invalid value has been set in db and wait. - if (setting.settingValue == obj[KEY]) { - setDone = true; - return; - } + let request = connection.setPreferredNetworkType(type); + ok(request instanceof DOMRequest, + "request instanceof " + request.constructor); - // Skip any change before marking but keep it as original value. - if (!setDone) { - originalValue = setting.settingValue; - return; - } + request.onsuccess = function onsuccess() { + ok(true, "request success"); + callback(); + } + request.onerror = function onerror() { + ok(false, request.error); + callback(); + } +} - settings.removeObserver(KEY, observer); - is(setting.settingValue, originalValue, "Settings reverted"); - window.setTimeout(cleanUp, 0); - }); +function getPreferredNetworkType(callback) { + log("getPreferredNetworkType"); - let obj = {}; - obj[KEY] = "AnInvalidValue"; - let setLock = settings.createLock(); - setLock.set(obj); - setLock.addEventListener("error", function onSetError() { - ok(false, "cannot set '" + KEY + "'"); + let request = connection.getPreferredNetworkType(); + ok(request instanceof DOMRequest, + "request instanceof " + request.constructor); + + request.onsuccess = function onsuccess() { + ok(true, "request success"); + log("getPreferredNetworkType: " + request.result); + callback(request.result); + } + request.onerror = function onerror() { + ok(false, request.error); + callback(); + } +} + +function failToSetPreferredNetworkType(type, expectedError, callback) { + log("failToSetPreferredNetworkType: " + type + ", expected error: " + + expectedError); + + let request = connection.setPreferredNetworkType(type); + ok(request instanceof DOMRequest, + "request instanceof " + request.constructor); + + request.onsuccess = function onsuccess() { + ok(false, "request should not succeed"); + callback(); + } + request.onerror = function onerror() { + ok(true, "request error"); + is(request.error.name, expectedError); + callback(); + } +} + +function setAndVerifyNetworkType(type) { + setPreferredNetworkType(type, function() { + getPreferredNetworkType(function(result) { + is(result, type); + testPreferredNetworkTypes(); }); }); - getReq.addEventListener("error", function onGetError() { - ok(false, "cannot get default value of '" + KEY + "'"); +} + +function testPreferredNetworkTypes() { + let networkType = supportedTypes.shift(); + if (!networkType) { + runNextTest(); + return; + } + setAndVerifyNetworkType(networkType); +} + +function failToSetAndVerifyNetworkType(type, expectedError, previousType) { + failToSetPreferredNetworkType(type, expectedError, function() { + getPreferredNetworkType(function(result) { + // should return the previous selected type. + is(result, previousType); + testInvalidNetworkTypes(); + }); }); } +function testInvalidNetworkTypes() { + let networkType = invalidTypes.shift(); + if (!networkType) { + runNextTest(); + return; + } + failToSetAndVerifyNetworkType(networkType, "InvalidParameter", + "wcdma/gsm"); +} + +let supportedTypes = [ + 'gsm', + 'wcdma', + 'wcdma/gsm-auto', + 'cdma/evdo', + 'evdo', + 'cdma', + 'wcdma/gsm/cdma/evdo', + 'wcdma/gsm' // restore to default +]; + +let invalidTypes = [ + ' ', + 'AnInvalidType' +]; + +let tests = [ + testPreferredNetworkTypes, + testInvalidNetworkTypes +]; + +function runNextTest() { + let test = tests.shift(); + if (!test) { + cleanUp(); + return; + } + + test(); +} + function cleanUp() { SpecialPowers.removePermission("mobileconnection", document); - SpecialPowers.removePermission("settings-write", document); - SpecialPowers.removePermission("settings-read", document); - finish(); } -waitFor(test_revert_previous_setting_on_invalid_value, function () { - return navigator.mozMobileConnections[0].voice.connected; -}); - +runNextTest(); diff --git a/dom/network/tests/marionette/test_mobile_preferred_network_type_by_setting.js b/dom/network/tests/marionette/test_mobile_preferred_network_type_by_setting.js new file mode 100644 index 000000000000..cdfea19badb8 --- /dev/null +++ b/dom/network/tests/marionette/test_mobile_preferred_network_type_by_setting.js @@ -0,0 +1,65 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +MARIONETTE_TIMEOUT = 60000; + +const KEY = "ril.radio.preferredNetworkType"; + +SpecialPowers.addPermission("mobileconnection", true, document); +SpecialPowers.addPermission("settings-read", true, document); +SpecialPowers.addPermission("settings-write", true, document); + +let settings = window.navigator.mozSettings; + +function test_revert_previous_setting_on_invalid_value() { + log("Testing reverting to previous setting on invalid value received"); + + let getLock = settings.createLock(); + let getReq = getLock.get(KEY); + getReq.addEventListener("success", function onGetSuccess() { + let originalValue = getReq.result[KEY] || "wcdma/gsm"; + + let setDone = false; + settings.addObserver(KEY, function observer(setting) { + // Mark if the invalid value has been set in db and wait. + if (setting.settingValue == obj[KEY]) { + setDone = true; + return; + } + + // Skip any change before marking but keep it as original value. + if (!setDone) { + originalValue = setting.settingValue; + return; + } + + settings.removeObserver(KEY, observer); + is(setting.settingValue, originalValue, "Settings reverted"); + window.setTimeout(cleanUp, 0); + }); + + let obj = {}; + obj[KEY] = "AnInvalidValue"; + let setLock = settings.createLock(); + setLock.set(obj); + setLock.addEventListener("error", function onSetError() { + ok(false, "cannot set '" + KEY + "'"); + }); + }); + getReq.addEventListener("error", function onGetError() { + ok(false, "cannot get default value of '" + KEY + "'"); + }); +} + +function cleanUp() { + SpecialPowers.removePermission("mobileconnection", document); + SpecialPowers.removePermission("settings-write", document); + SpecialPowers.removePermission("settings-read", document); + + finish(); +} + +waitFor(test_revert_previous_setting_on_invalid_value, function () { + return navigator.mozMobileConnections[0].voice.connected; +}); +