[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/assess e1b7740df5 55/95: Add unwind-protect to assess-c
From: |
ELPA Syncer |
Subject: |
[elpa] externals/assess e1b7740df5 55/95: Add unwind-protect to assess-call functions |
Date: |
Tue, 19 Jul 2022 15:57:33 -0400 (EDT) |
branch: externals/assess
commit e1b7740df50771b8eec5742f6910988e4a08b88f
Author: Phillip Lord <phillip.lord@russet.org.uk>
Commit: Phillip Lord <phillip.lord@russet.org.uk>
Add unwind-protect to assess-call functions
Previously these functions were messy and left advice or hooks around if
their lambda failed. This side-effect could call fail-over in tests.
This is now addressed.
---
assess-call.el | 27 +++++++++++++++------------
test/assess-call-test.el | 46 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 12 deletions(-)
diff --git a/assess-call.el b/assess-call.el
index df5bfaa438..7e1b18d8cc 100644
--- a/assess-call.el
+++ b/assess-call.el
@@ -85,10 +85,11 @@ The return value is a list of cons cells, with car being the
parameters of the calls, and the cdr being the return value."
(let ((capture-lambda
(assess-call--capture-lambda)))
- (advice-add sym-fn :around capture-lambda)
- (funcall fn)
- (advice-remove sym-fn capture-lambda)
- (funcall capture-lambda :return)))
+ (unwind-protect
+ (progn (advice-add sym-fn :around capture-lambda)
+ (funcall fn)
+ (funcall capture-lambda :return))
+ (advice-remove sym-fn capture-lambda))))
(defun assess-call--hook-capture-lambda ()
"Returns a function which captures all of its args.
@@ -110,14 +111,16 @@ args."
APPEND and LOCAL are passed to `add-hook` and documented there."
(let ((capture-lambda
(assess-call--hook-capture-lambda)))
- (add-hook hook-var
- capture-lambda
- append local)
- (funcall fn)
- (remove-hook hook-var
- capture-lambda
- local)
- (funcall capture-lambda :return)))
+ (unwind-protect
+ (progn
+ (add-hook hook-var
+ capture-lambda
+ append local)
+ (funcall fn)
+ (funcall capture-lambda :return))
+ (remove-hook hook-var
+ capture-lambda
+ local))))
(provide 'assess-call)
;;; assess-call.el ends here
diff --git a/test/assess-call-test.el b/test/assess-call-test.el
index 8c243e78e5..46e9cf953e 100644
--- a/test/assess-call-test.el
+++ b/test/assess-call-test.el
@@ -26,6 +26,7 @@
;; #+begin_src emacs-lisp
(require 'ert)
+(require 'assess)
(require 'assess-call)
(defun assess-call-return-car (&rest args)
@@ -65,6 +66,36 @@
(assess-call-capture-multiply 1 2)
(assess-call-capture-multiply 3 4))))))
+(defun assess-call-adviced-p (symbol)
+ "Return non-nil if SYMBOL has advice."
+ ;; eeech
+ (let ((retn nil))
+ (advice-mapc
+ (lambda (&rest _)
+ (setq retn t))
+ symbol)
+ retn))
+
+(ert-deftest assess-call-test-capture-fail ()
+ (should-not
+ (assess-call-adviced-p 'assess-call-capture-multiply))
+ (should
+ (let ((retn nil))
+ (assess-call-capture
+ 'assess-call-capture-multiply
+ (lambda ()
+ (setq retn
+ (assess-call-adviced-p 'assess-call-capture-multiply))))
+ retn))
+ (should-not
+ (condition-case err
+ (assess-call-capture
+ 'assess-call-capture-multiply
+ (lambda ()
+ (signal 'assess-deliberate-error nil)))
+ (assess-deliberate-error
+ (assess-call-adviced-p 'assess-call-capture-multiply)))))
+
(defvar assess-call-test-hook nil)
(ert-deftest assess-call-test-hook-test ()
@@ -92,4 +123,19 @@
(run-hook-with-args 'assess-call-test-hook
'bob))))))
+
+(ert-deftest assess-call-test-hook-fail ()
+ ;; should be nil
+ (should (not assess-call-test-hook))
+ ;; and should be nil if we error
+ (should
+ (condition-case err
+ (assess-call-capture-hook
+ 'assess-call-test-hook
+ (lambda ()
+ (signal 'assess-deliberate-error nil)))
+ (assess-deliberate-error
+ (not assess-call-test-hook)))))
+
(provide 'assess-call-test)
+;;; assess-call-test ends here
- [elpa] externals/assess 9521b07480 71/95: Fix and Publish documentation statically, (continued)
- [elpa] externals/assess 9521b07480 71/95: Fix and Publish documentation statically, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 5aee8d7500 81/95: Mark some tests as failed on earlier emacs, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 0a3e94477a 78/95: Support all of Emacs 24 series, ELPA Syncer, 2022/07/19
- [elpa] externals/assess e5b0415126 85/95: Update README and release number, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 7a3189a587 86/95: Remove types and replace with convertors, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 5bac045b27 94/95: Update version, ELPA Syncer, 2022/07/19
- [elpa] externals/assess ac8ff1f928 39/95: Change all file names to assess., ELPA Syncer, 2022/07/19
- [elpa] externals/assess 4bf702a08a 43/95: Re-order to put macros first., ELPA Syncer, 2022/07/19
- [elpa] externals/assess e9344a55df 45/95: Move from ert to assess-discover, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 7409b103a3 46/95: Update .gitignore, ELPA Syncer, 2022/07/19
- [elpa] externals/assess e1b7740df5 55/95: Add unwind-protect to assess-call functions,
ELPA Syncer <=
- [elpa] externals/assess 2335b8bd69 63/95: Remove old call-capture variable, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 61771edab7 67/95: Move cask to melpa-stable, ELPA Syncer, 2022/07/19
- [elpa] externals/assess e2e5f1cbbd 69/95: Merge pull request #6 from NicolasPetton/master, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 70c6d8c57d 70/95: Fix a few typos, ELPA Syncer, 2022/07/19
- [elpa] externals/assess bafab950e7 68/95: Fix typos, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 47ce039423 77/95: Avoid font-lock-ensure for older Emacs, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 4a71be3ba5 38/95: Change all references to sisyphus to assess, ELPA Syncer, 2022/07/19
- [elpa] externals/assess d2885a9bd7 50/95: Update readme for 0.2 release., ELPA Syncer, 2022/07/19
- [elpa] externals/assess f1edef3220 52/95: Move call implementation to closure, ELPA Syncer, 2022/07/19
- [elpa] externals/assess 0781fd79c4 88/95: Prepare for 0.5 release, ELPA Syncer, 2022/07/19