branch: elpa/buttercup commit ba40ff8a23a3e4bd6b6de458bb993d823df728a8 Author: Jorgen Schaefer <cont...@jorgenschaefer.de> Commit: Jorgen Schaefer <cont...@jorgenschaefer.de>
Spies: :and-return-value --- README.md | 34 +++++++++++++++++++++++++++++++++- buttercup-test.el | 14 ++++++++++++++ buttercup.el | 10 +++++++--- 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 34a56a2..70c6bbd 100644 --- a/README.md +++ b/README.md @@ -367,7 +367,39 @@ call the original function instead of returning `nil`. (expect 'get-bar :to-have-been-called)) (it "should not affect other functions" - (expect bar :to-equal 123)))) + (expect bar :to-equal 123)) + + (it "when called returns the requested value" + (expect fetched-bar :to-equal 123)))) +``` + +### Spies: `:and-return-value` + +The keyword argument `:and-return-value` specifies the value the +spied-on function should return. + +```Lisp +(describe "A spy, when configured to fake a return value" + (let (bar set-bar get-bar fetched-bar) + (before-each + (fset 'set-bar (lambda (val) + (setq bar val))) + (fset 'get-bar (lambda () + bar)) + + (spy-on 'get-bar :and-return-value 745) + + (set-bar 123) + (setq fetched-bar (get-bar))) + + (it "tracks that the spy was called" + (expect 'get-bar :to-have-been-called)) + + (it "should not affect other functions" + (expect bar :to-equal 123)) + + (it "when called returns the requested value" + (expect fetched-bar :to-equal 745)))) ``` ## Test Runners diff --git a/buttercup-test.el b/buttercup-test.el index bb30b9c..5fe85b8 100644 --- a/buttercup-test.el +++ b/buttercup-test.el @@ -391,3 +391,17 @@ (expect (test-function 2 3) :to-equal 5))) + +(describe "The :and-return-value keyword functionality" + (before-each + (spy-on 'test-function :and-return-value 23)) + + (it "tracks calls to the function" + (test-function 42 23) + + (expect 'test-function :to-have-been-called)) + + (it "returns the specified value" + (expect (test-function 2 3) + :to-equal + 23))) diff --git a/buttercup.el b/buttercup.el index 916dbc8..72f02c7 100644 --- a/buttercup.el +++ b/buttercup.el @@ -368,15 +368,19 @@ A disabled spec is not run." (defvar buttercup--spy-calls (make-hash-table :test 'eq :weakness 'key)) -(defun spy-on (symbol &rest keyword-args) +(defun spy-on (symbol &optional keyword arg) (let ((old-value (symbol-function symbol)) (new-value nil)) (cond - ((equal keyword-args '(:and-call-through)) + ((eq keyword :and-call-through) (setq new-value (lambda (&rest args) (buttercup--spy-add-call new-value args) (apply old-value args)))) - ((equal keyword-args nil) + ((eq keyword :and-return-value) + (setq new-value (lambda (&rest args) + (buttercup--spy-add-call new-value args) + arg))) + ((not keyword) (setq new-value (lambda (&rest args) (buttercup--spy-add-call new-value args) nil))))