branch: elpa/buttercup
commit ba40ff8a23a3e4bd6b6de458bb993d823df728a8
Author: Jorgen Schaefer <[email protected]>
Commit: Jorgen Schaefer <[email protected]>
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))))