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 +}