emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] fix/bug-21072 b8fd2c2 4/5: Fix elisp-tests-with-temp-buffe


From: Marcin Borkowski
Subject: [Emacs-diffs] fix/bug-21072 b8fd2c2 4/5: Fix elisp-tests-with-temp-buffer compilation
Date: Tue, 9 May 2017 08:35:46 -0400 (EDT)

branch: fix/bug-21072
commit b8fd2c2ca11bec04ca3f14d27528fce7b6e97466
Author: Noam Postavsky <address@hidden>
Commit: Marcin Borkowski <address@hidden>

    Fix elisp-tests-with-temp-buffer compilation
    
    * test/lisp/emacs-lisp/lisp-tests.el (elisp-tests-with-temp-buffer):
    Don't refer to the =!NAME= as "markers" since they produce variables
    with just plain positions, not marker objects.  Explicitly specify
    that CONTENTS is evaluated at compile time.  Don't re-evaluate
    CONTENTS at runtime.  Fix debug specification.  Suppress warnings due
    to BODY not using =!NAME= variables.
    (elisp-test-point-position-regex): Rename from
    `elisp-test-point-marker-regex'.
    (mark-defun-test-buffer): Wrap in `eval-and-compile'.
---
 test/lisp/emacs-lisp/lisp-tests.el | 68 ++++++++++++++++++++------------------
 1 file changed, 35 insertions(+), 33 deletions(-)

diff --git a/test/lisp/emacs-lisp/lisp-tests.el 
b/test/lisp/emacs-lisp/lisp-tests.el
index 2119758..cfe14922 100644
--- a/test/lisp/emacs-lisp/lisp-tests.el
+++ b/test/lisp/emacs-lisp/lisp-tests.el
@@ -306,46 +306,48 @@
 
 ;;; Helpers
 
-(defvar elisp-test-point-marker-regex "=!\\([a-zA-Z0-9-]+\\)="
-  "A regexp matching placeholders for point position for
-`elisp-tests-with-temp-buffer'.")
+(eval-and-compile
+  (defvar elisp-test-point-position-regex "=!\\([a-zA-Z0-9-]+\\)="
+    "A regexp matching placeholders for point position for
+`elisp-tests-with-temp-buffer'."))
 
 ;; Copied and heavily modified from `python-tests-with-temp-buffer'
 (defmacro elisp-tests-with-temp-buffer (contents &rest body)
   "Create an `emacs-lisp-mode' enabled temp buffer with CONTENTS.
 BODY is the code to be executed within the temp buffer.  Point is
-always located at the beginning of buffer.  Special markers of
-the form =!NAME= in CONTENTS are removed, and a for each one
-a variable called NAME is bound to the position of such
-a marker."
-  (declare (indent 1) (debug t))
-  `(with-temp-buffer
-     (emacs-lisp-mode)
-     (insert ,contents)
-     (goto-char (point-min))
-     (while (re-search-forward elisp-test-point-marker-regex nil t)
-       (delete-region (match-beginning 0)
-                     (match-end 0)))
-     (goto-char (point-min))
-     ,(let (marker-list)
-       (with-temp-buffer
-         (insert (cond ((symbolp contents)
-                         (symbol-value contents))
-                        (t contents)))
-         (goto-char (point-min))
-         (while (re-search-forward elisp-test-point-marker-regex nil t)
-           (push (list (intern (match-string-no-properties 1))
-                       (match-beginning 0))
-                 marker-list)
-           (delete-region (match-beginning 0)
-                          (match-end 0))))
-       `(let ,marker-list
-          ,@body))))
+always located at the beginning of buffer.  CONTENTS is an
+expression that must evaluate to a string at compile time.  Words
+of the form =!NAME= in CONTENTS are removed, and a for each one a
+variable called NAME is bound to the position of the word's
+start."
+  (declare (indent 1) (debug (form body)))
+  (let* ((var-pos nil)
+         (text (with-temp-buffer
+                 (insert (cond ((symbolp contents)
+                                (symbol-value contents))
+                               (t contents)))
+                 (goto-char (point-min))
+                 (while (re-search-forward elisp-test-point-position-regex nil 
t)
+                   (push (list (intern (match-string-no-properties 1))
+                               (match-beginning 0))
+                         var-pos)
+                   (delete-region (match-beginning 0)
+                                  (match-end 0)))
+                 (buffer-string))))
+    `(with-temp-buffer
+       (emacs-lisp-mode)
+       (insert ,text)
+       (goto-char (point-min))
+       (let ,var-pos
+         ;; Let the =!POSITION= variables be ignorable.
+         ,@(mapcar (lambda (v-p) `(ignore ,(car v-p))) var-pos)
+         ,@body))))
 
 ;;; mark-defun
 
-(defvar mark-defun-test-buffer
-  ";; Comment header
+(eval-and-compile
+  (defvar mark-defun-test-buffer
+    ";; Comment header
 =!before-1=
 \(defun func-1 (arg)
   =!inside-1=\"docstring\"
@@ -365,7 +367,7 @@ a marker."
 =!after-4=
 ;; end
 "
-  "Test buffer for `mark-defun'.")
+    "Test buffer for `mark-defun'."))
 
 (ert-deftest mark-defun-no-arg-region-inactive ()
   "Test `mark-defun' with no prefix argument and inactive



reply via email to

[Prev in Thread] Current Thread [Next in Thread]