emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/buttercup 20b87dd 031/340: Refactoring of spy-on to be mor


From: ELPA Syncer
Subject: [nongnu] elpa/buttercup 20b87dd 031/340: Refactoring of spy-on to be more concise and DRY.
Date: Thu, 16 Dec 2021 14:58:59 -0500 (EST)

branch: elpa/buttercup
commit 20b87dd6ab7ace1d45d8d76eaad7cad15702e516
Author: Jorgen Schaefer <contact@jorgenschaefer.de>
Commit: Jorgen Schaefer <contact@jorgenschaefer.de>

    Refactoring of spy-on to be more concise and DRY.
---
 buttercup-test.el |  7 +----
 buttercup.el      | 79 +++++++++++++++++++++++++++++--------------------------
 2 files changed, 43 insertions(+), 43 deletions(-)

diff --git a/buttercup-test.el b/buttercup-test.el
index c361a0b..5e01ecd 100644
--- a/buttercup-test.el
+++ b/buttercup-test.el
@@ -432,9 +432,4 @@
       (it "throws an error when called"
         (expect (lambda () (test-function 1 2))
                 :to-throw
-                'error "Stubbed error")))
-
-
-
-    )
-  )
+                'error "Stubbed error")))))
diff --git a/buttercup.el b/buttercup.el
index 0885be6..66cbf74 100644
--- a/buttercup.el
+++ b/buttercup.el
@@ -374,39 +374,46 @@ A disabled spec is not run."
   current-buffer)
 
 (defun spy-on (symbol &optional keyword arg)
-  (let ((old-value (symbol-function symbol))
-        (new-value nil))
-    (cond
-     ((eq keyword :and-call-through)
-      (setq new-value (lambda (&rest args)
-                        (let ((return-value (apply old-value args)))
-                          (buttercup--spy-add-call new-value
-                                                   args
-                                                   return-value)
-                          return-value))))
-     ((eq keyword :and-return-value)
-      (setq new-value (lambda (&rest args)
-                        (buttercup--spy-add-call new-value
-                                                 args
-                                                 arg)
-                        arg)))
-     ((eq keyword :and-call-fake)
-      (setq new-value (lambda (&rest args)
-                        (let ((return-value (apply arg args)))
-                          (buttercup--spy-add-call new-value
-                                                   args
-                                                   return-value)
-                          return-value))))
-     ((eq keyword :and-throw-error)
-      (setq new-value (lambda (&rest args)
-                        (buttercup--spy-add-call new-value args nil)
-                        (signal arg "Stubbed error"))))
-     ((not keyword)
-      (setq new-value (lambda (&rest args)
-                        (buttercup--spy-add-call new-value args nil)
-                        nil))))
-    (fset symbol new-value)
-    (buttercup--add-cleanup (lambda () (fset symbol old-value)))))
+  (cond
+   ((eq keyword :and-call-through)
+    (let ((orig (symbol-function symbol)))
+      (buttercup--spy-on-and-call-fake symbol
+                                       (lambda (&rest args)
+                                         (apply orig args)))))
+   ((eq keyword :and-return-value)
+    (buttercup--spy-on-and-call-fake symbol
+                                     (lambda (&rest args)
+                                       arg)))
+   ((eq keyword :and-call-fake)
+    (buttercup--spy-on-and-call-fake symbol
+                                     arg))
+   ((eq keyword :and-throw-error)
+    (buttercup--spy-on-and-call-fake symbol
+                                     (lambda (&rest args)
+                                       (signal arg "Stubbed error"))))
+   (t
+    (buttercup--spy-on-and-call-fake symbol
+                                     (lambda (&rest args)
+                                       nil)))))
+
+(defun buttercup--spy-on-and-call-fake (spy fake-function)
+  (let ((orig-function (symbol-function spy)))
+    (fset spy (buttercup--make-spy fake-function))
+    (buttercup--add-cleanup (lambda ()
+                              (fset spy orig-function)))))
+
+(defun buttercup--make-spy (fake-function)
+  (let (this-spy-function)
+    (setq this-spy-function
+          (lambda (&rest args)
+            (let ((return-value (apply fake-function args)))
+              (buttercup--spy-add-call
+               this-spy-function
+               (make-spy-context :args args
+                                 :return-value return-value
+                                 :current-buffer (current-buffer)))
+              return-value)))
+    this-spy-function))
 
 (defun buttercup--add-cleanup (function)
   (if buttercup--current-suite
@@ -415,12 +422,10 @@ A disabled spec is not run."
           (append buttercup--cleanup-forms
                   (list function)))))
 
-(defun buttercup--spy-add-call (spy args return-value)
+(defun buttercup--spy-add-call (spy context)
   (puthash spy
            (append (buttercup--spy-calls spy)
-                   (list (make-spy-context :current-buffer (current-buffer)
-                                           :args args
-                                           :return-value return-value)))
+                   (list context))
            buttercup--spy-calls))
 
 (defun buttercup--spy-calls (spy)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]