1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/telephony/test/marionette/test_audiomanager_phonestate.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,108 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +MARIONETTE_TIMEOUT = 60000; 1.8 +MARIONETTE_HEAD_JS = 'head.js'; 1.9 + 1.10 +const AUDIO_MANAGER_CONTRACT_ID = "@mozilla.org/telephony/audiomanager;1"; 1.11 + 1.12 +// See nsIAudioManager 1.13 +const PHONE_STATE_INVALID = -2; 1.14 +const PHONE_STATE_CURRENT = -1; 1.15 +const PHONE_STATE_NORMAL = 0; 1.16 +const PHONE_STATE_RINGTONE = 1; 1.17 +const PHONE_STATE_IN_CALL = 2; 1.18 +const PHONE_STATE_IN_COMMUNICATION = 3; 1.19 + 1.20 +let audioManager; 1.21 +function checkStates(speakerEnabled, phoneState) { 1.22 + if (!audioManager) { 1.23 + audioManager = SpecialPowers.Cc[AUDIO_MANAGER_CONTRACT_ID] 1.24 + .getService(SpecialPowers.Ci.nsIAudioManager); 1.25 + ok(audioManager, "nsIAudioManager instance"); 1.26 + } 1.27 + 1.28 + is(telephony.speakerEnabled, speakerEnabled, "telephony.speakerEnabled"); 1.29 + if (phoneState == PHONE_STATE_CURRENT) { 1.30 + ok(audioManager.phoneState === PHONE_STATE_CURRENT || 1.31 + audioManager.phoneState === PHONE_STATE_NORMAL, "audioManager.phoneState"); 1.32 + } else { 1.33 + is(audioManager.phoneState, phoneState, "audioManager.phoneState"); 1.34 + } 1.35 +} 1.36 + 1.37 +function check(phoneStateOrig, phoneStateEnabled, phoneStateDisabled) { 1.38 + checkStates(false, phoneStateOrig); 1.39 + 1.40 + let canEnableSpeaker = arguments.length > 1; 1.41 + telephony.speakerEnabled = true; 1.42 + if (canEnableSpeaker) { 1.43 + checkStates(true, phoneStateEnabled); 1.44 + } else { 1.45 + checkStates(false, phoneStateOrig); 1.46 + return; 1.47 + } 1.48 + 1.49 + telephony.speakerEnabled = false; 1.50 + checkStates(false, arguments.length > 2 ? phoneStateDisabled : phoneStateOrig); 1.51 +} 1.52 + 1.53 +// Start the test 1.54 +startTest(function() { 1.55 + let outNumber = "5555550101"; 1.56 + let inNumber = "5555550201"; 1.57 + let outCall; 1.58 + let inCall; 1.59 + 1.60 + Promise.resolve() 1.61 + .then(() => check(PHONE_STATE_CURRENT, PHONE_STATE_NORMAL, PHONE_STATE_NORMAL)) 1.62 + 1.63 + // Dial in 1.64 + .then(() => gRemoteDial(inNumber)) 1.65 + .then(call => { inCall = call; }) 1.66 + // TODO - Bug 948860: should this be {RINGTONE, RINGTONE, RINGTONE}? 1.67 + // From current UX spec, there is no chance that an user may enable speaker 1.68 + // during alerting, so basically this 'set speaker enable' action can't 1.69 + // happen in B2G. 1.70 + .then(() => check(PHONE_STATE_RINGTONE, PHONE_STATE_NORMAL, PHONE_STATE_NORMAL)) 1.71 + .then(() => gAnswer(inCall)) 1.72 + .then(() => check(PHONE_STATE_IN_CALL, PHONE_STATE_IN_CALL)) 1.73 + // Hang up all 1.74 + .then(() => gRemoteHangUp(inCall)) 1.75 + .then(() => check(PHONE_STATE_NORMAL, PHONE_STATE_NORMAL)) 1.76 + 1.77 + // Dial out 1.78 + .then(() => gDial(outNumber)) 1.79 + .then(call => { outCall = call; }) 1.80 + .then(() => check(PHONE_STATE_IN_CALL, PHONE_STATE_IN_CALL)) 1.81 + .then(() => gRemoteAnswer(outCall)) 1.82 + .then(() => check(PHONE_STATE_IN_CALL, PHONE_STATE_IN_CALL)) 1.83 + // Hang up all 1.84 + .then(() => gRemoteHangUp(outCall)) 1.85 + .then(() => check(PHONE_STATE_NORMAL, PHONE_STATE_NORMAL)) 1.86 + 1.87 + // Dial out 1.88 + .then(() => gDial(outNumber)) 1.89 + .then(call => { outCall = call; }) 1.90 + .then(() => check(PHONE_STATE_IN_CALL, PHONE_STATE_IN_CALL)) 1.91 + .then(() => gRemoteAnswer(outCall)) 1.92 + .then(() => check(PHONE_STATE_IN_CALL, PHONE_STATE_IN_CALL)) 1.93 + // Dial out and dial in 1.94 + .then(() => gRemoteDial(inNumber)) 1.95 + .then(call => { inCall = call; }) 1.96 + .then(() => check(PHONE_STATE_IN_CALL, PHONE_STATE_IN_CALL)) 1.97 + .then(() => gAnswer(inCall)) 1.98 + .then(() => check(PHONE_STATE_IN_CALL, PHONE_STATE_IN_CALL)) 1.99 + // Conference 1.100 + .then(() => gAddCallsToConference([outCall, inCall])) 1.101 + .then(() => check(PHONE_STATE_IN_CALL, PHONE_STATE_IN_CALL)) 1.102 + // Hang up all 1.103 + .then(() => gRemoteHangUpCalls([outCall, inCall])) 1.104 + .then(() => check(PHONE_STATE_NORMAL, PHONE_STATE_NORMAL)) 1.105 + 1.106 + // End 1.107 + .then(null, error => { 1.108 + ok(false, 'promise rejects during test.'); 1.109 + }) 1.110 + .then(finish); 1.111 +});