tenfourfox/dom/mobileconnection/tests/marionette/test_mobile_call_forwarding.js

105 lines
3.6 KiB
JavaScript
Raw Normal View History

2017-04-19 07:56:45 +00:00
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = "head.js";
const TEST_DATA = [
{
action: MozMobileConnection.CALL_FORWARD_ACTION_REGISTRATION,
reason: MozMobileConnection.CALL_FORWARD_REASON_MOBILE_BUSY,
number: "0912345678",
timeSeconds: 5,
// Currently gecko only support ICC_SERVICE_CLASS_VOICE.
serviceClass: MozMobileConnection.ICC_SERVICE_CLASS_VOICE
}, {
action: MozMobileConnection.CALL_FORWARD_ACTION_ENABLE,
reason: MozMobileConnection.CALL_FORWARD_REASON_NO_REPLY,
number: "+886912345678",
timeSeconds: 20,
// Currently gecko only support ICC_SERVICE_CLASS_VOICE.
serviceClass: MozMobileConnection.ICC_SERVICE_CLASS_VOICE
}
];
function testSetCallForwardingOption(aOptions) {
log("Test setting call forwarding to " + JSON.stringify(aOptions));
let promises = [];
// Check cfstatechange event.
promises.push(waitForManagerEvent("cfstatechange").then(function(aEvent) {
is(aEvent.action, aOptions.action, "check action");
is(aEvent.reason, aOptions.reason, "check reason");
is(aEvent.number, aOptions.number, "check number");
is(aEvent.timeSeconds, aOptions.timeSeconds, "check timeSeconds");
is(aEvent.serviceClass, aOptions.serviceClass, "check serviceClass");
}));
// Check DOMRequest's result.
promises.push(setCallForwardingOption(aOptions).then(null, (aError) => {
ok(false, "got '" + aError.name + "' error");
}));
return Promise.all(promises);
}
function testGetCallForwardingOption(aReason, aExpectedResult) {
log("Test getting call forwarding for " + aReason);
return getCallForwardingOption(aReason)
.then(function resolve(aResults) {
is(Array.isArray(aResults), true, "results should be an array");
for (let i = 0; i < aResults.length; i++) {
let result = aResults[i];
// Only need to check the result containing the serviceClass that we are
// interesting in.
if (!(result.serviceClass & aExpectedResult.serviceClass)) {
continue;
}
let expectedActive =
aExpectedResult.action === MozMobileConnection.CALL_FORWARD_ACTION_ENABLE ||
aExpectedResult.action === MozMobileConnection.CALL_FORWARD_ACTION_REGISTRATION;
is(result.active, expectedActive, "check active");
is(result.reason, aExpectedResult.reason, "check reason");
is(result.number, aExpectedResult.number, "check number");
is(result.timeSeconds, aExpectedResult.timeSeconds, "check timeSeconds");
}
}, function reject(aError) {
ok(false, "got '" + aError.name + "' error");
});
}
function clearAllCallForwardingSettings() {
log("Clear all call forwarding settings");
let promise = Promise.resolve();
for (let reason = MozMobileConnection.CALL_FORWARD_REASON_UNCONDITIONAL;
reason <= MozMobileConnection.CALL_FORWARD_REASON_ALL_CONDITIONAL_CALL_FORWARDING;
reason++) {
let options = {
reason: reason,
action: MozMobileConnection.CALL_FORWARD_ACTION_ERASURE
};
promise =
promise.then(() => setCallForwardingOption(options).then(null, () => {}));
}
return promise;
}
// Start tests
startTestCommon(function() {
let promise = Promise.resolve();
for (let i = 0; i < TEST_DATA.length; i++) {
let data = TEST_DATA[i];
promise = promise.then(() => testSetCallForwardingOption(data))
.then(() => testGetCallForwardingOption(data.reason, data));
}
// reset call forwarding settings.
return promise.then(null, () => {})
.then(() => clearAllCallForwardingSettings());
});