;; 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
;; 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