]> git.eshelyaron.com Git - emacs.git/commitdiff
Use `advice-flet' in place of `cl-letf' to avoid primitive redefinition
authorAndrea Corallo <akrl@sdf.org>
Fri, 2 Oct 2020 16:38:02 +0000 (18:38 +0200)
committerAndrea Corallo <akrl@sdf.org>
Fri, 2 Oct 2020 19:20:53 +0000 (21:20 +0200)
* test/lisp/time-stamp-tests.el (with-time-stamp-system-name): Use
`advice-flet' to advice primitive avoiding redefinition.

* test/lisp/tempo-tests.el (tempo-p-element-test)
(tempo-P-element-test, tempo-r-element-test)
(tempo-s-element-test, tempo-r>-element-test): Likewise.

* test/lisp/subr-tests.el (subr-tests-bug22027): Likewise.

* test/lisp/shadowfile-tests.el (shadow-test00-clusters)
(shadow-test01-sites, shadow-test06-literal-groups)
(shadow-test07-regexp-groups): Likewise.

* test/lisp/replace-tests.el (replace-tests-with-undo): Likewise.

* test/lisp/play/dissociate-tests.el
(dissociate-tests-dissociated-press): Likewise.

* test/lisp/net/tramp-tests.el (tramp-test10-write-region)
(tramp-test21-file-links): Likewise.

* test/lisp/kmacro-tests.el (kmacro-tests-call-macro-hint-and-repeat)
(kmacro-tests-repeat-on-last-key)
(kmacro-tests-repeat-view-and-run)
(kmacro-tests-bind-to-key-with-key-sequence-in-use): Likewise.

* test/lisp/files-tests.el (files-tests-read-file-in-~): Likewise.

* test/lisp/emacs-lisp/rmc-tests.el (test-read-multiple-choice):
Likewise.

* test/lisp/bookmark-tests.el (bookmark-test-bmenu-locate):
Likewise.

* test/lisp/abbrev-tests.el
(inverse-add-abbrev-skips-trailing-nonword)
(inverse-add-abbrev-skips-trailing-nonword/positive-arg)
(inverse-add-abbrev-skips-trailing-nonword/negative-arg): Likewise.

12 files changed:
test/lisp/abbrev-tests.el
test/lisp/bookmark-tests.el
test/lisp/emacs-lisp/rmc-tests.el
test/lisp/files-tests.el
test/lisp/kmacro-tests.el
test/lisp/net/tramp-tests.el
test/lisp/play/dissociate-tests.el
test/lisp/replace-tests.el
test/lisp/shadowfile-tests.el
test/lisp/subr-tests.el
test/lisp/tempo-tests.el
test/lisp/time-stamp-tests.el

index aaf1d4a5b5cf36d99ff9ad7d553f7dd1532b0867..9b998add23fefe907f57af0a56151e3694bc0b6c 100644 (file)
   (let ((table (make-abbrev-table)))
     (with-temp-buffer
       (insert "some text foo ")
-      (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "bar")))
+      (advice-flet ((read-string (lambda (&rest _) "bar")))
         (inverse-add-abbrev table "Global" 1)))
     (should (string= (abbrev-expansion "foo" table) "bar"))))
 
   (let ((table (make-abbrev-table)))
     (with-temp-buffer
       (insert "some text foo ")
-      (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "bar")))
+      (advice-flet ((read-string (lambda (&rest _) "bar")))
         (inverse-add-abbrev table "Global" 2)))
     (should (string= (abbrev-expansion "text" table) "bar"))))
 
     (with-temp-buffer
       (insert "some     text foo")
       (goto-char (point-min))
-      (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "bar")))
+      (advice-flet ((read-string (lambda (&rest _) "bar")))
         (inverse-add-abbrev table "Global" -1)))
     (should (string= (abbrev-expansion "text" table) "bar"))))
 
index c5959e46d80547e6afe1bc78386213f277e18647..26d75ce0c4ef0ebdf010c4825a1fa35a0ecd8193 100644 (file)
@@ -633,9 +633,9 @@ testing `bookmark-bmenu-list'."
 
 (ert-deftest bookmark-test-bmenu-locate ()
   (let (msg)
-    (cl-letf (((symbol-function 'message)
-               (lambda (&rest args)
-                 (setq msg (apply #'format args)))))
+    (advice-flet ((message
+                   (lambda (&rest args)
+                     (setq msg (apply #'format args)))))
       (with-bookmark-bmenu-test
        (bookmark-bmenu-locate)
        (should (equal msg "/some/file"))))))
index 5add24c479a0301d11ffc06aad51f542be821269..de6db13347b854697ccc403d8cd647e48d04bfdd 100644 (file)
 
 (ert-deftest test-read-multiple-choice ()
   (dolist (char '(?y ?n))
-    (cl-letf* (((symbol-function #'read-event) (lambda () char))
-               (str (if (eq char ?y) "yes" "no")))
-      (should (equal (list char str)
-                     (read-multiple-choice "Do it? " '((?y "yes") (?n "no"))))))))
+    (let ((str (if (eq char ?y) "yes" "no")))
+      (advice-flet ((read-event
+                     (lambda () char)))
+        (should (equal (list char str)
+                       (read-multiple-choice "Do it? "
+                                             '((?y "yes") (?n "no")))))))))
 
 
 (provide 'rmc-tests)
index 54801adda63a15024f5ae57ca6f3d10322094b1e..2e9c6adc947a1932a72c5018058b7fea38801f67 100644 (file)
@@ -242,24 +242,25 @@ form.")
   "Test file prompting in directory named `~'.
 If we are in a directory named `~', the default value should not
 be $HOME."
-  (cl-letf (((symbol-function 'completing-read)
-             (lambda (_prompt _coll &optional _pred _req init _hist def _)
-               (or def init)))
-            (dir (make-temp-file "read-file-name-test" t)))
-    (unwind-protect
-        (let ((subdir (expand-file-name "./~/" dir)))
-          (make-directory subdir t)
-          (with-temp-buffer
-            (setq default-directory subdir)
-            (should-not (equal
-                         (expand-file-name (read-file-name "File: "))
-                         (expand-file-name "~/")))
-            ;; Don't overquote either!
-            (setq default-directory (concat "/:" subdir))
-            (should-not (equal
-                         (expand-file-name (read-file-name "File: "))
-                         (concat "/:/:" subdir)))))
-      (delete-directory dir 'recursive))))
+  (let* ((dir (make-temp-file "read-file-name-test" t))
+         (subdir (expand-file-name "./~/" dir)))
+    (advice-flet ((completing-read
+                   (lambda (_prompt _coll &optional _pred _req init _hist def _)
+                     (or def init))))
+      (unwind-protect
+          (progn
+            (make-directory subdir t)
+            (with-temp-buffer
+              (setq default-directory subdir)
+              (should-not (equal
+                           (expand-file-name (read-file-name "File: "))
+                           (expand-file-name "~/")))
+              ;; Don't overquote either!
+              (setq default-directory (concat "/:" subdir))
+              (should-not (equal
+                           (expand-file-name (read-file-name "File: "))
+                           (concat "/:/:" subdir)))))
+        (delete-directory dir 'recursive)))))
 
 (ert-deftest files-tests-file-name-non-special-quote-unquote ()
   (let (;; Just in case it is quoted, who knows.
index bb18c8281409bbf27bee00003e6d67d763f356dd..cc0f48eee8fa7d76f901cd0b49b34e7eb80b5b5e 100644 (file)
@@ -341,8 +341,8 @@ This is a regression test for: Bug#3412, Bug#11817."
     (message "")  ; Clear the echo area. (Bug#3412)
     (kmacro-tests-should-match-message "Type e to repeat macro"
       (kmacro-tests-should-insert "mmmmmm"
-        (cl-letf (((symbol-function #'this-single-command-keys) (lambda ()
-                                                                  [?\C-x ?e])))
+        (advice-flet ((this-single-command-keys (lambda ()
+                                                  [?\C-x ?e])))
           (kmacro-call-macro 3))
         ;; Check that it set up for repeat, and run the repeat.
         (funcall (lookup-key overriding-terminal-local-map "e"))))))
@@ -455,8 +455,8 @@ This is a regression test for: Bug#3412, Bug#11817."
       ;; commands so it should end the sequence.
       (let* ((end-key (kmacro-tests-get-kmacro-key 'kmacro-set-counter))
              (kmacro-tests-events (append events (list end-key))))
-        (cl-letf (((symbol-function #'this-single-command-keys)
-                   (lambda () first-event)))
+        (advice-flet ((this-single-command-keys
+                       (lambda () first-event)))
           (use-local-map kmacro-tests-keymap)
           (kmacro-tests-should-insert "ccbacb"
             ;; End #3 and launch loop to read events.
@@ -466,9 +466,9 @@ This is a regression test for: Bug#3412, Bug#11817."
       ;; so run it again with that at the end.
       (let* ((end-key (kmacro-tests-get-kmacro-key 'kmacro-edit-macro-repeat))
              (kmacro-tests-events (append events (list end-key))))
-        (cl-letf (((symbol-function #'edit-kbd-macro) #'ignore)
-                  ((symbol-function #'this-single-command-keys)
-                   (lambda () first-event)))
+        (advice-flet ((edit-kbd-macro #'ignore)
+                      (this-single-command-keys
+                       (lambda () first-event)))
           (use-local-map kmacro-tests-keymap)
           (kmacro-tests-should-insert "bbbbbaaba"
             (kmacro-end-or-call-macro-repeat 3)))))))
@@ -494,20 +494,22 @@ This is a regression test for: Bug#3412, Bug#11817."
                                        '("d" "c" "b" "a" "d" "c")))))
     (cl-letf ((kmacro-repeat-no-prefix t)
               (kmacro-call-repeat-key t)
-              (kmacro-call-repeat-with-arg nil)
-              ((symbol-function #'this-single-command-keys) (lambda ()
-                                                              first-event)))
-      ;; "Record" some macros.
-      (dotimes (n 4)
-        (kmacro-tests-define-macro (make-vector 1 (+ ?a n))))
-
-      (use-local-map kmacro-tests-keymap)
-      ;; 6 views (the direct call plus the 5 in events) should
-      ;; cycle through the ring and get to the second-to-last
-      ;; macro defined.
-      (kmacro-tests-should-insert "c"
-        (kmacro-tests-should-match-message macros-regexp
-          (kmacro-tests-simulate-command '(kmacro-view-macro-repeat nil)))))))
+              (kmacro-call-repeat-with-arg nil))
+      (advice-flet ((this-single-command-keys (lambda ()
+                                                first-event)))
+        ;; "Record" some macros.
+        (dotimes (n 4)
+          (kmacro-tests-define-macro (make-vector 1 (+ ?a n))))
+
+        (use-local-map kmacro-tests-keymap)
+        ;; 6 views (the direct call plus the 5 in events) should
+        ;; cycle through the ring and get to the second-to-last
+        ;; macro defined.
+        (kmacro-tests-should-insert
+         "c"
+         (kmacro-tests-should-match-message
+          macros-regexp
+          (kmacro-tests-simulate-command '(kmacro-view-macro-repeat nil))))))))
 
 (kmacro-tests-deftest kmacro-tests-bind-to-key-when-recording ()
   "Bind to key doesn't bind a key during macro recording."
@@ -542,18 +544,18 @@ This is a regression test for: Bug#3412, Bug#11817."
     (define-key map "\C-hi" 'info)
     (use-local-map map)
     ;; Try the command with yes-or-no-p set up to say no.
-    (cl-letf (((symbol-function #'yes-or-no-p)
-               (lambda (prompt)
-                 (should (string-match-p "info" prompt))
-                 (should (string-match-p "C-h i" prompt))
-                 nil)))
+    (advice-flet ((yes-or-no-p
+                   (lambda (prompt)
+                     (should (string-match-p "info" prompt))
+                     (should (string-match-p "C-h i" prompt))
+                     nil)))
       (kmacro-bind-to-key nil))
 
     (should (equal (where-is-internal 'info nil t)
                    (vconcat "\C-hi")))
     ;; Try it again with yes.
-    (cl-letf (((symbol-function #' yes-or-no-p)
-               (lambda (_prompt) t)))
+    (advice-flet ((yes-or-no-p
+                   (lambda (_prompt) t)))
       (kmacro-bind-to-key nil))
 
     (should-not (equal (where-is-internal 'info global-map t)
index 3914f9ae44eaa617cafc1b6c85ee01f22e97f8a0..0e4fcb5951f0b19ded23352c95650a547b67bb15 100644 (file)
@@ -2420,16 +2420,16 @@ This checks also `file-name-as-directory', `file-name-directory',
                        tramp--test-messages))))))))
 
            ;; Do not overwrite if excluded.
-           (cl-letf (((symbol-function #'y-or-n-p) (lambda (_prompt) t))
-                     ;; Ange-FTP.
-                     ((symbol-function 'yes-or-no-p) (lambda (_prompt) t)))
+           (advice-flet ((y-or-n-p (lambda (_prompt) t))
+                         ;; Ange-FTP.
+                         (yes-or-no-p (lambda (_prompt) t)))
              (write-region "foo" nil tmp-name nil nil nil 'mustbenew))
            ;; `mustbenew' is passed to Tramp since Emacs 26.1.
            (when (tramp--test-emacs26-p)
              (should-error
-              (cl-letf (((symbol-function #'y-or-n-p) #'ignore)
-                        ;; Ange-FTP.
-                        ((symbol-function 'yes-or-no-p) 'ignore))
+              (advice-flet ((y-or-n-p #'ignore)
+                            ;; Ange-FTP.
+                            (yes-or-no-p 'ignore))
                 (write-region "foo" nil tmp-name nil nil nil 'mustbenew))
                :type 'file-already-exists)
              (should-error
@@ -3522,11 +3522,11 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
               :type 'file-already-exists))
            (when (tramp--test-expensive-test)
              ;; A number means interactive case.
-             (cl-letf (((symbol-function #'yes-or-no-p) #'ignore))
+             (advice-flet ((yes-or-no-p #'ignore))
                (should-error
                 (make-symbolic-link tmp-name1 tmp-name2 0)
                 :type 'file-already-exists)))
-           (cl-letf (((symbol-function #'yes-or-no-p) (lambda (_prompt) t)))
+           (advice-flet ((yes-or-no-p (lambda (_prompt) t)))
              (make-symbolic-link tmp-name1 tmp-name2 0)
              (should
               (string-equal
@@ -3598,11 +3598,11 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
              (add-name-to-file tmp-name1 tmp-name2)
              :type 'file-already-exists)
             ;; A number means interactive case.
-            (cl-letf (((symbol-function #'yes-or-no-p) #'ignore))
+            (advice-flet ((yes-or-no-p #'ignore))
               (should-error
                (add-name-to-file tmp-name1 tmp-name2 0)
                :type 'file-already-exists))
-            (cl-letf (((symbol-function #'yes-or-no-p) (lambda (_prompt) t)))
+            (advice-flet ((yes-or-no-p (lambda (_prompt) t)))
               (add-name-to-file tmp-name1 tmp-name2 0)
               (should (file-regular-p tmp-name2)))
             (add-name-to-file tmp-name1 tmp-name2 'ok-if-already-exists)
index e8d903109fc44796bf89ee24a7043b49f9889246..1583a51acd5a5042a74ea783053b3286df785f58 100644 (file)
@@ -25,8 +25,8 @@
 (require 'dissociate)
 
 (ert-deftest dissociate-tests-dissociated-press ()
-  (cl-letf (((symbol-function 'y-or-n-p) (lambda (_) nil))
-            ((symbol-function 'random)  (lambda (_) 10)))
+  (advice-flet ((y-or-n-p (lambda (_) nil))
+                (random  (lambda (_) 10)))
     (save-window-excursion
       (with-temp-buffer
         (insert "Lorem ipsum dolor sit amet")
index aed14c33572eca2dcddb5d7e96f3222ee38a47bf..0f8084704d9f5eb6a88a7575258398a1079df8e8 100644 (file)
@@ -443,29 +443,28 @@ Return the last evalled form in BODY."
          ;; Bind `read-event' to simulate user input.
          ;; If `replace-tests-bind-read-string' is non-nil, then
          ;; bind `read-string' as well.
-         (cl-letf (((symbol-function 'read-event)
-                    (lambda (&rest _args)
-                      (cl-incf ,count)
-                      (pcase ,count ; Build the clauses from CHAR-NUMS
-                        ,@(append
-                           (delq nil
-                                 (mapcar
-                                  (lambda (chr)
-                                    (when-let (it (alist-get chr char-nums))
-                                      (if (cdr it)
-                                          `(,(cons 'or it) ,chr)
-                                        `(,(car it) ,chr))))
-                                  '(?, ?\s ?u ?U ?E ?q)))
-                           `((_ ,def-chr))))))
-                   ((symbol-function 'read-string)
-                    (if replace-tests-bind-read-string
-                        (lambda (&rest _args) replace-tests-bind-read-string)
-                      (symbol-function 'read-string)))
-                   ;; Emulate replace-highlight clobbering match-data via
-                   ;; isearch-lazy-highlight-new-loop and sit-for (bug#36328)
-                   ((symbol-function 'replace-highlight)
-                    (lambda (&rest _args)
-                      (string-match "[A-Z ]" "ForestGreen"))))
+         (advice-flet ((read-event
+                        (lambda (&rest _args)
+                          (cl-incf ,count)
+                          (pcase ,count ; Build the clauses from CHAR-NUMS
+                            ,@(append
+                               (delq nil
+                                     (mapcar
+                                      (lambda (chr)
+                                        (when-let (it (alist-get chr char-nums))
+                                          (if (cdr it)
+                                              `(,(cons 'or it) ,chr)
+                                            `(,(car it) ,chr))))
+                                      '(?, ?\s ?u ?U ?E ?q)))
+                               `((_ ,def-chr))))))
+                       (read-string
+                        (if replace-tests-bind-read-string
+                            (lambda (&rest _args) replace-tests-bind-read-string)
+                          (lambda (&rest args)
+                            (apply #'read-string args))))
+                       (replace-highlight
+                        (lambda (&rest _args)
+                          (string-match "[A-Z ]" "ForestGreen"))))
            (perform-replace ,from ,to t replace-tests-perform-replace-regexp-flag nil))
          ,@body))))
 
index f40f6a1cdb0787977b43b7120090bcdac5314f09..6a9664638fac1438a67a28c8941eb223c5610e72 100644 (file)
@@ -138,10 +138,10 @@ guaranteed by the originator of a cluster definition."
     (unwind-protect
        ;; We must mock `read-from-minibuffer' and `read-string', in
        ;; order to avoid interactive arguments.
-       (cl-letf* (((symbol-function #'read-from-minibuffer)
-                   (lambda (&rest _args) (pop mocked-input)))
-                  ((symbol-function #'read-string)
-                   (lambda (&rest _args) (pop mocked-input))))
+       (advice-flet ((read-from-minibuffer
+                      (lambda (&rest _args) (pop mocked-input)))
+                     (read-string
+                      (lambda (&rest _args) (pop mocked-input))))
 
           ;; Cleanup & initialize.
           (shadow--tests-cleanup)
@@ -255,10 +255,10 @@ guaranteed by the originator of a cluster definition."
     (unwind-protect
        ;; We must mock `read-from-minibuffer' and `read-string', in
        ;; order to avoid interactive arguments.
-       (cl-letf* (((symbol-function #'read-from-minibuffer)
-                   (lambda (&rest _args) (pop mocked-input)))
-                  ((symbol-function #'read-string)
-                   (lambda (&rest _args) (pop mocked-input))))
+       (advice-flet ((read-from-minibuffer
+                      (lambda (&rest _args) (pop mocked-input)))
+                     (read-string
+                      (lambda (&rest _args) (pop mocked-input))))
 
           ;; Cleanup & initialize.
           (shadow--tests-cleanup)
@@ -608,10 +608,10 @@ guaranteed by the originator of a cluster definition."
     (unwind-protect
        ;; We must mock `read-from-minibuffer' and `read-string', in
        ;; order to avoid interactive arguments.
-       (cl-letf* (((symbol-function #'read-from-minibuffer)
-                   (lambda (&rest _args) (pop mocked-input)))
-                  ((symbol-function #'read-string)
-                   (lambda (&rest _args) (pop mocked-input))))
+       (advice-flet ((read-from-minibuffer
+                      (lambda (&rest _args) (pop mocked-input)))
+                     (read-string
+                      (lambda (&rest _args) (pop mocked-input))))
 
           ;; Cleanup & initialize.
           (shadow--tests-cleanup)
@@ -669,10 +669,10 @@ guaranteed by the originator of a cluster definition."
     (unwind-protect
        ;; We must mock `read-from-minibuffer' and `read-string', in
        ;; order to avoid interactive arguments.
-       (cl-letf* (((symbol-function #'read-from-minibuffer)
-                   (lambda (&rest _args) (pop mocked-input)))
-                  ((symbol-function #'read-string)
-                   (lambda (&rest _args) (pop mocked-input))))
+       (advice-flet ((read-from-minibuffer
+                      (lambda (&rest _args) (pop mocked-input)))
+                     (read-string
+                      (lambda (&rest _args) (pop mocked-input))))
 
           ;; Cleanup & initialize.
           (shadow--tests-cleanup)
index 035c064d75c22e73fa195cce69da5a72d1fdfc7a..b131b5093554c820a46f1d7783ea884e01feab8d 100644 (file)
@@ -337,8 +337,8 @@ cf. Bug#25477."
 (ert-deftest subr-tests-bug22027 ()
   "Test for https://debbugs.gnu.org/22027 ."
   (let ((default "foo") res)
-    (cl-letf (((symbol-function 'read-string)
-               (lambda (_prompt _init _hist def) def)))
+    (advice-flet ((read-string
+                   (lambda (_prompt _init _hist def) def)))
       (setq res (read-passwd "pass: " 'confirm (mapconcat #'string default "")))
       (should (string= default res)))))
 
index bfe475910dab98f51358aec623ec776847192778..333abffc84f4ce579f133efa49aecf40ba1fd877 100644 (file)
@@ -55,7 +55,7 @@
   (with-temp-buffer
     (tempo-define-template "test" '("hello " (p ">")))
     (let ((tempo-interactive t))
-      (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "world")))
+      (advice-flet ((read-string (lambda (&rest _) "world")))
         (tempo-insert-template 'tempo-template-test nil))
       (should (equal (buffer-string) "hello world")))))
 
@@ -64,7 +64,7 @@
   (with-temp-buffer
     (tempo-define-template "test" '("hello " (P ">")))
     ;; By default, `tempo-interactive' is nil, `P' should ignore this.
-    (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "world")))
+    (advice-flet ((read-string (lambda (&rest _) "world")))
       (tempo-insert-template 'tempo-template-test nil))
     (should (equal (buffer-string) "hello world"))))
 
@@ -73,7 +73,7 @@
   (with-temp-buffer
     (tempo-define-template "test" '("abcde" (r ">") "ghijk"))
     (let ((tempo-interactive t))
-      (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "F")))
+      (advice-flet ((read-string (lambda (&rest _) "F")))
         (tempo-insert-template 'tempo-template-test nil))
       (should (equal (buffer-string) "abcdeFghijk")))))
 
@@ -82,7 +82,7 @@
   (with-temp-buffer
     (tempo-define-template "test" '("hello " (p ">" P1) " " (s P1)))
     (let ((tempo-interactive t))
-      (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "world!")))
+      (advice-flet ((read-string (lambda (&rest _) "world!")))
         (tempo-insert-template 'tempo-template-test nil))
       (should (equal (buffer-string) "hello world! world!")))))
 
     ;; Test interactive use
     (emacs-lisp-mode)
     (let ((tempo-interactive t))
-      (cl-letf (((symbol-function 'read-string) (lambda (&rest _) "  (list 1 2 3)")))
+      (advice-flet ((read-string (lambda (&rest _) "  (list 1 2 3)")))
         (tempo-insert-template 'tempo-template-test nil))
       (should (equal (buffer-string) "(progn\n  (list 1 2 3))")))))
 
index e75e84b02217a225fe631eddc53f77310fa04ce9..ab662ffd959e42a919fd319e00d2ba39e682287b 100644 (file)
@@ -57,8 +57,8 @@
 (defmacro with-time-stamp-system-name (name &rest body)
   "Force (system-name) to return NAME while evaluating BODY."
   (declare (indent defun))
-  `(cl-letf (((symbol-function 'system-name)
-              (lambda () ,name)))
+  `(advice-flet ((system-name
+                  (lambda () ,name)))
      ,@body))
 
 (defmacro time-stamp-should-warn (form)