| Index: chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js b/chrome/browser/resources/chromeos/chromevox/testing/callback_helper.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fba23c3b4203409aa41b8f2d0938abcd6b0d04ce
|
| --- /dev/null
|
| +++ b/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();
|
| + }
|
| + }
|
| +};
|
|
|