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'.
This commit is contained in:
parent
0397f85c6f
commit
cb8fcbc3cb
1 changed files with 33 additions and 33 deletions
|
@ -306,46 +306,46 @@
|
|||
|
||||
;;; 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 (def-form body)))
|
||||
(let* ((var-pos nil)
|
||||
(text (with-temp-buffer
|
||||
(insert (eval 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 +365,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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue