diff options
author | Marcin Borkowski <mbork@mbork.pl> | 2017-02-14 11:30:36 +0100 |
---|---|---|
committer | Marcin Borkowski <mbork@mbork.pl> | 2017-03-31 13:16:21 +0200 |
commit | edac693e0c115e6a4317df7fe7801e3c7c8d97b6 (patch) | |
tree | 612f8172b973bfe27a537f312f530384d9434271 | |
parent | 1da9a207669a3cf5d27ac1dd61543c1492e05360 (diff) | |
download | emacs-edac693e0c115e6a4317df7fe7801e3c7c8d97b6.tar.gz |
Add elisp-tests-with-temp-buffer, a new testing macro
* test/lisp/emacs-lisp/lisp-tests.el
(elisp-test-point-marker-regex) New variable.
(elisp-tests-with-temp-buffer): New macro to help test functions
moving the point and/or mark.
-rw-r--r-- | etc/NEWS | 5 | ||||
-rw-r--r-- | test/lisp/emacs-lisp/lisp-tests.el | 39 |
2 files changed, 44 insertions, 0 deletions
@@ -1059,6 +1059,11 @@ its window gets deleted by 'delete-other-windows'. windows. +** New macro 'elisp-tests-with-temp-buffer' +which helps writing tests for functions that should change buffers in +specific ways or manipulate point or mark positions. + +--- * Changes in Emacs 26.1 on Non-Free Operating Systems ** Intercepting hotkeys on Windows 7 and later now works better. diff --git a/test/lisp/emacs-lisp/lisp-tests.el b/test/lisp/emacs-lisp/lisp-tests.el index 8cba7fc526a..f6039f78eb1 100644 --- a/test/lisp/emacs-lisp/lisp-tests.el +++ b/test/lisp/emacs-lisp/lisp-tests.el @@ -5,6 +5,7 @@ ;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com> ;; Author: Stefan Monnier <monnier@iro.umontreal.ca> ;; Author: Daniel Colascione <dancol@dancol.org> +;; Author: Marcin Borkowski <mbork@mbork.pl> ;; Keywords: internal ;; GNU Emacs is free software: you can redistribute it and/or modify @@ -303,5 +304,43 @@ ;; abcdefghijklmnopqrstuv i f a scan-error) +;;; Helpers + +(defvar elisp-test-point-marker-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)))) + (provide 'lisp-tests) ;;; lisp-tests.el ends here |