michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: MARIONETTE_TIMEOUT = 60000; michael@0: MARIONETTE_HEAD_JS = "head.js"; michael@0: michael@0: const INITIAL_STATES = { michael@0: state: "registered", michael@0: connected: false, michael@0: emergencyCallsOnly: false, michael@0: roaming: false, michael@0: signalStrength: -99, michael@0: relSignalStrength: 44, michael@0: michael@0: cell: { michael@0: gsmLocationAreaCode: 65535, michael@0: gsmCellId: 268435455, michael@0: cdmaBaseStationId: -1, michael@0: cdmaBaseStationLatitude: -2147483648, michael@0: cdmaBaseStationLongitude: -2147483648, michael@0: cdmaSystemId: -1, michael@0: cdmaNetworkId: -1, michael@0: } michael@0: }; michael@0: michael@0: const TEST_DATA = [{ michael@0: // Test state becomes to "unregistered" michael@0: state: "unregistered", michael@0: expected: { michael@0: state: "notSearching", michael@0: connected: false, michael@0: emergencyCallsOnly: true, michael@0: roaming: false, michael@0: signalStrength: null, michael@0: relSignalStrength: null, michael@0: cell: null michael@0: } michael@0: }, { michael@0: // Test state becomes to "searching" michael@0: state: "searching", michael@0: expected: { michael@0: state: "searching", michael@0: connected: false, michael@0: emergencyCallsOnly: true, michael@0: roaming: false, michael@0: signalStrength: null, michael@0: relSignalStrength: null, michael@0: cell: null michael@0: } michael@0: }, { michael@0: // Test state becomes to "denied" michael@0: state: "denied", michael@0: expected: { michael@0: state: "denied", michael@0: connected: false, michael@0: emergencyCallsOnly: true, michael@0: roaming: false, michael@0: signalStrength: null, michael@0: relSignalStrength: null, michael@0: cell: null michael@0: } michael@0: }, { michael@0: // Test state becomes to "roaming" michael@0: // Set emulator's data state to "roaming" won't change the operator's michael@0: // long_name/short_name/mcc/mnc, so that the |data.roaming| will still michael@0: // report false. Please see bug 787967. michael@0: state: "roaming", michael@0: expected: { michael@0: state: "registered", michael@0: connected: false, michael@0: emergencyCallsOnly: false, michael@0: roaming: false, michael@0: signalStrength: -99, michael@0: relSignalStrength: 44, michael@0: cell: { michael@0: gsmLocationAreaCode: 65535, michael@0: gsmCellId: 268435455 michael@0: } michael@0: } michael@0: }, { michael@0: // Reset state to default value. michael@0: state: "home", michael@0: expected: { michael@0: state: "registered", michael@0: connected: false, michael@0: emergencyCallsOnly: false, michael@0: roaming: false, michael@0: signalStrength: -99, michael@0: relSignalStrength: 44, michael@0: cell: { michael@0: gsmLocationAreaCode: 65535, michael@0: gsmCellId: 268435455 michael@0: } michael@0: } michael@0: } michael@0: ]; michael@0: michael@0: function compareTo(aPrefix, aFrom, aTo) { michael@0: for (let field in aTo) { michael@0: let fullName = aPrefix + field; michael@0: michael@0: let lhs = aFrom[field]; michael@0: let rhs = aTo[field]; michael@0: ok(true, "lhs=" + JSON.stringify(lhs) + ", rhs=" + JSON.stringify(rhs)); michael@0: if (typeof rhs !== "object") { michael@0: is(lhs, rhs, fullName); michael@0: } else if (rhs) { michael@0: ok(lhs, fullName); michael@0: compareTo(fullName + ".", lhs, rhs); michael@0: } else { michael@0: is(lhs, null, fullName); michael@0: } michael@0: } michael@0: } michael@0: michael@0: function verifyDataInfo(aExpected) { michael@0: compareTo("data.", mobileConnection.data, aExpected); michael@0: } michael@0: michael@0: /* Test Data State Changed */ michael@0: function testDataStateUpdate(aNewState, aExpected) { michael@0: log("Test data info with state='" + aNewState + "'"); michael@0: michael@0: // Set emulator's lac/cid and wait for 'ondatachange' event. michael@0: return setEmulatorVoiceDataStateAndWait("data", aNewState) michael@0: .then(() => verifyDataInfo(aExpected)); michael@0: } michael@0: michael@0: startTestCommon(function() { michael@0: log("Test initial data connection info"); michael@0: michael@0: verifyDataInfo(INITIAL_STATES); michael@0: michael@0: let promise = Promise.resolve(); michael@0: for (let i = 0; i < TEST_DATA.length; i++) { michael@0: let entry = TEST_DATA[i]; michael@0: promise = michael@0: promise.then(testDataStateUpdate.bind(null, entry.state, entry.expected)); michael@0: } michael@0: michael@0: return promise; michael@0: });