Bug 1128821 - Ensure radio on before test. r=hsinyi

This commit is contained in:
Szu-Yu Chen [:aknow] 2015-03-06 18:04:26 +08:00
parent ebb67095e6
commit f58285c90a
2 changed files with 60 additions and 41 deletions

View File

@ -167,7 +167,7 @@ let emulator = (function() {
} else {
return waitForEvent(aTarget, "callschanged",
event => event.call == aExpectedCall)
.then(event => event.call)
.then(event => event.call);
}
}
@ -1053,6 +1053,21 @@ let emulator = (function() {
return Promise.all(promises);
}
function setRadioEnabledAll(enabled) {
let promises = [];
let numOfSim = navigator.mozMobileConnections.length;
for (let i = 0; i < numOfSim; i++) {
let connection = navigator.mozMobileConnections[i];
ok(connection instanceof MozMobileConnection,
"connection[" + i + "] is instanceof " + connection.constructor);
promises.push(setRadioEnabled(connection, enabled));
}
return Promise.all(promises);
}
/**
* Public members.
*/
@ -1087,21 +1102,38 @@ let emulator = (function() {
this.gHangUpConference = hangUpConference;
this.gSetupConference = setupConference;
this.gSetRadioEnabled = setRadioEnabled;
this.gSetRadioEnabledAll = setRadioEnabledAll;
}());
function _startTest(permissions, test) {
function permissionSetUp() {
SpecialPowers.setBoolPref("dom.mozSettings.enabled", true);
for (let per of permissions) {
SpecialPowers.addPermission(per, true, document);
}
function typesToPermissions(types) {
return types.map(type => {
return {
"type": type,
"allow": 1,
"context": document
};
});
}
function permissionTearDown() {
SpecialPowers.clearUserPref("dom.mozSettings.enabled");
for (let per of permissions) {
SpecialPowers.removePermission(per, document);
function ensureRadio() {
log("== Ensure Radio ==");
return new Promise(function(resolve, reject) {
SpecialPowers.pushPermissions(typesToPermissions(["mobileconnection"]), () => {
gSetRadioEnabledAll(true).then(() => {
SpecialPowers.popPermissions(() => {
resolve();
});
});
});
});
}
function permissionSetUp() {
log("== Permission SetUp ==");
return new Promise(function(resolve, reject) {
SpecialPowers.pushPermissions(typesToPermissions(permissions), resolve);
});
}
let debugPref;
@ -1114,14 +1146,18 @@ function _startTest(permissions, test) {
SpecialPowers.setBoolPref(kPrefRilDebuggingEnabled, true);
log("Set debugging pref: " + debugPref + " => true");
permissionSetUp();
return Promise.resolve()
.then(ensureRadio)
.then(permissionSetUp)
.then(() => {
// Make sure that we get the telephony after adding permission.
telephony = window.navigator.mozTelephony;
ok(telephony);
conference = telephony.conferenceGroup;
ok(conference);
return gClearCalls().then(gCheckInitialState);
})
.then(gClearCalls)
.then(gCheckInitialState);
}
// Extend finish() with tear down.
@ -1132,8 +1168,6 @@ function _startTest(permissions, test) {
log("== Test TearDown ==");
emulator.waitFinish()
.then(() => {
permissionTearDown();
// Restore debugging pref.
SpecialPowers.setBoolPref(kPrefRilDebuggingEnabled, debugPref);
log("Set debugging pref: true => " + debugPref);

View File

@ -8,23 +8,8 @@ const normalNumber = "0912345678";
const emergencyNumber = "112";
let outCall;
function setRadioEnabledAll(enabled) {
let promises = [];
let numOfSim = navigator.mozMobileConnections.length;
for (let i = 0; i < numOfSim; i++) {
let connection = navigator.mozMobileConnections[i];
ok(connection instanceof MozMobileConnection,
"connection[" + i + "] is instanceof " + connection.constructor);
promises.push(gSetRadioEnabled(connection, enabled));
}
return Promise.all(promises);
}
function testDial_NormalNumber() {
return setRadioEnabledAll(false)
return gSetRadioEnabledAll(false)
.then(() => gDial(normalNumber))
.catch(cause => {
is(cause, "RadioNotAvailable");
@ -33,7 +18,7 @@ function testDial_NormalNumber() {
}
function testDial_EmergencyNumber() {
return setRadioEnabledAll(false)
return gSetRadioEnabledAll(false)
.then(() => gDial(emergencyNumber))
.then(call => { outCall = call; })
.then(() => gRemoteAnswer(outCall))
@ -42,7 +27,7 @@ function testDial_EmergencyNumber() {
}
function testDialEmergency_NormalNumber() {
return setRadioEnabledAll(false)
return gSetRadioEnabledAll(false)
.then(() => gDialEmergency(normalNumber))
.catch(cause => {
is(cause, "RadioNotAvailable");
@ -51,7 +36,7 @@ function testDialEmergency_NormalNumber() {
}
function testDialEmergency_EmergencyNumber() {
return setRadioEnabledAll(false)
return gSetRadioEnabledAll(false)
.then(() => gDialEmergency(emergencyNumber))
.then(call => { outCall = call; })
.then(() => gRemoteAnswer(outCall))
@ -66,7 +51,7 @@ startTestWithPermissions(['mobileconnection'], function() {
.then(() => testDialEmergency_NormalNumber())
.then(() => testDialEmergency_EmergencyNumber())
.catch(error => ok(false, "Promise reject: " + error))
.then(() => setRadioEnabledAll(true))
.then(() => gSetRadioEnabledAll(true))
.catch(error => ok(false, "Promise reject: " + error))
.then(finish);
});