/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

MARIONETTE_TIMEOUT = 30000;
MARIONETTE_HEAD_JS = "head.js";

/* Basic test */
function basicTest(aIcc) {
  let iccInfo = aIcc.iccInfo;

  // The emulator's hard coded iccid value.
  // See it here {B2G_HOME}/external/qemu/telephony/sim_card.c#L299.
  is(iccInfo.iccid, 89014103211118510720);

  if (iccInfo instanceof MozGsmIccInfo) {
    log("Test Gsm IccInfo");
    is(iccInfo.iccType, "sim");
    is(iccInfo.spn, "Android");
    // The emulator's hard coded mcc and mnc codes.
    // See it here {B2G_HOME}/external/qemu/telephony/android_modem.c#L2465.
    is(iccInfo.mcc, 310);
    is(iccInfo.mnc, 260);
    // Phone number is hardcoded in MSISDN
    // See {B2G_HOME}/external/qemu/telephony/sim_card.c, in asimcard_io().
    is(iccInfo.msisdn, "15555215554");
  } else {
    log("Test Cdma IccInfo");
    is(iccInfo.iccType, "ruim");
    // MDN is hardcoded as "8587777777".
    // See it here {B2G_HOME}/hardware/ril/reference-ril/reference-ril.c,
    // in requestCdmaSubscription().
    is(iccInfo.mdn, "8587777777");
    // PRL version is hardcoded as 1.
    // See it here {B2G_HOME}/hardware/ril/reference-ril/reference-ril.c,
    // in requestCdmaSubscription().
    is(iccInfo.prlVersion, 1);
  }
}

// Start tests
startTestCommon(function() {
  let icc = getMozIcc();

  return Promise.resolve()
    // Basic test
    .then(() => basicTest(icc))
    // Test iccInfo when card becomes undetected
    .then(() => {
      let promises = [];
      promises.push(setRadioEnabled(false));
      promises.push(waitForTargetEvent(icc, "iccinfochange", function() {
        // Expect iccInfo changes to null
        return icc.iccInfo === null;
      }));
      return Promise.all(promises);
    })
    // Restore radio status and expect to get iccdetected event.
    .then(() => {
      let promises = [];
      promises.push(setRadioEnabled(true));
      promises.push(waitForTargetEvent(iccManager, "iccdetected"));
      return Promise.all(promises);
    });
});
