unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#23729: [PATCH] Remove ‘ert-with-function-mocked’ macro in favour of ‘cl-letf’ macro
@ 2016-06-08 12:44 Michal Nazarewicz
  2016-06-08 16:05 ` Glenn Morris
  0 siblings, 1 reply; 5+ messages in thread
From: Michal Nazarewicz @ 2016-06-08 12:44 UTC (permalink / raw)
  To: 23729

* lisp/emacs-lisp/ert-x.el (ert-with-function-mocked): Remove macro
in favour of ‘cl-letf’ macro which is more generic.  All existing
uses are migrated accordingly.  The macro has not been included in
an official release yet so it should be fine to delete it.
---
 etc/NEWS                              |  3 ---
 lisp/emacs-lisp/ert-x.el              | 40 --------------------------------
 test/lisp/calendar/icalendar-tests.el |  3 +--
 test/lisp/emacs-lisp/ert-x-tests.el   | 43 -----------------------------------
 test/lisp/gnus/message-tests.el       |  2 +-
 test/lisp/vc/vc-bzr-tests.el          |  3 +--
 6 files changed, 3 insertions(+), 91 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 1ae8ff6..d8583cf 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -418,9 +418,6 @@ by setting 'autoload-timestamps' to nil.
 FIXME As an experiment, nil is the current default.
 If no insurmountable problems before next release, it can stay that way.
 
-** 'ert-with-function-mocked' of 'ert-x package allows mocking of functions
-in unit tests.
-
 ---
 ** 'gnutls-boot' now takes a parameter :complete-negotiation that says
 that negotiation should complete even on non-blocking sockets.
diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el
index 67cb102..2a2418f 100644
--- a/lisp/emacs-lisp/ert-x.el
+++ b/lisp/emacs-lisp/ert-x.el
@@ -285,46 +285,6 @@ ert-buffer-string-reindented
             (kill-buffer clone)))))))
 
 
-(defmacro ert-with-function-mocked (name mock &rest body)
-  "Mocks function NAME with MOCK and run BODY.
-
-Once BODY finishes (be it normally by returning a value or
-abnormally by throwing or signaling), the old definition of
-function NAME is restored.
-
-BODY may further change the mock with `fset'.
-
-If MOCK is nil, the function NAME is mocked with a function
-`ert-fail'ing when called.
-
-For example:
-
-    ;; Regular use, function is mocked inside the BODY:
-    (should (eq 2 (+ 1 1)))
-    (ert-with-function-mocked ((+ (lambda (a b) (- a b))))
-      (should (eq 0 (+ 1 1))))
-    (should (eq 2 (+ 1 1)))
-
-    ;; Macro correctly recovers from a throw or signal:
-    (should
-      (catch 'done
-        (ert-with-function-mocked ((+ (lambda (a b) (- a b))))
-          (should (eq 0 (+ 1 1))))
-          (throw 'done t)))
-    (should (eq 2 (+ 1 1)))
-"
-  (declare (indent 2))
-  (let ((old-var (make-symbol "old-var"))
-        (mock-var (make-symbol "mock-var")))
-    `(let ((,old-var (symbol-function (quote ,name))) (,mock-var ,mock))
-       (fset (quote ,name)
-             (or ,mock-var (lambda (&rest _)
-                             (ert-fail (concat "`" ,(symbol-name name)
-                                               "' unexpectedly called.")))))
-       (unwind-protect
-           (progn ,@body)
-         (fset (quote ,name) ,old-var)))))
-
 (provide 'ert-x)
 
 ;;; ert-x.el ends here
diff --git a/test/lisp/calendar/icalendar-tests.el b/test/lisp/calendar/icalendar-tests.el
index 20d8834..6db4222 100644
--- a/test/lisp/calendar/icalendar-tests.el
+++ b/test/lisp/calendar/icalendar-tests.el
@@ -32,7 +32,6 @@
 ;;; Code:
 
 (require 'ert)
-(require 'ert-x)
 (require 'icalendar)
 
 ;; ======================================================================
@@ -64,7 +63,7 @@ icalendar-tests--trim
          (hash (format "%d" (abs (sxhash entry-full))))
          (contents "DTSTART:19640630T070100\nblahblah")
          (username (or user-login-name "UNKNOWN_USER")))
-    (ert-with-function-mocked current-time (lambda () '(1 2 3))
+    (cl-letf (((symbol-function 'current-time) (lambda () '(1 2 3))))
       (should (= 77 icalendar--uid-count))
       (should (string=  (concat "xxx-123-77-" hash "-" username "-19640630")
                         (icalendar--create-uid entry-full contents)))
diff --git a/test/lisp/emacs-lisp/ert-x-tests.el b/test/lisp/emacs-lisp/ert-x-tests.el
index a2665e7..ef8642a 100644
--- a/test/lisp/emacs-lisp/ert-x-tests.el
+++ b/test/lisp/emacs-lisp/ert-x-tests.el
@@ -275,49 +275,6 @@ ert--hash-table-to-alist
              (should (equal (c x) (lisp x))))))
 
 
-(defun ert--dummy-id (a)
-  "Identity function.  Used for tests only."
-  a)
-
-(ert-deftest ert-with-function-mocked ()
-  (let ((mock-id  (lambda (_) 21)))
-    (should (eq 42 (ert--dummy-id 42)))
-
-    (ert-with-function-mocked ert--dummy-id nil
-       (fset 'ert--dummy-id mock-id)
-       (should (eq 21 (ert--dummy-id 42))))
-    (should (eq 42 (ert--dummy-id 42)))
-
-    (ert-with-function-mocked ert--dummy-id mock-id
-       (should (eq 21 (ert--dummy-id 42))))
-    (should (eq 42 (ert--dummy-id 42)))
-
-    (should
-     (catch 'exit
-       (ert-with-function-mocked ert--dummy-id mock-id
-         (should (eq 21 (ert--dummy-id 42))))
-         (throw 'exit t)))
-    (should (eq 42 (ert--dummy-id 42)))
-
-    (should
-     (string= "Foo"
-              (condition-case err
-                  (progn
-                    (ert-with-function-mocked ert--dummy-id mock-id
-                      (should (eq 21 (ert--dummy-id 42))))
-                    (user-error "Foo"))
-                (user-error (cadr err)))))
-    (should (eq 42 (ert--dummy-id 42)))
-
-    (should
-     (string= "`ert--dummy-id' unexpectedly called."
-              (condition-case err
-                  (ert-with-function-mocked ert--dummy-id nil
-                    (ert--dummy-id 42))
-                (ert-test-failed (cadr err)))))
-    (should (eq 42 (ert--dummy-id 42)))))
-
-
 (provide 'ert-x-tests)
 
 ;;; ert-x-tests.el ends here
diff --git a/test/lisp/gnus/message-tests.el b/test/lisp/gnus/message-tests.el
index ae34f24..13c15e3 100644
--- a/test/lisp/gnus/message-tests.el
+++ b/test/lisp/gnus/message-tests.el
@@ -57,7 +57,7 @@
 
 
 (ert-deftest message-strip-subject-trailing-was ()
-  (ert-with-function-mocked message-talkative-question nil
+  (cl-letf (((symbol-function 'message-talkative-question) nil))
     (with-temp-buffer
       (let ((no-was "Re: Foo ")
             (with-was "Re: Foo \t (was: Bar ) ")
diff --git a/test/lisp/vc/vc-bzr-tests.el b/test/lisp/vc/vc-bzr-tests.el
index 98d176c..f27e658 100644
--- a/test/lisp/vc/vc-bzr-tests.el
+++ b/test/lisp/vc/vc-bzr-tests.el
@@ -25,7 +25,6 @@
 ;;; Code:
 
 (require 'ert)
-(require 'ert-x)
 (require 'vc-bzr)
 (require 'vc-dir)
 
@@ -102,7 +101,7 @@
           (while (vc-dir-busy)
             (sit-for 0.1))
           (vc-dir-mark-all-files t)
-          (ert-with-function-mocked y-or-n-p (lambda (_) t)
+          (cl-letf (((symbol-function 'y-or-n-p) (lambda (_) t)))
             (vc-next-action nil))
           (should (get-buffer "*vc-log*")))
       (delete-directory homedir t))))
-- 
2.8.0.rc3.226.g39d4020






^ permalink raw reply related	[flat|nested] 5+ messages in thread

* bug#23729: [PATCH] Remove ‘ert-with-function-mocked’ macro in favour of ‘cl-letf’ macro
  2016-06-08 12:44 bug#23729: [PATCH] Remove ‘ert-with-function-mocked’ macro in favour of ‘cl-letf’ macro Michal Nazarewicz
@ 2016-06-08 16:05 ` Glenn Morris
  2016-06-08 17:15   ` Michal Nazarewicz
  2016-06-08 17:20   ` Michal Nazarewicz
  0 siblings, 2 replies; 5+ messages in thread
From: Glenn Morris @ 2016-06-08 16:05 UTC (permalink / raw)
  To: Michal Nazarewicz; +Cc: 23729


I see you added it in the first place?
So I guess you should feel free to remove it again. :)





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#23729: [PATCH] Remove ‘ert-with-function-mocked’ macro in favour of ‘cl-letf’ macro
  2016-06-08 16:05 ` Glenn Morris
@ 2016-06-08 17:15   ` Michal Nazarewicz
  2016-06-08 17:17     ` Michal Nazarewicz
  2016-06-08 17:20   ` Michal Nazarewicz
  1 sibling, 1 reply; 5+ messages in thread
From: Michal Nazarewicz @ 2016-06-08 17:15 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 23729

On Wed, Jun 08 2016, Glenn Morris wrote:
> I see you added it in the first place?
> So I guess you should feel free to remove it again. :)

The write access seems to be misbehaving though (I’ve already tried with
the NEWS typo fix):

Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (17/17), 1.59 KiB | 0 bytes/s, done.
Total 17 (delta 14), reused 0 (delta 0)
error: unpack failed: unpack-objects abnormal exit
To git://git.sv.gnu.org/emacs.git
 ! [remote rejected] ert -> master (n/a (unpacker error))
error: failed to push some refs to 'git://git.sv.gnu.org/emacs.git'

-- 
Best regards
ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
«If at first you don’t succeed, give up skydiving»





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#23729: [PATCH] Remove ‘ert-with-function-mocked’ macro in favour of ‘cl-letf’ macro
  2016-06-08 17:15   ` Michal Nazarewicz
@ 2016-06-08 17:17     ` Michal Nazarewicz
  0 siblings, 0 replies; 5+ messages in thread
From: Michal Nazarewicz @ 2016-06-08 17:17 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 23729

> On Wed, Jun 08 2016, Glenn Morris wrote:
>> I see you added it in the first place?
>> So I guess you should feel free to remove it again. :)

On Wed, Jun 08 2016, Michal Nazarewicz wrote:
> The write access seems to be misbehaving though (I’ve already tried with
> the NEWS typo fix):

Disregard, I’m an idiot.  Got it working.

> Counting objects: 17, done.
> Delta compression using up to 4 threads.
> Compressing objects: 100% (17/17), done.
> Writing objects: 100% (17/17), 1.59 KiB | 0 bytes/s, done.
> Total 17 (delta 14), reused 0 (delta 0)
> error: unpack failed: unpack-objects abnormal exit
> To git://git.sv.gnu.org/emacs.git
>  ! [remote rejected] ert -> master (n/a (unpacker error))
> error: failed to push some refs to 'git://git.sv.gnu.org/emacs.git'

-- 
Best regards
ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
«If at first you don’t succeed, give up skydiving»





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#23729: [PATCH] Remove ‘ert-with-function-mocked’ macro in favour of ‘cl-letf’ macro
  2016-06-08 16:05 ` Glenn Morris
  2016-06-08 17:15   ` Michal Nazarewicz
@ 2016-06-08 17:20   ` Michal Nazarewicz
  1 sibling, 0 replies; 5+ messages in thread
From: Michal Nazarewicz @ 2016-06-08 17:20 UTC (permalink / raw)
  To: 23729-done

Patch applied.

-- 
Best regards
ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
«If at first you don’t succeed, give up skydiving»

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-06-08 17:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-08 12:44 bug#23729: [PATCH] Remove ‘ert-with-function-mocked’ macro in favour of ‘cl-letf’ macro Michal Nazarewicz
2016-06-08 16:05 ` Glenn Morris
2016-06-08 17:15   ` Michal Nazarewicz
2016-06-08 17:17     ` Michal Nazarewicz
2016-06-08 17:20   ` Michal Nazarewicz

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).