;;; marker-tests.el --- tests for marker.c functions -*- lexical-binding: t -*- ;; Copyright (C) 2016-2019 Free Software Foundation, Inc. ;; 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 . ;;; Code: (require 'ert) ;; The following three tests assert that Emacs survives operations ;; copying a marker whose character position differs from its byte ;; position into a buffer whose character size equals its byte size ;; (Bug#24368). (ert-deftest marker-set-window-start-from-other-buffer () "`set-window-start' from other buffer's marker." (let ((text-quoting-style 'curve)) (describe-function #'describe-function)) (let ((marker (with-current-buffer "*Help*" (copy-marker (point-max))))) (should (set-window-start (selected-window) marker)))) (ert-deftest marker-set-window-point-from-other-buffer () "`set-window-point' from another buffer's marker." (let ((text-quoting-style 'curve)) (describe-function #'describe-function)) (let* ((help (get-buffer "*Help*")) (marker (with-current-buffer help (copy-marker (point-max))))) (with-selected-window (get-buffer-window help) (should (set-window-point (get-buffer-window "*scratch*") marker))))) (ert-deftest marker-goto-char-from-other-buffer () "`goto-char' from another buffer's marker." (let ((text-quoting-style 'curve)) (describe-function #'describe-function)) (let ((marker-1 (make-marker)) (marker-2 (make-marker))) (describe-function #'describe-function) (with-current-buffer "*Help*" (set-marker marker-1 (point-max))) (set-marker marker-2 marker-1) (should (goto-char marker-2)))) (ert-deftest marker-list () "Test `marker-list' behavior." (with-temp-buffer ;; No markers created yet. (should-not (marker-list)) (insert "first\nsecond\n") (forward-line -1) (let ((markers (list (point-min-marker) (point-max-marker)))) ;; Check marker arguments. (should (equal (apply #'marker-list markers) markers)) (save-restriction (narrow-to-region (point) (line-end-position)) ;; Check accessible range of buffer. (should-not (marker-list)) ;; Check invalid region. (should-error (apply #'marker-list markers) :type 'args-out-of-range))) ;; Check single position and that mark is included. (let ((marker (set-marker (mark-marker) (point)))) (should (equal (marker-list (point)) (list marker)))) ;; Check that unchained markers are not included. (dolist (marker (marker-list)) (set-marker marker nil)) (should-not (marker-list)))) (ert-deftest marker-list-buffer-change () "Test `marker-list' behavior across buffer changes." (with-temp-buffer (let ((marker (point-marker)) (markers (marker-list))) (with-temp-buffer (set-marker marker (point)) (should (equal (marker-list) (list marker))) (should (equal (mapcar #'marker-buffer markers) (list (current-buffer))))) (should-not (marker-list))))) ;;; marker-tests.el ends here.