<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>test/test-mocks.lzx</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -84,7 +84,7 @@ function MockObject(master) {
     addMethods(master);
     if (typeof master == 'function') {
         addMethods(new master);
-        var finalizer = (master['mock']||{}).finalize;
+        var finalizer = (master['mock']||{})['finalize'] || null;
         finalizer &amp;&amp; finalizer(this);
     }
     var mock = this.mock = {expects: expector, verify: verify, testCase: null};
@@ -147,9 +147,10 @@ function MockObject(master) {
             for (var ix = 0; ix &lt; arguments.length; ix++)
                 if (expectation.arguments[ix] instanceof Mock.Callback)
                     expectation.arguments[ix].exec(arguments[ix]);
+            if (expectation.hasReturnValue)
+                return expectation.returnValue;
             if (stub)
                 return stub.applyTo(arguments);
-            return expectation.value;
         };
         expector[name] = function() {
             Mock['trace'] &amp;&amp; Debug.write('expect', name, arguments);
@@ -157,7 +158,8 @@ function MockObject(master) {
                 expectation = {
                     name: name,
                     arguments: Array.slice(arguments, 0),
-                    value: null
+                    hasReturnValue: false,
+                    returnValue: undefined
                 };
             expectations.push(expectation);
 
@@ -165,27 +167,38 @@ function MockObject(master) {
                 define('calls', calls),
                 define('returns', returns);
                 define.alias('calls.back', 'calls');
+                define('captures.callback', function(pos) {
+                    if (arguments.length &lt; 1)
+                        pos = findFirstFunction();
+                    var cb = expectation.arguments[pos] = Mock.callback(undefined);
+                    cb.exec = function(fn) { this.fn = fn }
+                    cb.call = function(values) { this.fn.apply(undefined, arguments) }
+                    return cb;
+                });
                 define.empty('and');
                 define.modifier.dictionary(options);
                 define.modifier('eventually');
             });
+            function findFirstFunction() {
+                var args = expectation.arguments,
+                    len = args.length;
+                for (var i = 0; i &lt; len; i++)
+                    if (args[i] == Function)
+                        return i;
+                Debug.error('no function position');
+            }
 
             function calls(pos, value) {
                 if (arguments.length &lt; 2) {
-                    var args = expectation.arguments,
-                        len = args.length;
                     value = pos;
-                    for (var i = 0; i &lt; len; i++)
-                        if (args[i] == Function) {
-                            pos = i;
-                            break;
-                        }
+                    pos = findFirstFunction();
                 }
                 var cb = expectation.arguments[pos] = Mock.callback(value);
                 cb.async = options.eventually;
             };
             function returns(value) {
-                expectation.value = value;
+                expectation.hasReturnValue = true;
+                expectation.returnValue = value;
             }
         }
     }</diff>
      <filename>src/lzmock.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>dbaa55bb13653de2676c3aac09ec979de27de2ff</id>
    </parent>
  </parents>
  <author>
    <name>Oliver Steele</name>
    <email>steele@osteele.com</email>
  </author>
  <url>http://github.com/osteele/lztestkit/commit/fe6e4c2643cf2d8bc11e2424ca4007bd5b1b7e07</url>
  <id>fe6e4c2643cf2d8bc11e2424ca4007bd5b1b7e07</id>
  <committed-date>2008-02-29T15:24:54-08:00</committed-date>
  <authored-date>2008-02-29T15:24:54-08:00</authored-date>
  <message>+deferred callback facility</message>
  <tree>4b2482418be052156438822be056fb2a0cb69596</tree>
  <committer>
    <name>Oliver Steele</name>
    <email>steele@osteele.com</email>
  </committer>
</commit>
