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 = 30000; michael@0: MARIONETTE_HEAD_JS = "mobile_header.js"; michael@0: michael@0: /* Emulator command for GSM/UMTS signal strength */ michael@0: function setEmulatorGsmSignalStrength(rssi) { michael@0: emulatorHelper.sendCommand("gsm signal " + rssi); michael@0: } michael@0: michael@0: /* Emulator command for LTE signal strength */ michael@0: function setEmulatorLteSignalStrength(rxlev, rsrp, rssnr) { michael@0: let lteSignal = rxlev + " " + rsrp + " " + rssnr; michael@0: emulatorHelper.sendCommand("gsm lte_signal " + lteSignal); michael@0: } michael@0: michael@0: function waitForVoiceChangeEvent(callback) { michael@0: mobileConnection.addEventListener("voicechange", function onvoicechange() { michael@0: mobileConnection.removeEventListener("voicechange", onvoicechange); michael@0: michael@0: if (callback && typeof callback === "function") { michael@0: callback(); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: /* Test Initial Signal Strength Info */ michael@0: taskHelper.push(function testInitialSignalStrengthInfo() { michael@0: log("Test initial signal strength info"); michael@0: michael@0: let voice = mobileConnection.voice; michael@0: // Android emulator initializes the signal strength to -99 dBm michael@0: is(voice.signalStrength, -99, "check voice.signalStrength"); michael@0: is(voice.relSignalStrength, 44, "check voice.relSignalStrength"); michael@0: michael@0: taskHelper.runNext(); michael@0: }); michael@0: michael@0: /* Test Unsolicited Signal Strength Events for LTE */ michael@0: taskHelper.push(function testLteSignalStrength() { michael@0: // Set emulator's LTE signal strength and wait for 'onvoicechange' event. michael@0: function doTestLteSignalStrength(input, expect, callback) { michael@0: log("Test LTE signal info with data : " + JSON.stringify(input)); michael@0: michael@0: waitForVoiceChangeEvent(function() { michael@0: let voice = mobileConnection.voice; michael@0: is(voice.signalStrength, expect.signalStrength, michael@0: "check voice.signalStrength"); michael@0: is(voice.relSignalStrength, expect.relSignalStrength, michael@0: "check voice.relSignalStrength"); michael@0: michael@0: if (callback && typeof callback === "function") { michael@0: callback(); michael@0: } michael@0: }); michael@0: michael@0: setEmulatorLteSignalStrength(input.rxlev, input.rsrp, input.rssnr); michael@0: } michael@0: michael@0: let testData = [ michael@0: // All invalid case. michael@0: {input: { michael@0: rxlev: 99, michael@0: rsrp: 65535, michael@0: rssnr: 65535}, michael@0: expect: { michael@0: signalStrength: null, michael@0: relSignalStrength: null} michael@0: }, michael@0: // Valid rxlev with max value. michael@0: {input: { michael@0: rxlev: 63, michael@0: rsrp: 65535, michael@0: rssnr: 65535}, michael@0: expect: { michael@0: signalStrength: -48, michael@0: relSignalStrength: 100} michael@0: }, michael@0: // Valid rxlev. michael@0: {input: { michael@0: rxlev: 12, michael@0: rsrp: 65535, michael@0: rssnr: 65535}, michael@0: expect: { michael@0: signalStrength: -99, michael@0: relSignalStrength: 100} michael@0: }, michael@0: // Valid rxlev with min value. michael@0: {input: { michael@0: rxlev: 0, michael@0: rsrp: 65535, michael@0: rssnr: 65535}, michael@0: expect: { michael@0: signalStrength: -111, michael@0: relSignalStrength: 0} michael@0: } michael@0: ]; michael@0: michael@0: // Run all test data. michael@0: (function do_call() { michael@0: let next = testData.shift(); michael@0: if (!next) { michael@0: taskHelper.runNext(); michael@0: return; michael@0: } michael@0: doTestLteSignalStrength(next.input, next.expect, do_call); michael@0: })(); michael@0: }); michael@0: michael@0: /* Reset Signal Strength Info to default, and finsih the test */ michael@0: taskHelper.push(function testResetSignalStrengthInfo() { michael@0: // Reset emulator's signal strength and wait for 'onvoicechange' event. michael@0: function doResetSignalStrength(rssi) { michael@0: waitForVoiceChangeEvent(function() { michael@0: let voice = mobileConnection.voice; michael@0: is(voice.signalStrength, -99, "check voice.signalStrength"); michael@0: is(voice.relSignalStrength, 44, "check voice.relSignalStrength"); michael@0: michael@0: taskHelper.runNext(); michael@0: }); michael@0: michael@0: setEmulatorGsmSignalStrength(rssi); michael@0: } michael@0: michael@0: // Emulator uses rssi = 7 as default value, and we need to reset it after michael@0: // finishing test in case other test cases need those values for testing. michael@0: doResetSignalStrength(7); michael@0: }); michael@0: michael@0: // Start test michael@0: taskHelper.runNext();