]> git.eshelyaron.com Git - emacs.git/commitdiff
Strengthen js-mode indentation tests
authorMattias Engdegård <mattiase@acm.org>
Sun, 18 Oct 2020 13:54:02 +0000 (15:54 +0200)
committerMattias Engdegård <mattiase@acm.org>
Sun, 18 Oct 2020 13:54:02 +0000 (15:54 +0200)
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.

test/lisp/progmodes/js-tests.el

index 1de2df0e85ab1f986b9d3bf9d3e779d4d4f6f6c6..6c3a618b9495dae8fd128e51c8b1ccca22ddfd51 100644 (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)))))