toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,66 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/publicdomain/zero/1.0/
     1.6 + */
     1.7 +
     1.8 +// Test the cancellable doing/done/cancelAll API in XPIProvider
     1.9 +
    1.10 +let scope = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm");
    1.11 +let XPIProvider = scope.XPIProvider;
    1.12 +
    1.13 +function run_test() {
    1.14 +  // Check that cancelling with nothing in progress doesn't blow up
    1.15 +  XPIProvider.cancelAll();
    1.16 +
    1.17 +  // Check that a basic object gets cancelled
    1.18 +  let getsCancelled = {
    1.19 +    isCancelled: false,
    1.20 +    cancel: function () {
    1.21 +      if (this.isCancelled)
    1.22 +        do_throw("Already cancelled");
    1.23 +      this.isCancelled = true;
    1.24 +    }
    1.25 +  };
    1.26 +  XPIProvider.doing(getsCancelled);
    1.27 +  XPIProvider.cancelAll();
    1.28 +  do_check_true(getsCancelled.isCancelled);
    1.29 +
    1.30 +  // Check that if we complete a cancellable, it doesn't get cancelled
    1.31 +  let doesntGetCancelled = {
    1.32 +    cancel: () => do_throw("This should not have been cancelled")
    1.33 +  };
    1.34 +  XPIProvider.doing(doesntGetCancelled);
    1.35 +  do_check_true(XPIProvider.done(doesntGetCancelled));
    1.36 +  XPIProvider.cancelAll();
    1.37 +
    1.38 +  // A cancellable that adds a cancellable
    1.39 +  getsCancelled.isCancelled = false;
    1.40 +  let addsAnother = {
    1.41 +    isCancelled: false,
    1.42 +    cancel: function () {
    1.43 +      if (this.isCancelled)
    1.44 +        do_throw("Already cancelled");
    1.45 +      this.isCancelled = true;
    1.46 +      XPIProvider.doing(getsCancelled);
    1.47 +    }
    1.48 +  }
    1.49 +  XPIProvider.doing(addsAnother);
    1.50 +  XPIProvider.cancelAll();
    1.51 +  do_check_true(addsAnother.isCancelled);
    1.52 +  do_check_true(getsCancelled.isCancelled);
    1.53 +
    1.54 +  // A cancellable that removes another. This assumes that Set() iterates in the
    1.55 +  // order that members were added
    1.56 +  let removesAnother = {
    1.57 +    isCancelled: false,
    1.58 +    cancel: function () {
    1.59 +      if (this.isCancelled)
    1.60 +        do_throw("Already cancelled");
    1.61 +      this.isCancelled = true;
    1.62 +      XPIProvider.done(doesntGetCancelled);
    1.63 +    }
    1.64 +  }
    1.65 +  XPIProvider.doing(removesAnother);
    1.66 +  XPIProvider.doing(doesntGetCancelled);
    1.67 +  XPIProvider.cancelAll();
    1.68 +  do_check_true(removesAnother.isCancelled);
    1.69 +}

mercurial