Bug 811580 - Develop WebAPI test for MobileConnection.data, update manifest; r=jgriffin

This commit is contained in:
Rob Wood 2012-12-11 09:06:15 -08:00
parent a8aeeaf408
commit 8b4e36f7e2
3 changed files with 238 additions and 0 deletions

View File

@ -10,3 +10,5 @@ disabled = Bug 808783
[test_mobile_operator_names.js]
[test_mobile_preferred_network_type.js]
disabled = Bug 808783
[test_mobile_data_location.js]
[test_mobile_data_state.js]

View File

@ -0,0 +1,115 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 20000;
SpecialPowers.addPermission("mobileconnection", true, document);
let mobileConnection = navigator.mozMobileConnection;
function verifyInitialState() {
log("Verifying initial state.");
ok(mobileConnection instanceof MozMobileConnection,
"mobileConnection is instanceof " + mobileConnection.constructor);
testStartingCellLocation();
}
function testStartingCellLocation() {
// Get the current emulator data cell location
log("Getting the starting GSM location from the emulator.");
runEmulatorCmd("gsm location", function(result) {
log("Emulator callback.");
is(result[0].substring(0,3), "lac", "lac output");
is(result[1].substring(0,2), "ci", "ci output");
is(result[2], "OK", "emulator ok");
let emulatorStartLac = result[0].substring(5);
log("Emulator GSM location LAC is '" + emulatorStartLac + "'.");
let emulatorStartCid = result[1].substring(4);
log("Emulator GSM location CID is '" + emulatorStartCid + "'.");
log("mobileConnection.data.cell.gsmLocationAreaCode is '"
+ mobileConnection.data.cell.gsmLocationAreaCode + "'.");
log("mobileConnection.data.cell.gsmCellId is '"
+ mobileConnection.data.cell.gsmCellId + "'.");
// Verify the mobileConnection.data.cell location matches emulator values
if (emulatorStartLac == -1) {
// Emulator initializes LAC to -1, corresponds to these values
is(mobileConnection.data.cell.gsmLocationAreaCode,
65535, "starting LAC");
} else {
// A previous test changed the LAC, so verify API matches emulator
is(mobileConnection.data.cell.gsmLocationAreaCode,
emulatorStartLac, "starting LAC");
}
if (emulatorStartCid == -1) {
// Emulator initializes CID to -1, corresponds to these values
is(mobileConnection.data.cell.gsmCellId, 268435455, "starting CID");
} else {
// A previous test changed the CID, so verify API matches emulator
is(mobileConnection.data.cell.gsmCellId,
emulatorStartCid, "starting CID");
}
// Now test changing the GSM location
testChangeCellLocation(emulatorStartLac, emulatorStartCid);
});
}
function testChangeCellLocation(emulatorStartLac, emulatorStartCid) {
// Change emulator GSM location and verify mobileConnection.data.cell values
let newLac = 1000;
let newCid = 2000;
let gotCallback = false;
// Ensure values will actually be changed
if (newLac == emulatorStartLac) { newLac++; };
if (newCid == emulatorStartCid) { newCid++; };
// Setup 'ondatachange' event listener
mobileConnection.addEventListener("datachange", function ondatachange() {
mobileConnection.removeEventListener("datachange", ondatachange);
log("Received 'ondatachange' event.");
log("mobileConnection.data.cell.gsmLocationAreaCode is now '"
+ mobileConnection.data.cell.gsmLocationAreaCode + "'.");
log("mobileConnection.data.cell.gsmCellId is now '"
+ mobileConnection.data.cell.gsmCellId + "'.");
is(mobileConnection.data.cell.gsmLocationAreaCode, newLac,
"data.cell.gsmLocationAreaCode");
is(mobileConnection.data.cell.gsmCellId, newCid, "data.cell.gsmCellId");
waitFor(restoreLocation(emulatorStartLac, emulatorStartCid), function() {
return(gotCallback);
});
});
// Use emulator command to change GSM location
log("Changing emulator GSM location to '" + newLac + ", " + newCid
+ "' and waiting for 'ondatachange' event.");
gotCallback = false;
runEmulatorCmd("gsm location " + newLac + " " + newCid, function(result) {
is(result[0], "OK");
log("Emulator callback.");
gotCallback = true;
});
}
function restoreLocation(lac, cid) {
// Restore the emulator GSM location back to what it was originally
log("Restoring emulator GSM location back to '" + lac + ", " + cid + "'.");
runEmulatorCmd("gsm location " + lac + " " + cid, function(result) {
log("Emulator callback.");
is(result[0], "OK");
cleanUp();
});
}
function cleanUp() {
mobileConnection.ondatachange = null;
SpecialPowers.removePermission("mobileconnection", document);
finish();
}
// Start the test
verifyInitialState();

View File

@ -0,0 +1,121 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 30000;
SpecialPowers.addPermission("mobileconnection", true, document);
let mobileConnection = navigator.mozMobileConnection;
function verifyInitialState() {
log("Verifying initial state.");
ok(mobileConnection instanceof MozMobileConnection,
"mobileConnection is instanceof " + mobileConnection.constructor);
// Want to start test with mobileConnection.data.state 'registered'
// This is the default state; if it is not currently this value then set it
log("Starting mobileConnection.data.state is: '"
+ mobileConnection.data.state + "'.");
if (mobileConnection.data.state != "registered") {
changeDataStateAndVerify("home", "registered", testUnregistered);
} else {
testUnregistered();
}
}
function changeDataStateAndVerify(dataState, expected, nextFunction) {
let gotCallback = false;
// Change the mobileConnection.data.state via 'gsm data' command
log("Changing emulator data state to '" + dataState
+ "' and waiting for 'ondatachange' event.");
// Setup 'ondatachange' event handler
mobileConnection.addEventListener("datachange", function ondatachange() {
mobileConnection.removeEventListener("datachange", ondatachange);
log("Received 'ondatachange' event.");
log("mobileConnection.data.state is now '"
+ mobileConnection.data.state + "'.");
is(mobileConnection.data.state, expected, "data.state");
waitFor(nextFunction, function() {
return(gotCallback);
});
});
// Change the emulator data state
gotCallback = false;
runEmulatorCmd("gsm data " + dataState, function(result) {
is(result[0], "OK");
log("Emulator callback complete.");
gotCallback = true;
});
}
function testUnregistered() {
log("Test 1: Unregistered.");
// Set emulator data state to 'unregistered' and verify
// Expect mobileConnection.data.state to be 'notsearching'
changeDataStateAndVerify("unregistered", "notSearching", testRoaming);
}
function testRoaming() {
log("Test 2: Roaming.");
// Set emulator data state to 'roaming' and verify
// Expect mobileConnection.data.state to be 'registered'
changeDataStateAndVerify("roaming", "registered", testOff);
}
function testOff() {
log("Test 3: Off.");
// Set emulator data state to 'off' and verify
// Expect mobileConnection.data.state to be 'notsearching'
changeDataStateAndVerify("off", "notSearching", testSearching);
}
function testSearching() {
log("Test 4: Searching.");
// Set emulator data state to 'searching' and verify
// Bug 819533: WebMobileConnection data/voice state incorrect when emulator
// data state is 'searching'. So until fixed, expect 'registered'.
// changeDataStateAndVerify("searching", "searching", testDenied);
log("* When Bug 819533 is fixed, change this test to expect 'searching' *");
changeDataStateAndVerify("searching", "registered", testDenied);
}
function testDenied() {
log("Test 5: Denied.");
// Set emulator data state to 'denied' and verify
// Expect mobileConnection.data.state to be 'denied'
changeDataStateAndVerify("denied", "denied", testOn);
}
function testOn() {
log("Test 6: On.");
// Set emulator data state to 'on' and verify
// Expect mobileConnection.data.state to be 'registered'
changeDataStateAndVerify("on", "registered", testOffAgain);
}
function testOffAgain() {
log("Test 7: Off again.");
// Set emulator data state to 'off' and verify
// Expect mobileConnection.data.state to be 'notsearching'
changeDataStateAndVerify("off", "notSearching", testHome);
}
function testHome() {
log("Test 8: Home.");
// Set emulator data state to 'home' and verify
// Expect mobileConnection.data.state to be 'registered'
changeDataStateAndVerify("home", "registered", cleanUp);
}
function cleanUp() {
mobileConnection.ondatachange = null;
SpecialPowers.removePermission("mobileconnection", document);
finish();
}
// Start the test
verifyInitialState();