1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-29 11:02:01 +00:00
emacs/test/lisp/emacs-lisp/lisp-mode-tests.el

99 lines
2.8 KiB
EmacsLisp

;;; lisp-mode-tests.el --- Test Lisp editing commands -*- lexical-binding: t; -*-
;; Copyright (C) 2017 Free Software Foundation, Inc.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Code:
(require 'ert)
(require 'cl-lib)
(require 'lisp-mode)
(ert-deftest indent-sexp ()
"Test basics of \\[indent-sexp]."
(with-temp-buffer
(insert "\
\(a
(prog1
(prog1
1
2)
2)
(1
\"string
noindent\" (\"string2
noindent\" 3
4)
2) ; comment
;; comment
b)")
(goto-char (point-min))
(let ((indent-tabs-mode nil)
(correct (buffer-string)))
(dolist (mode '(fundamental-mode emacs-lisp-mode))
(funcall mode)
(indent-sexp)
;; Don't mess up correctly indented code.
(should (string= (buffer-string) correct))
;; Correctly add indentation.
(save-excursion
(while (not (eobp))
(delete-horizontal-space)
(forward-line)))
(indent-sexp)
(should (equal (buffer-string) correct))
;; Correctly remove indentation.
(save-excursion
(let ((n 0))
(while (not (eobp))
(unless (looking-at "noindent")
(insert (make-string n ?\s)))
(cl-incf n)
(forward-line))))
(indent-sexp)
(should (equal (buffer-string) correct))))))
(ert-deftest indent-subsexp ()
"Make sure calling `indent-sexp' inside a sexp works."
(with-temp-buffer
(insert "\
\(d1 xx
(d2 yy
zz)
11)")
(let ((correct (buffer-string)))
(search-backward "d2")
(up-list -1)
(indent-sexp)
(should (equal (buffer-string) correct))
(backward-sexp)
(end-of-line)
(indent-sexp)
(should (equal (buffer-string) correct)))))
(ert-deftest indent-sexp-in-string ()
"Make sure calling `indent-sexp' inside a string works."
;; See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=21343.
(with-temp-buffer
(emacs-lisp-mode)
(insert "\";\"")
(let ((correct (buffer-string)))
(search-backward ";")
(indent-sexp)
(should (equal (buffer-string) correct)))))
(provide 'lisp-mode-tests)
;;; lisp-mode-tests.el ends here