dom/telephony/test/marionette/test_audiomanager_phonestate.js

changeset 0
6474c204b198
     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 +});

mercurial