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

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 MARIONETTE_CONTEXT = "chrome";
     6 let Promise = Cu.import("resource://gre/modules/Promise.jsm").Promise;
     8 /**
     9  * Wrap DOMRequest onsuccess/onerror events to Promise resolve/reject.
    10  *
    11  * Fulfill params: A DOMEvent.
    12  * Reject params: A DOMEvent.
    13  *
    14  * @param aRequest
    15  *        A DOMRequest instance.
    16  *
    17  * @return A deferred promise.
    18  */
    19 function wrapDomRequestAsPromise(aRequest) {
    20   let deferred = Promise.defer();
    22   ok(aRequest instanceof DOMRequest,
    23      "aRequest is instanceof " + aRequest.constructor);
    25   aRequest.addEventListener("success", function(aEvent) {
    26     deferred.resolve(aEvent);
    27   });
    28   aRequest.addEventListener("error", function(aEvent) {
    29     deferred.reject(aEvent);
    30   });
    32   return deferred.promise;
    33 }
    35 /**
    36  * Get mozSettings value specified by @aKey.
    37  *
    38  * Resolve if that mozSettings value is retrieved successfully, reject
    39  * otherwise.
    40  *
    41  * Fulfill params: The corresponding mozSettings value of the key.
    42  * Reject params: (none)
    43  *
    44  * @param aKey
    45  *        A string.
    46  * @param aAllowError [optional]
    47  *        A boolean value.  If set to true, an error response won't be treated
    48  *        as test failure.  Default: false.
    49  *
    50  * @return A deferred promise.
    51  */
    52 function getSettings(aKey, aAllowError) {
    53   let request = window.navigator.mozSettings.createLock().get(aKey);
    54   return wrapDomRequestAsPromise(request)
    55     .then(function resolve(aEvent) {
    56       log("getSettings(" + aKey + ") - success");
    57       return aEvent.target.result[aKey];
    58     }, function reject(aEvent) {
    59       ok(aAllowError, "getSettings(" + aKey + ") - error");
    60     });
    61 }
    63 /**
    64  * Set mozSettings values.
    65  *
    66  * Resolve if that mozSettings value is set successfully, reject otherwise.
    67  *
    68  * Fulfill params: (none)
    69  * Reject params: (none)
    70  *
    71  * @param aKey
    72  *        A string key.
    73  * @param aValue
    74  *        An object value.
    75  * @param aAllowError [optional]
    76  *        A boolean value.  If set to true, an error response won't be treated
    77  *        as test failure.  Default: false.
    78  *
    79  * @return A deferred promise.
    80  */
    81 function setSettings(aKey, aValue, aAllowError) {
    82   let settings = {};
    83   settings[aKey] = aValue;
    84   let request = window.navigator.mozSettings.createLock().set(settings);
    85   return wrapDomRequestAsPromise(request)
    86     .then(function resolve() {
    87       log("setSettings(" + JSON.stringify(settings) + ") - success");
    88     }, function reject() {
    89       ok(aAllowError, "setSettings(" + JSON.stringify(settings) + ") - error");
    90     });
    91 }
    93 /**
    94  * Wait for observer event.
    95  *
    96  * Resolve if that topic event occurs.  Never reject.
    97  *
    98  * Fulfill params: the subject passed.
    99  *
   100  * @param aTopic
   101  *        A string topic name.
   102  *
   103  * @return A deferred promise.
   104  */
   105 function waitForObserverEvent(aTopic) {
   106   let obs = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
   107   let deferred = Promise.defer();
   109   obs.addObserver(function observer(subject, topic, data) {
   110     if (topic === aTopic) {
   111       obs.removeObserver(observer, aTopic);
   112       deferred.resolve(subject);
   113     }
   114   }, aTopic, false);
   116   return deferred.promise;
   117 }
   119 /**
   120  * Basic test routine helper.
   121  *
   122  * This helper does nothing but clean-ups.
   123  *
   124  * @param aTestCaseMain
   125  *        A function that takes no parameter.
   126  */
   127 function startTestBase(aTestCaseMain) {
   128   Promise.resolve()
   129     .then(aTestCaseMain)
   130     .then(finish, function() {
   131       ok(false, 'promise rejects during test.');
   132       finish();
   133     });
   134 }

mercurial