Strengthen js-mode indentation tests

Test not only that the indentation engine is idempotent but that it
will indent a file to the expected shape from scratch.

* test/lisp/progmodes/js-tests.el (js-tests--remove-indentation): New.
(js-deftest-indent): Extend test.
This commit is contained in:
Mattias Engdegård 2020-10-18 15:54:02 +02:00
parent b7dfae3a81
commit 9bc5c016a1

View file

@ -199,6 +199,14 @@ if (!/[ (:,='\"]/.test(value)) {
;;;; Indentation tests.
(defun js-tests--remove-indentation ()
"Remove all indentation in the current buffer."
(goto-char (point-min))
(while (re-search-forward (rx bol (+ (in " \t"))) nil t)
(let ((syntax (save-match-data (syntax-ppss))))
(unless (nth 3 syntax) ; Avoid multiline string literals.
(replace-match "")))))
(defmacro js-deftest-indent (file)
`(ert-deftest ,(intern (format "js-indent-test/%s" file)) ()
:tags '(:expensive-test)
@ -206,6 +214,11 @@ if (!/[ (:,='\"]/.test(value)) {
(unwind-protect
(with-current-buffer buf
(let ((orig (buffer-string)))
(js-tests--remove-indentation)
;; Indent and check that we get the original text.
(indent-region (point-min) (point-max))
(should (equal (buffer-string) orig))
;; Verify idempotency.
(indent-region (point-min) (point-max))
(should (equal (buffer-string) orig))))
(kill-buffer buf)))))