1;;; test-helper.el --- Test helper 2 3;;; Commentary: 4;; 5 6;;; Code: 7 8(require 'ert-x) ; `ert-with-test-buffer' 9(require 'cl-lib) ; `cl-defmacro' 10 11(message "Running tests on Emacs %s" emacs-version) 12 13;; The test fixtures assume an indentation width of 2, so we need to set that 14;; up for the tests. 15(setq-default default-tab-width 2 16 indent-tabs-mode nil) 17 18;; Load the elixir-mode under test 19(require 'elixir-mode) 20 21;; Helpers 22 23(cl-defmacro elixir-deftest (name args &body body) 24 (declare (indent 2)) 25 `(ert-deftest ,(intern (format "elixir-ert-%s" name)) () 26 "" 27 ,@args 28 (let ((elixir-smie-verbose-p t)) 29 ,@body))) 30 31(cl-defmacro elixir-ert-with-test-buffer ((&rest args) initial-contents &body body) 32 (declare (indent 2)) 33 `(ert-with-test-buffer (,@args) 34 (elixir-mode) 35 (insert ,initial-contents) 36 ,@body)) 37 38(defmacro elixir-test-with-temp-buffer (content &rest body) 39 "Evaluate BODY in a temporary buffer with CONTENT." 40 (declare (debug t) 41 (indent 1)) 42 `(with-temp-buffer 43 (insert ,content) 44 (elixir-mode) 45 (font-lock-fontify-buffer) 46 (goto-char (point-min)) 47 ,@body)) 48 49(cl-defmacro elixir-def-indentation-test (name args initial-contents expected-output) 50 (declare (indent 2)) 51 `(elixir-deftest ,name ,args 52 (elixir-ert-with-test-buffer (:name ,(format "(Expected)" name)) 53 ,initial-contents 54 (let ((indented (ert-buffer-string-reindented))) 55 (delete-region (point-min) (point-max)) 56 (insert ,expected-output) 57 (ert-with-test-buffer (:name ,(format "(Actual)" name)) 58 (elixir-mode) 59 (insert indented) 60 (should (equal indented ,expected-output))))))) 61 62(when (s-contains? "--win" (getenv "ERT_RUNNER_ARGS")) 63 (defun ert-runner/run-tests-batch-and-exit (selector) 64 (ert-run-tests-interactively selector))) 65 66(provide 'test-helper) 67 68;;; test-helper.el ends here 69