branch: elpa/buttercup
commit 38cfa6f62451fbea1b103400fa80eff4ed39833a
Author: Ola Nilsson <[email protected]>
Commit: Ola Nilsson <[email protected]>
Fix spy-on on Emacs 24.3 for symbols that are not fbound
symbol-function signals an error when called with a nil argument on
Emacs 24.3. Add fboundp checks where required to make this work.
---
buttercup.el | 8 ++++----
tests/test-buttercup.el | 5 +++++
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/buttercup.el b/buttercup.el
index 07cef4a..4315f49 100644
--- a/buttercup.el
+++ b/buttercup.el
@@ -1102,10 +1102,10 @@ also be a command with the same interactive form, unless
`:and-call-fake' is used, in which case it is the caller's
responsibility to ensure ARG is a command."
;; We need to load an autoloaded function before spying on it
- (when (autoloadp (symbol-function symbol))
+ (when (autoloadp (and (fboundp symbol) (symbol-function symbol)))
(autoload-do-load (symbol-function symbol) symbol))
- (cl-assert (not (autoloadp (symbol-function symbol))))
- (let* ((orig (symbol-function symbol))
+ (cl-assert (not (autoloadp (and (fboundp symbol) (symbol-function symbol)))))
+ (let* ((orig (and (fboundp symbol) (symbol-function symbol)))
(orig-intform (interactive-form orig))
(replacement
(pcase
@@ -1150,7 +1150,7 @@ responsibility to ensure ARG is a command."
(defun buttercup--spy-on-and-call-replacement (spy fun)
"Replace the function in symbol SPY with a spy calling FUN."
- (let ((orig-function (symbol-function spy)))
+ (let ((orig-function (and (fboundp spy) (symbol-function spy))))
(when (buttercup--add-cleanup (lambda ()
(fset spy orig-function)))
(fset spy (buttercup--make-spy fun)))))
diff --git a/tests/test-buttercup.el b/tests/test-buttercup.el
index e3802d3..fe94749 100644
--- a/tests/test-buttercup.el
+++ b/tests/test-buttercup.el
@@ -746,6 +746,11 @@
:to-be :loaded-successfully))
(delete-file function-file nil))))
+ (it "can spy on non-existing functions"
+ (spy-on 'local-function)
+ (local-function)
+ (expect 'local-function :to-have-been-called))
+
(it "only accepts ARG for keywords that use it"
(expect
(spy-on 'test-function :and-call-through :arg-not-allowed)