dom/bluetooth/tests/marionette/test_dom_BluetoothManager_enabled.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_enabled.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,71 @@
     1.4 +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
     1.5 + * vim: sw=2 ts=2 sts=2 et filetype=javascript
     1.6 + * This Source Code Form is subject to the terms of the Mozilla Public
     1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     1.8 + * You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.9 +
    1.10 +MARIONETTE_TIMEOUT = 60000;
    1.11 +MARIONETTE_HEAD_JS = 'head.js';
    1.12 +
    1.13 +function waitEitherEnabledOrDisabled() {
    1.14 +  let deferred = Promise.defer();
    1.15 +
    1.16 +  function onEnabledDisabled(aEvent) {
    1.17 +    bluetoothManager.removeEventListener("adapteradded", onEnabledDisabled);
    1.18 +    bluetoothManager.removeEventListener("disabled", onEnabledDisabled);
    1.19 +
    1.20 +    ok(true, "Got event " + aEvent.type);
    1.21 +    deferred.resolve(aEvent.type === "adapteradded");
    1.22 +  }
    1.23 +
    1.24 +  // Listen 'adapteradded' rather than 'enabled' since the current API can't
    1.25 +  // disable BT before the BT adapter is initialized.
    1.26 +  // We should listen to 'enabled' when gecko can handle the case I mentioned
    1.27 +  // above, please refer to the follow-up bug 973482.
    1.28 +  bluetoothManager.addEventListener("adapteradded", onEnabledDisabled);
    1.29 +  bluetoothManager.addEventListener("disabled", onEnabledDisabled);
    1.30 +
    1.31 +  return deferred.promise;
    1.32 +}
    1.33 +
    1.34 +function test(aEnabled) {
    1.35 +  log("Testing 'bluetooth.enabled' => " + aEnabled);
    1.36 +
    1.37 +  let deferred = Promise.defer();
    1.38 +
    1.39 +  // Ensures that we can always receive that "enabled"/"disabled" event by
    1.40 +  // installing the event handler *before* we ever enable/disable Bluetooth. Or
    1.41 +  // we might just miss those events and get a timeout error.
    1.42 +  let promises = [];
    1.43 +  promises.push(waitEitherEnabledOrDisabled());
    1.44 +  promises.push(setBluetoothEnabled(aEnabled));
    1.45 +  Promise.all(promises)
    1.46 +    .then(function(aResults) {
    1.47 +      /* aResults is an array of two elements:
    1.48 +       *   [ <result of waitEitherEnabledOrDisabled>,
    1.49 +       *     <result of setBluetoothEnabled>]
    1.50 +       */
    1.51 +      log("  Examine results " + JSON.stringify(aResults));
    1.52 +
    1.53 +      is(bluetoothManager.enabled, aEnabled, "bluetoothManager.enabled");
    1.54 +      is(aResults[0], aEnabled, "'adapteradded' event received");
    1.55 +
    1.56 +      if (bluetoothManager.enabled === aEnabled && aResults[0] === aEnabled) {
    1.57 +        deferred.resolve();
    1.58 +      } else {
    1.59 +        deferred.reject();
    1.60 +      }
    1.61 +    });
    1.62 +
    1.63 +  return deferred.promise;
    1.64 +}
    1.65 +
    1.66 +startBluetoothTestBase(["settings-read", "settings-write"],
    1.67 +                       function testCaseMain() {
    1.68 +  return getBluetoothEnabled()
    1.69 +    .then(function(aEnabled) {
    1.70 +      log("Original 'bluetooth.enabled' is " + aEnabled);
    1.71 +      // Set to !aEnabled and reset back to aEnabled.
    1.72 +      return test(!aEnabled).then(test.bind(null, aEnabled));
    1.73 +    });
    1.74 +});

mercurial