
Fixes: debbugs:20084 * lisp/font-lock.el (font-lock--remove-face-from-text-property): New function. Adapted from the previously commented out remove-single-text-property. Remove previously unused and commented out auxiliary function remove-text-property and obsolete comment. * lisp/comint.el (comint-output-filter): Use it to remove comint-highlight-prompt. (comint-snapshot-last-prompt, comint-output-filter): Use font-lock-prepend-text-property for comint-highlight-prompt. * test/automated/textprop-tests.el: New file. (textprop-tests-font-lock--remove-face-from-text-property): New test. Thus, the original face text property of a prompt "candidate" (the last line of an output chunk not ending with a newline) is preserved. This amends the fix for bug#14744.
57 lines
2.1 KiB
EmacsLisp
57 lines
2.1 KiB
EmacsLisp
;;; textprop-tests.el --- Test suite for text properties.
|
|
|
|
;; Copyright (C) 2015 Free Software Foundation, Inc.
|
|
|
|
;; Author: Wolfgang Jenkner <wjenkner@inode.at>
|
|
;; Keywords: internal
|
|
|
|
;; 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 <http://www.gnu.org/licenses/>.
|
|
|
|
;;; Code:
|
|
|
|
(require 'ert)
|
|
|
|
(ert-deftest textprop-tests-font-lock--remove-face-from-text-property ()
|
|
"Test `font-lock--remove-face-from-text-property'."
|
|
(let* ((string "foobar")
|
|
(stack (list string))
|
|
(faces '(bold (:foreground "red") underline)))
|
|
;; Build each string in `stack' by adding a face to the previous
|
|
;; string.
|
|
(let ((faces (reverse faces)))
|
|
(push (copy-sequence (car stack)) stack)
|
|
(put-text-property 0 3 'font-lock-face (pop faces) (car stack))
|
|
(push (copy-sequence (car stack)) stack)
|
|
(put-text-property 3 6 'font-lock-face (pop faces) (car stack))
|
|
(push (copy-sequence (car stack)) stack)
|
|
(font-lock-prepend-text-property 2 5
|
|
'font-lock-face (pop faces) (car stack)))
|
|
;; Check that removing the corresponding face from each string
|
|
;; yields the previous string in `stack'.
|
|
(while faces
|
|
;; (message "%S" (car stack))
|
|
(should (equal-including-properties
|
|
(progn
|
|
(font-lock--remove-face-from-text-property 0 6
|
|
'font-lock-face
|
|
(pop faces)
|
|
(car stack))
|
|
(pop stack))
|
|
(car stack))))
|
|
;; Sanity check.
|
|
;; (message "%S" (car stack))
|
|
(should (and (equal-including-properties (pop stack) string)
|
|
(null stack)))))
|