diff options
Diffstat (limited to 'chromium/chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js')
-rw-r--r-- | chromium/chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js b/chromium/chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js new file mode 100644 index 00000000000..fba23c3b420 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js @@ -0,0 +1,45 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Creates wrappers for callbacks and calls testDone() when all callbacks + * have been invoked. + * @param {testing.Test} fixture + */ +function CallbackHelper(fixture) { + /** @type {Object} fixture */ + this.fixture_ = fixture; + /** @type {number} */ + this.pendingCallbacks_ = 0; +} + +CallbackHelper.prototype = { + /** + * @param {Function=} opt_callback + * @return {Function} + */ + wrap: function(opt_callback) { + var callback = opt_callback || function() {}; + var savedArgs = new SaveMockArguments(); + var lastCall = null; + var completionAction = callFunctionWithSavedArgs(savedArgs, function() { + if (lastCall) { + throw new Error('Called more than once, first call here: ' + lastCall); + } else { + lastCall = new Error().stack; + } + callback.apply(this.fixture_, arguments); + if (--this.pendingCallbacks_ <= 0) + testDone(); + }.bind(this)); + // runAllActionsAsync catches exceptions and puts them in the test + // framework's list of errors and fails the test. + var runAll = runAllActionsAsync(WhenTestDone.ASSERT, completionAction); + ++this.pendingCallbacks_; + return function() { + savedArgs.arguments = Array.prototype.slice.call(arguments); + runAll.invoke(); + } + } +}; |