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