X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fmock.lisp;h=ae9522d77aa446652e879526759a5370f71906ad;hb=82370fd12b07679559c9e0b3f720aade582d42fb;hp=33b4ba2e0f29765d93dc1f72db275adfcfdeaa4c;hpb=eb6e5aec7684f2db4bab65b46b7d067d598bff85;p=cl-mock.git diff --git a/src/mock.lisp b/src/mock.lisp index 33b4ba2..ae9522d 100644 --- a/src/mock.lisp +++ b/src/mock.lisp @@ -1,10 +1,11 @@ ;;; -*- mode: lisp; syntax: common-lisp; coding: utf-8-unix; package: cl-mock; -*- (in-package #:cl-mock) - + ;;; mocking of regular functions (defstruct mock-bindings + "Contains a set of mocked functions and their behaviour." mocks) (defvar *previous*) @@ -28,21 +29,21 @@ its first return value, if any. If RECORDP is set, all invocations will be recorded and returned as the second return value, else NIL." (let* ((mocks (mock-bindings-mocks mock-bindings)) (functions (mapcar #'car mocks)) - (previous (mapcar #'maybe-fdefinition functions)) - invocations) - (call-with-function-bindings - functions - (mapcar (lambda (binding previous &aux (name (car binding)) (cases (cdr binding))) - (lambda (&rest args) - (when recordp - (push (cons name args) invocations)) - (find-and-invoke-mock previous cases args))) - mocks previous) - (lambda () - (values - (funcall function) - (nreverse invocations))) - previous))) + (previous (mapcar #'maybe-fdefinition functions))) + (with-collector (invocations) + (call-with-function-bindings + functions + (mapcar (lambda (binding previous &aux (name (car binding)) (cases (cdr binding))) + (lambda (&rest args) + (when recordp + (invocations (cons name args))) + (find-and-invoke-mock previous cases args))) + mocks previous) + (lambda () + (values + (funcall function) + (invocations))) + previous)))) (defun register-mock (mock-bindings name) "Registers a mocked function under NAME. The mocked function will