Index: chrome/test/data/webui/mock_controller.js |
diff --git a/chrome/test/data/webui/mock_controller.js b/chrome/test/data/webui/mock_controller.js |
index 378fdc353967085027d07a0cb999b4ff059158af..62587184f3eb488e94952e9917d8c2b6188c321a 100644 |
--- a/chrome/test/data/webui/mock_controller.js |
+++ b/chrome/test/data/webui/mock_controller.js |
@@ -10,8 +10,20 @@ |
function MockMethod() { |
var fn = function() { |
var args = Array.prototype.slice.call(arguments); |
+ var callbacks = |
+ args.filter(function(arg) { return (typeof arg == 'function'); }); |
+ |
+ if (callbacks.length > 1) { |
+ console.error('Only support mocking function with at most one callback.'); |
+ return; |
+ } |
+ |
fn.recordCall(args); |
- return this.returnValue; |
+ if (callbacks.length == 1) { |
+ callbacks[0].apply(undefined, fn.callbackData); |
+ return; |
+ } |
+ return fn.returnValue; |
}; |
/** |
@@ -34,6 +46,12 @@ function MockMethod() { |
*/ |
fn.returnValue = undefined; |
+ /** |
+ * List of arguments for callback function. |
+ * @type {!Array.<!Array>} |
+ */ |
+ fn.callbackData = []; |
+ |
fn.__proto__ = MockMethod.prototype; |
return fn; |
} |
@@ -45,7 +63,7 @@ MockMethod.prototype = { |
*/ |
addExpectation: function() { |
var args = Array.prototype.slice.call(arguments); |
- this.expectations_.push(args); |
+ this.expectations_.push(args.filter(this.notFunction_)); |
}, |
/** |
@@ -53,7 +71,7 @@ MockMethod.prototype = { |
* @param {!Array} args. |
*/ |
recordCall: function(args) { |
- this.calls_.push(args); |
+ this.calls_.push(args.filter(this.notFunction_)); |
}, |
/** |
@@ -84,6 +102,15 @@ MockMethod.prototype = { |
validateCall: function(index, expected, observed) { |
assertDeepEquals(expected, observed); |
}, |
+ |
+ /** |
+ * Test if arg is a function. |
+ * @param {*} arg The argument to test. |
+ * @return True if arg is not function type. |
+ */ |
+ notFunction_: function(arg) { |
+ return typeof arg != 'function'; |
+ } |
}; |
/** |