dom/system/gonk/tests/marionette/head.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/system/gonk/tests/marionette/head.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,134 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +MARIONETTE_CONTEXT = "chrome";
     1.8 +
     1.9 +let Promise = Cu.import("resource://gre/modules/Promise.jsm").Promise;
    1.10 +
    1.11 +/**
    1.12 + * Wrap DOMRequest onsuccess/onerror events to Promise resolve/reject.
    1.13 + *
    1.14 + * Fulfill params: A DOMEvent.
    1.15 + * Reject params: A DOMEvent.
    1.16 + *
    1.17 + * @param aRequest
    1.18 + *        A DOMRequest instance.
    1.19 + *
    1.20 + * @return A deferred promise.
    1.21 + */
    1.22 +function wrapDomRequestAsPromise(aRequest) {
    1.23 +  let deferred = Promise.defer();
    1.24 +
    1.25 +  ok(aRequest instanceof DOMRequest,
    1.26 +     "aRequest is instanceof " + aRequest.constructor);
    1.27 +
    1.28 +  aRequest.addEventListener("success", function(aEvent) {
    1.29 +    deferred.resolve(aEvent);
    1.30 +  });
    1.31 +  aRequest.addEventListener("error", function(aEvent) {
    1.32 +    deferred.reject(aEvent);
    1.33 +  });
    1.34 +
    1.35 +  return deferred.promise;
    1.36 +}
    1.37 +
    1.38 +/**
    1.39 + * Get mozSettings value specified by @aKey.
    1.40 + *
    1.41 + * Resolve if that mozSettings value is retrieved successfully, reject
    1.42 + * otherwise.
    1.43 + *
    1.44 + * Fulfill params: The corresponding mozSettings value of the key.
    1.45 + * Reject params: (none)
    1.46 + *
    1.47 + * @param aKey
    1.48 + *        A string.
    1.49 + * @param aAllowError [optional]
    1.50 + *        A boolean value.  If set to true, an error response won't be treated
    1.51 + *        as test failure.  Default: false.
    1.52 + *
    1.53 + * @return A deferred promise.
    1.54 + */
    1.55 +function getSettings(aKey, aAllowError) {
    1.56 +  let request = window.navigator.mozSettings.createLock().get(aKey);
    1.57 +  return wrapDomRequestAsPromise(request)
    1.58 +    .then(function resolve(aEvent) {
    1.59 +      log("getSettings(" + aKey + ") - success");
    1.60 +      return aEvent.target.result[aKey];
    1.61 +    }, function reject(aEvent) {
    1.62 +      ok(aAllowError, "getSettings(" + aKey + ") - error");
    1.63 +    });
    1.64 +}
    1.65 +
    1.66 +/**
    1.67 + * Set mozSettings values.
    1.68 + *
    1.69 + * Resolve if that mozSettings value is set successfully, reject otherwise.
    1.70 + *
    1.71 + * Fulfill params: (none)
    1.72 + * Reject params: (none)
    1.73 + *
    1.74 + * @param aKey
    1.75 + *        A string key.
    1.76 + * @param aValue
    1.77 + *        An object value.
    1.78 + * @param aAllowError [optional]
    1.79 + *        A boolean value.  If set to true, an error response won't be treated
    1.80 + *        as test failure.  Default: false.
    1.81 + *
    1.82 + * @return A deferred promise.
    1.83 + */
    1.84 +function setSettings(aKey, aValue, aAllowError) {
    1.85 +  let settings = {};
    1.86 +  settings[aKey] = aValue;
    1.87 +  let request = window.navigator.mozSettings.createLock().set(settings);
    1.88 +  return wrapDomRequestAsPromise(request)
    1.89 +    .then(function resolve() {
    1.90 +      log("setSettings(" + JSON.stringify(settings) + ") - success");
    1.91 +    }, function reject() {
    1.92 +      ok(aAllowError, "setSettings(" + JSON.stringify(settings) + ") - error");
    1.93 +    });
    1.94 +}
    1.95 +
    1.96 +/**
    1.97 + * Wait for observer event.
    1.98 + *
    1.99 + * Resolve if that topic event occurs.  Never reject.
   1.100 + *
   1.101 + * Fulfill params: the subject passed.
   1.102 + *
   1.103 + * @param aTopic
   1.104 + *        A string topic name.
   1.105 + *
   1.106 + * @return A deferred promise.
   1.107 + */
   1.108 +function waitForObserverEvent(aTopic) {
   1.109 +  let obs = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
   1.110 +  let deferred = Promise.defer();
   1.111 +
   1.112 +  obs.addObserver(function observer(subject, topic, data) {
   1.113 +    if (topic === aTopic) {
   1.114 +      obs.removeObserver(observer, aTopic);
   1.115 +      deferred.resolve(subject);
   1.116 +    }
   1.117 +  }, aTopic, false);
   1.118 +
   1.119 +  return deferred.promise;
   1.120 +}
   1.121 +
   1.122 +/**
   1.123 + * Basic test routine helper.
   1.124 + *
   1.125 + * This helper does nothing but clean-ups.
   1.126 + *
   1.127 + * @param aTestCaseMain
   1.128 + *        A function that takes no parameter.
   1.129 + */
   1.130 +function startTestBase(aTestCaseMain) {
   1.131 +  Promise.resolve()
   1.132 +    .then(aTestCaseMain)
   1.133 +    .then(finish, function() {
   1.134 +      ok(false, 'promise rejects during test.');
   1.135 +      finish();
   1.136 +    });
   1.137 +}

mercurial