Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / test / data / webui / mock_controller.js
index 378fdc3..6258718 100644 (file)
 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';
+  }
 };
 
 /**