gecko-dev/dom/telephony/test/marionette/test_mmi_call_barring.js

99 lines
3.2 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = "head.js";
// Password is hardcoded as "0000" by default in emulator.
const PASSWORD = "0000";
// Emulator doesn't support BA_ALL(330), BA_MO(333), BA_MT(353).
const CB_TYPES = ["33", "331", "332", "35", "351"];
const CB_TYPES_UNSUPPORTED = ["330", "333", "353"];
// Basic Service - 10: Voice + Fax + SMS.
const BS = "10";
const MMI_SERVICE_CLASS = ["serviceClassVoice", "serviceClassFax",
"serviceClassSms"];
// Call barring doesn't support Registration (**) and Erasure (##) operation.
const OPERATION_UNSUPPORTED = ["**", "##"];
function sendCbMMI(aOperation, aType, aExpectedSuccess, aExpectedStatusMessage) {
let mmi = aOperation + aType + "*" + PASSWORD + "*" + BS + "#";
log("Test " + mmi + " ...");
return gSendMMI(mmi)
.then((aResult) => {
is(aResult.success, aExpectedSuccess, "Check success");
is(aResult.serviceCode, "scCallBarring", "Check serviceCode");
is(aResult.statusMessage, aExpectedStatusMessage, "Check statusMessage");
return aResult;
});
}
function testCallBarring(aEnabled) {
let promise = Promise.resolve();
CB_TYPES.forEach(function(aType) {
promise = promise
// Test setting call barring.
.then(() => sendCbMMI(aEnabled ? "*" : "#", aType, true,
aEnabled ? "smServiceEnabled" : "smServiceDisabled"))
// Test getting call barring.
.then(() => sendCbMMI("*#", aType, true,
aEnabled ? "smServiceEnabledFor": "smServiceDisabled"))
.then(aResult => {
if (aEnabled) {
is(aResult.additionalInformation.length, MMI_SERVICE_CLASS.length,
"Check additionalInformation.length");
for (let i = 0; i < MMI_SERVICE_CLASS.length; i++) {
is(aResult.additionalInformation[i], MMI_SERVICE_CLASS[i],
"Check additionalInformation[" + i + "]");
}
}
});
});
return promise;
}
function testUnsupportType() {
let promise = Promise.resolve();
CB_TYPES_UNSUPPORTED.forEach(function(aType) {
promise = promise
// Test setting call barring.
.then(() => sendCbMMI("*", aType, false, "RequestNotSupported"))
// Test getting call barring.
.then(() => sendCbMMI("*#", aType, false, "RequestNotSupported"));
});
return promise;
}
function testUnsupportedOperation() {
let promise = Promise.resolve();
let types = CB_TYPES.concat(CB_TYPES_UNSUPPORTED);
types.forEach(function(aType) {
OPERATION_UNSUPPORTED.forEach(function(aOperation) {
promise = promise
.then(() => sendCbMMI(aOperation, aType, false,
"emMmiErrorNotSupported"));
});
});
return promise;
}
// Start test.
startTest(function() {
// Activate call barring service.
return testCallBarring(true)
// Deactivate call barring service.
.then(() => testCallBarring(false))
.then(() => testUnsupportType())
.then(() => testUnsupportedOperation())
.catch(error => ok(false, "Promise reject: " + error))
.then(finish);;
});