1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-14 09:39:42 +00:00
emacs/test/lisp/hi-lock-tests.el
Paul Eggert ba05d005e5 Update copyright year to 2021
Run "TZ=UTC0 admin/update-copyright".
2021-01-01 01:13:56 -08:00

211 lines
8.5 KiB
EmacsLisp

;;; hi-lock-tests.el --- Tests for hi-lock.el -*- lexical-binding: t; -*-
;; Copyright (C) 2017-2021 Free Software Foundation, Inc.
;; Author: Tino Calancha <tino.calancha@gmail.com>
;; Keywords:
;; This file is part of GNU Emacs.
;; 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 <https://www.gnu.org/licenses/>.
;;; Code:
(require 'ert)
(require 'hi-lock)
(ert-deftest hi-lock-bug26666 ()
"Test for https://debbugs.gnu.org/26666 ."
(let ((faces hi-lock-face-defaults))
(with-temp-buffer
(insert "a A b B\n")
(cl-letf (((symbol-function 'completing-read)
(lambda (_prompt _coll _x _y _z _hist defaults)
(car defaults))))
(dotimes (_ 2)
(let ((face (hi-lock-read-face-name)))
(hi-lock-set-pattern "a" face))))
(should (equal hi-lock--unused-faces (cdr faces))))))
(ert-deftest hi-lock-test-set-pattern ()
(let ((faces hi-lock-face-defaults))
(with-temp-buffer
(insert "foo bar")
(cl-letf (((symbol-function 'completing-read)
(lambda (_prompt _coll _x _y _z _hist defaults)
(car defaults))))
(hi-lock-set-pattern "9999" (hi-lock-read-face-name)) ; No match
(hi-lock-set-pattern "foo" (hi-lock-read-face-name)))
;; Only one match, then we have used just 1 face
(should (equal hi-lock--unused-faces (cdr faces))))))
(ert-deftest hi-lock-case-fold ()
"Test for case-sensitivity."
(let ((hi-lock-auto-select-face t))
(with-temp-buffer
(insert "a A b B\n")
(dotimes (_ 2) (highlight-regexp "[a]"))
(should (= (length (overlays-in (point-min) (point-max))) 2))
(unhighlight-regexp "[a]")
(should (= (length (overlays-in (point-min) (point-max))) 0))
(dotimes (_ 2) (highlight-regexp "[a]" nil nil "a"))
(should (= (length (overlays-in (point-min) (point-max))) 2))
(unhighlight-regexp "a")
(should (= (length (overlays-in (point-min) (point-max))) 0))
(dotimes (_ 2) (highlight-regexp "[A]" ))
(should (= (length (overlays-in (point-min) (point-max))) 1))
(unhighlight-regexp "[A]")
(should (= (length (overlays-in (point-min) (point-max))) 0))
(dotimes (_ 2) (highlight-regexp "[A]" nil nil "A"))
(should (= (length (overlays-in (point-min) (point-max))) 1))
(unhighlight-regexp "A")
(should (= (length (overlays-in (point-min) (point-max))) 0))
(let ((case-fold-search nil)) (dotimes (_ 2) (highlight-regexp "[a]")))
(should (= (length (overlays-in (point-min) (point-max))) 1))
(unhighlight-regexp "[a]")
(should (= (length (overlays-in (point-min) (point-max))) 0))
(dotimes (_ 2) (highlight-phrase "a a"))
(should (= (length (overlays-in (point-min) (point-max))) 1))
(unhighlight-regexp "a a")
(should (= (length (overlays-in (point-min) (point-max))) 0))
(let ((search-spaces-regexp search-whitespace-regexp)) (highlight-regexp "a a"))
(should (= (length (overlays-in (point-min) (point-max))) 1))
(cl-letf (((symbol-function 'completing-read)
(lambda (_prompt _coll _x _y _z _hist defaults)
(car defaults))))
(call-interactively 'unhighlight-regexp))
(should (= (length (overlays-in (point-min) (point-max))) 0))
(emacs-lisp-mode)
(setq font-lock-mode t)
(dotimes (_ 2) (highlight-regexp "[a]"))
(font-lock-ensure)
(should (memq 'hi-yellow (get-text-property 1 'face)))
(should (memq 'hi-yellow (get-text-property 3 'face)))
(let ((font-lock-fontified t)) (unhighlight-regexp "[a]"))
(should (null (get-text-property 3 'face)))
(dotimes (_ 2) (highlight-regexp "[a]" nil nil "a"))
(font-lock-ensure)
(should (memq 'hi-yellow (get-text-property 1 'face)))
(should (memq 'hi-yellow (get-text-property 3 'face)))
(let ((font-lock-fontified t)) (unhighlight-regexp "a"))
(should (null (get-text-property 3 'face)))
(dotimes (_ 2) (highlight-regexp "[A]" ))
(font-lock-ensure)
(should (null (get-text-property 1 'face)))
(should (memq 'hi-yellow (get-text-property 3 'face)))
(let ((font-lock-fontified t)) (unhighlight-regexp "[A]"))
(should (null (get-text-property 3 'face)))
(dotimes (_ 2) (highlight-regexp "[A]" nil nil "A"))
(font-lock-ensure)
(should (null (get-text-property 1 'face)))
(should (memq 'hi-yellow (get-text-property 3 'face)))
(let ((font-lock-fontified t)) (unhighlight-regexp "A"))
(should (null (get-text-property 3 'face)))
(let ((case-fold-search nil)) (dotimes (_ 2) (highlight-regexp "[a]")))
(font-lock-ensure)
(should (memq 'hi-yellow (get-text-property 1 'face)))
(should (null (get-text-property 3 'face)))
(let ((font-lock-fontified t)) (unhighlight-regexp "[a]"))
(should (null (get-text-property 1 'face)))
(dotimes (_ 2) (highlight-phrase "a a"))
(font-lock-ensure)
(should (memq 'hi-yellow (get-text-property 1 'face)))
(let ((font-lock-fontified t)) (unhighlight-regexp "a a"))
(should (null (get-text-property 1 'face)))
(let ((search-spaces-regexp search-whitespace-regexp)) (highlight-regexp "a a"))
(font-lock-ensure)
(should (memq 'hi-yellow (get-text-property 1 'face)))
(cl-letf (((symbol-function 'completing-read)
(lambda (_prompt _coll _x _y _z _hist defaults)
(car defaults)))
(font-lock-fontified t))
(call-interactively 'unhighlight-regexp))
(should (null (get-text-property 1 'face))))))
(ert-deftest hi-lock-unhighlight ()
"Test for unhighlighting and `hi-lock--regexps-at-point'."
(let ((hi-lock-auto-select-face t))
(with-temp-buffer
(insert "aAbB\n")
(cl-letf (((symbol-function 'completing-read)
(lambda (_prompt _coll _x _y _z _hist defaults)
(car defaults))))
(highlight-regexp "a")
(highlight-regexp "b")
(should (= (length (overlays-in (point-min) (point-max))) 4))
;; `hi-lock--regexps-at-point' should take regexp "a" at point 1,
;; not the last regexp "b"
(goto-char 1)
(call-interactively 'unhighlight-regexp)
(should (= (length (overlays-in 1 3)) 0))
(should (= (length (overlays-in 3 5)) 2))
;; Next call should unhighlight remaining regepxs
(call-interactively 'unhighlight-regexp)
(should (= (length (overlays-in 3 5)) 0))
;; Test unhighlight all
(highlight-regexp "a")
(highlight-regexp "b")
(should (= (length (overlays-in (point-min) (point-max))) 4))
(unhighlight-regexp t)
(should (= (length (overlays-in (point-min) (point-max))) 0))
(emacs-lisp-mode)
(setq font-lock-mode t)
(highlight-regexp "a")
(highlight-regexp "b")
(font-lock-ensure)
(should (memq 'hi-yellow (get-text-property 1 'face)))
(should (memq 'hi-yellow (get-text-property 3 'face)))
;; `hi-lock--regexps-at-point' should take regexp "a" at point 1,
;; not the last regexp "b"
(goto-char 1)
(let ((font-lock-fontified t)) (call-interactively 'unhighlight-regexp))
(should (null (get-text-property 1 'face)))
(should (memq 'hi-yellow (get-text-property 3 'face)))
;; Next call should unhighlight remaining regepxs
(let ((font-lock-fontified t)) (call-interactively 'unhighlight-regexp))
(should (null (get-text-property 3 'face)))
;; Test unhighlight all
(highlight-regexp "a")
(highlight-regexp "b")
(font-lock-ensure)
(should (memq 'hi-yellow (get-text-property 1 'face)))
(should (memq 'hi-yellow (get-text-property 3 'face)))
(let ((font-lock-fontified t)) (unhighlight-regexp t))
(should (null (get-text-property 1 'face)))
(should (null (get-text-property 3 'face)))))))
(provide 'hi-lock-tests)
;;; hi-lock-tests.el ends here