Better invocation recording. master
authorOlof-Joachim Frahm <olof@macrolet.net>
Sat, 31 Jan 2015 23:31:14 +0000 (23:31 +0000)
committerOlof-Joachim Frahm <olof@macrolet.net>
Sat, 31 Jan 2015 23:32:31 +0000 (23:32 +0000)
src/mock.lisp

index fab5f73..f1d38cb 100644 (file)
 the given ones.  Use *PREVIOUS*/*ARGUMENTS* directly in edge cases."
   (apply *previous* (or args *arguments*)))
 
+(defun record-invocation (record &aux (record (list record)))
+  (setf (cdr *invocations*)
+        (if (null (car *invocations*))
+            (setf (car *invocations*) record)
+            (setf (cddr *invocations*) record))))
+
 (defun find-and-invoke-mock (binding *arguments*)
   "Looks for a compatible mock (i.e. calls the TEST until one returns true)
 and executes it.  If no mock was found, no values are returned instead."
   (when *recordp*
-    (let ((record (list (cons (car binding) *arguments*))))
-      (if (null (car *invocations*))
-          (setf (cdr *invocations*)
-                (setf (car *invocations*) record))
-          (setf (cdr *invocations*)
-                (setf (cddr *invocations*) record)))))
+    (record-invocation (cons (car binding) *arguments*)))
   (dolist (case (cdddr binding) (values))
     (let ((*previous* (cadr binding)))
       (catch 'unhandled