diff options
Diffstat (limited to 'test/lisp/bookmark-tests.el')
-rw-r--r-- | test/lisp/bookmark-tests.el | 656 |
1 files changed, 656 insertions, 0 deletions
diff --git a/test/lisp/bookmark-tests.el b/test/lisp/bookmark-tests.el new file mode 100644 index 00000000000..3bea08bc37a --- /dev/null +++ b/test/lisp/bookmark-tests.el @@ -0,0 +1,656 @@ +;;; bookmark-tests.el --- Tests for bookmark.el -*- lexical-binding: t -*- + +;; Copyright (C) 2019-2022 Free Software Foundation, Inc. + +;; Author: Stefan Kangas <stefankangas@gmail.com> + +;; 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/>. + +;;; Commentary: + +;;; Code: + +(require 'ert) +(require 'ert-x) +(require 'bookmark) +(require 'cl-lib) + +(defvar bookmark-tests-bookmark-file (ert-resource-file "test.bmk") + "Bookmark file used for testing.") + +(defvar bookmark-tests-example-file + ;; We use abbreviate-file-name here to match the behavior of + ;; `bookmark-buffer-file-name'. + (abbreviate-file-name (ert-resource-file "example.txt")) + "Example file used for testing.") + +;; The values below should match `bookmark-tests-bookmark-file'. We cache +;; these values to speed up tests by avoiding unnecessary I/O. This +;; makes tests run 5-10 times faster on my system. +(eval-and-compile ; needed by `with-bookmark-test' macro + (defvar bookmark-tests-bookmark '("name" + (filename . "/some/file") + (front-context-string . "abc") + (rear-context-string . "def") + (position . 3)) + "Cached value used in bookmark-tests.el.")) + +(defvar bookmark-tests-cache-timestamp + (cons bookmark-tests-bookmark-file + (nth 5 (file-attributes + bookmark-tests-bookmark-file))) + "Cached value used in bookmark-tests.el.") + +(defmacro with-bookmark-test (&rest body) + "Create environment for testing bookmark.el and evaluate BODY. +Ensure a clean environment for testing, and do not change user +data when running tests interactively." + `(with-temp-buffer + (let ((bookmark-alist (quote (,(copy-sequence bookmark-tests-bookmark)))) + (bookmark-default-file bookmark-tests-bookmark-file) + (bookmark-bookmarks-timestamp bookmark-tests-cache-timestamp) + bookmark-save-flag) + ,@body))) + +(defmacro with-bookmark-test-file (&rest body) + "Create environment for testing bookmark.el and evaluate BODY. +Same as `with-bookmark-test' but also opens the resource file +example.txt in a buffer, which can be accessed by callers through +the lexically-bound variable `buffer'." + `(let ((buffer (find-file-noselect bookmark-tests-example-file))) + (unwind-protect + (with-bookmark-test + ,@body) + (kill-buffer buffer)))) + +(defvar bookmark-tests-bookmark-file-list (ert-resource-file "test-list.bmk") + "Bookmark file used for testing a list of bookmarks.") + +;; The values below should match `bookmark-tests-bookmark-file-list' +;; content. We cache these values to speed up tests. +(eval-and-compile ; needed by `with-bookmark-test-list' macro + (defvar bookmark-tests-bookmark-list-0 '("name-0" + (filename . "/some/file-0") + (front-context-string . "ghi") + (rear-context-string . "jkl") + (position . 4)) + "Cached value used in bookmark-tests.el.")) + +;; The values below should match `bookmark-tests-bookmark-file-list' +;; content. We cache these values to speed up tests. +(eval-and-compile ; needed by `with-bookmark-test-list' macro + (defvar bookmark-tests-bookmark-list-1 '("name-1" + (filename . "/some/file-1") + (front-context-string . "mno") + (rear-context-string . "pqr") + (position . 5)) + "Cached value used in bookmark-tests.el.")) + +;; The values below should match `bookmark-tests-bookmark-file-list' +;; content. We cache these values to speed up tests. +(eval-and-compile ; needed by `with-bookmark-test-list' macro + (defvar bookmark-tests-bookmark-list-2 '("name-2" + (filename . "/some/file-2") + (front-context-string . "stu") + (rear-context-string . "vwx") + (position . 6)) + "Cached value used in bookmark-tests.el.")) + +(defvar bookmark-tests-cache-timestamp-list + (cons bookmark-tests-bookmark-file-list + (nth 5 (file-attributes + bookmark-tests-bookmark-file-list))) + "Cached value used in bookmark-tests.el.") + +(defmacro with-bookmark-test-list (&rest body) + "Create environment for testing bookmark.el and evaluate BODY. +Ensure a clean environment for testing, and do not change user +data when running tests interactively." + `(with-temp-buffer + (let ((bookmark-alist (quote (,(copy-sequence bookmark-tests-bookmark-list-0) + ,(copy-sequence bookmark-tests-bookmark-list-1) + ,(copy-sequence bookmark-tests-bookmark-list-2)))) + (bookmark-default-file bookmark-tests-bookmark-file-list) + (bookmark-bookmarks-timestamp bookmark-tests-cache-timestamp-list) + bookmark-save-flag) + ,@body))) + +(defmacro with-bookmark-test-file-list (&rest body) + "Create environment for testing bookmark.el and evaluate BODY. +Same as `with-bookmark-test-list' but also opens the resource file +example.txt in a buffer, which can be accessed by callers through +the lexically-bound variable `buffer'." + `(let ((buffer (find-file-noselect bookmark-tests-example-file))) + (unwind-protect + (with-bookmark-test-list + ,@body) + (kill-buffer buffer)))) + +(ert-deftest bookmark-tests-all-names () + (with-bookmark-test + (should (equal (bookmark-all-names) '("name"))))) + +(ert-deftest bookmark-tests-get-bookmark () + (with-bookmark-test + (should (equal (bookmark-get-bookmark "name") bookmark-tests-bookmark)))) + +(ert-deftest bookmark-tests-get-bookmark-record () + (with-bookmark-test + (should (equal (bookmark-get-bookmark-record "name") (cdr bookmark-tests-bookmark))))) + +(ert-deftest bookmark-tests-all-names-list () + (with-bookmark-test-list + (should (equal (bookmark-all-names) '("name-0" + "name-1" + "name-2"))))) + +(ert-deftest bookmark-tests-get-bookmark-list () + (with-bookmark-test-list + (should (equal (bookmark-get-bookmark "name-0") + bookmark-tests-bookmark-list-0)) + (should (equal (bookmark-get-bookmark "name-1") + bookmark-tests-bookmark-list-1)) + (should (equal (bookmark-get-bookmark "name-2") + bookmark-tests-bookmark-list-2)))) + +(ert-deftest bookmark-tests-get-bookmark-record-list () + (with-bookmark-test-list + (should (equal (bookmark-get-bookmark-record "name-0") + (cdr bookmark-tests-bookmark-list-0))) + (should (equal (bookmark-get-bookmark-record "name-1") + (cdr bookmark-tests-bookmark-list-1))) + (should (equal (bookmark-get-bookmark-record "name-2") + (cdr bookmark-tests-bookmark-list-2))))) + +(ert-deftest bookmark-tests-record-getters-and-setters-new () + (with-temp-buffer + (let* ((buffer-file-name "test") + (bmk (bookmark-make-record))) + (bookmark-set-name bmk "foobar") + (should (equal (bookmark-name-from-full-record bmk) "foobar")) + (bookmark-set-filename bmk "file/name") + (should (equal (bookmark-get-filename bmk) "file/name")) + (bookmark-set-position bmk 123) + (should (equal (bookmark-get-position bmk) 123)) + (bookmark-set-front-context-string bmk "front") + (should (equal (bookmark-get-front-context-string bmk) "front")) + (bookmark-set-rear-context-string bmk "rear") + (should (equal (bookmark-get-rear-context-string bmk) "rear")) + (bookmark-prop-set bmk 'filename "prop") + (should (equal (bookmark-prop-get bmk 'filename) "prop"))))) + +(ert-deftest bookmark-tests-maybe-historicize-string () + (let ((bookmark-history)) + (bookmark-maybe-historicize-string "foo") + (should (equal (car bookmark-history) "foo")))) + +(defun bookmark-remove-last-modified (bmk) + (assoc-delete-all 'last-modified bmk)) + +(ert-deftest bookmark-tests-make-record () + (with-bookmark-test-file + (let* ((record `("example.txt" (filename . ,bookmark-tests-example-file) + (front-context-string . "is text file is ") + (rear-context-string) + (position . 3) + (defaults "example.txt")))) + (with-current-buffer buffer + (goto-char 3) + (should (equal (bookmark-remove-last-modified (bookmark-make-record)) + record)) + ;; calling twice gives same record + (should (equal (bookmark-remove-last-modified (bookmark-make-record)) + record)))))) + +(ert-deftest bookmark-tests-make-record-list () + (with-bookmark-test-file-list + (let* ((record `("example.txt" (filename . ,bookmark-tests-example-file) + (front-context-string . "is text file is ") + (rear-context-string) + (position . 3) + (defaults "example.txt")))) + (with-current-buffer buffer + (goto-char 3) + (should (equal (bookmark-remove-last-modified (bookmark-make-record)) + record)) + ;; calling twice gives same record + (should (equal (bookmark-remove-last-modified (bookmark-make-record)) + record)))))) + +(ert-deftest bookmark-tests-make-record-function () + (with-bookmark-test + (let ((buffer-file-name "test")) + ;; Named bookmark + (let ((bookmark-make-record-function (lambda () '("<name>")))) + (should (equal (bookmark-make-record) + '("<name>")))) + ;; SECOND format + (let ((bookmark-make-record-function (lambda () '(((position . 2)))))) + (should (equal (bookmark-make-record) + '("test" ((position . 2) (defaults "test")))))) + ;; CURRENT format + (let ((bookmark-make-record-function (lambda () '((position . 2))))) + (should (equal (bookmark-make-record) + '("test" (position . 2) (defaults "test")))))))) + +(ert-deftest bookmark-tests-set () + (with-bookmark-test-file + (let ((bmk1 `("foo" (filename . ,bookmark-tests-example-file) + (front-context-string . "This text file i") + (rear-context-string) + (position . 1))) + (bmk2 `("foo" (filename . ,bookmark-tests-example-file) + (front-context-string) + (rear-context-string . ".txt ends here.\n") + (position . 72))) + bookmark-alist) + (with-current-buffer buffer + ;; 1. bookmark-set + ;; Set first bookmark + (goto-char (point-min)) + (bookmark-set "foo") + (should (equal (mapcar #'bookmark-remove-last-modified bookmark-alist) + (list bmk1))) + ;; Replace that bookmark + (goto-char (point-max)) + (bookmark-set "foo") + (should (equal (mapcar #'bookmark-remove-last-modified bookmark-alist) + (list bmk2))) + ;; Push another bookmark with the same name + (goto-char (point-min)) + (bookmark-set "foo" t) ; NO-OVERWRITE is t + (should (equal (mapcar #'bookmark-remove-last-modified bookmark-alist) + (list bmk1 bmk2))) + + ;; 2. bookmark-set-no-overwrite + ;; Don't overwrite + (should-error (bookmark-set-no-overwrite "foo")) + ;; Set new bookmark + (setq bookmark-alist nil) + (bookmark-set-no-overwrite "foo") + (should (equal (mapcar #'bookmark-remove-last-modified bookmark-alist) + (list bmk1))) + ;; Push another bookmark with the same name + (goto-char (point-max)) + (bookmark-set-no-overwrite "foo" t) ; PUSH-BOOKMARK is t + (should (equal (mapcar #'bookmark-remove-last-modified bookmark-alist) + (list bmk2 bmk1))) + + ;; 3. bookmark-set-internal + (should-error (bookmark-set-internal "foo" "bar" t)))))) + +(ert-deftest bookmark-tests-set/bookmark-use-annotations-t () + (with-bookmark-test-file + (let ((bookmark-use-annotations t)) + (save-window-excursion + (switch-to-buffer buffer) + ;; Should jump to edit annotation buffer + (bookmark-set "foo") + (should (equal major-mode 'bookmark-edit-annotation-mode)) + ;; Should return to the original buffer + (bookmark-edit-annotation-confirm) + (should (equal (current-buffer) buffer)))))) + +(ert-deftest bookmark-tests-kill-line () + (with-temp-buffer + (insert "foobar\n") + (goto-char (point-min)) + (bookmark-kill-line) + (should (equal (buffer-string) "\n"))) + (with-temp-buffer + (insert "foobar\n") + (goto-char (point-min)) + (bookmark-kill-line t) ; including newline + (should (equal (buffer-string) "")))) + +(ert-deftest bookmark-tests-default-annotation-text () + (should (stringp (bookmark-default-annotation-text "foo"))) + (should (string-match "foo" (bookmark-default-annotation-text "foo")))) + +(ert-deftest bookmark-tests-insert-annotation () + (with-bookmark-test + (should-error (bookmark-insert-annotation "a missing bookmark")) + (bookmark-insert-annotation "name") + (should (string-match "Type the annotation" (buffer-string)))) + (with-bookmark-test + (bookmark-set-annotation "name" "some stuff") + (bookmark-insert-annotation "name") + (should (string-match "some stuff" (buffer-string))))) + +(ert-deftest bookmark-tests-edit-annotation () + (with-bookmark-test + (bookmark-edit-annotation "name") + (insert "new text") + (bookmark-edit-annotation-confirm) + (should (equal (bookmark-get-annotation "name") "new text")))) + +(ert-deftest bookmark-tests-jump () + (with-bookmark-test-file + (with-current-buffer buffer + (bookmark-set "test")) + (bookmark-jump "test") + (should (equal (current-buffer) buffer)) + (should-error (bookmark-jump nil)))) + +(ert-deftest bookmark-tests-insert-location () + (with-bookmark-test + (bookmark-insert-location "name") + (should (equal (buffer-string) "/some/file")))) + +(ert-deftest bookmark-tests-location () + (with-bookmark-test + (should (equal (bookmark-location "name") "/some/file")))) + +(ert-deftest bookmark-tests-rename () + (with-bookmark-test + (bookmark-rename "name" "newname") + (should (equal (bookmark-all-names) '("newname"))))) + +(ert-deftest bookmark-tests-insert () + (with-bookmark-test-file + (with-current-buffer buffer + (bookmark-set "test")) + (bookmark-insert "test") + (should (string-match "^This text file is used by bookmark-tests.el" + (buffer-string))))) + +(ert-deftest bookmark-tests-delete () + (with-bookmark-test + (bookmark-delete "name") + (should (equal bookmark-alist nil)))) + +(ert-deftest bookmark-tests-delete-all () + (with-bookmark-test-list + (bookmark-delete-all t) + (should (equal bookmark-alist nil)))) + +(defmacro with-bookmark-test-save-load (&rest body) + "Create environment for testing bookmark.el and evaluate BODY. +Same as `with-bookmark-test' but also sets a temporary +`bookmark-default-file', evaluates BODY, and then runs the test +that saves and then loads the bookmark file." + `(with-bookmark-test + (ert-with-temp-file file + (let ((bookmark-default-file file) + (old-alist bookmark-alist)) + ,@body + (bookmark-save nil file t) + (setq bookmark-alist nil) + (bookmark-load file nil t) + (should (equal bookmark-alist old-alist)))))) + +(defvar bookmark-tests-non-ascii-data + (concat "Здра́вствуйте!" "中文,普通话,汉语" "åäöøñ" + "こんにちは" "你好" "Dobrý deň" + "∀ p ∈ world • hello p □" + ;; These do not yield valid UTF-8 byte sequences. + ;; WARNING: If you try to evaluate the first one of these, + ;; there is a risk that Emacs will crash. Buyer beware. + (decode-coding-string "\xE3\x32\x9A\x36" 'chinese-gb18030) + (char-to-string (decode-char 'eight-bit #x81)))) + +(ert-deftest bookmark-tests-save () + (with-bookmark-test-save-load + ;; Just run the default test according to the macro. + t)) + +(ert-deftest bookmark-tests-save/non-ascii-bookmark-name () + (with-bookmark-test-save-load + (bookmark-set-name "name" bookmark-tests-non-ascii-data))) + +(ert-deftest bookmark-tests-save/non-ascii-annotation () + (with-bookmark-test-save-load + (bookmark-set-annotation "name" bookmark-tests-non-ascii-data))) + +(ert-deftest bookmark-tests-maybe-rename () + (let ((bookmark '("foo"))) + (bookmark-maybe-rename bookmark '("foo")) + (should (equal bookmark '("foo<2>"))))) + +(ert-deftest bookmark-tests-load () + (with-bookmark-test + (should-error (bookmark-load "no/such/file")) + (let* ((bookmark-alist '())) + (bookmark-load bookmark-tests-bookmark-file nil t) + (should (equal bookmark-alist (list bookmark-tests-bookmark))) + (bookmark-load bookmark-tests-bookmark-file t t) ; OVERWRITE is t + (should (equal bookmark-alist (list bookmark-tests-bookmark))) + ;; Append + (bookmark-load bookmark-tests-bookmark-file nil t) ; OVERWRITE is nil + (should (equal bookmark-alist + (list bookmark-tests-bookmark + (cons "name<2>" (cdr bookmark-tests-bookmark)))))))) + +;; TODO: Add more tests for bookmark-bmenu. + +(defmacro with-bookmark-bmenu-test (&rest body) + "Create environment for testing `bookmark-bmenu-list' and evaluate BODY. +Same as `with-bookmark-test' but with additions suitable for +testing `bookmark-bmenu-list'." + `(with-bookmark-test + (let ((bookmark-bmenu-buffer "*Bookmark List - Testing*")) + (unwind-protect + (save-window-excursion + (bookmark-bmenu-list) + ,@body) + (kill-buffer bookmark-bmenu-buffer))))) + +(defmacro with-bookmark-bmenu-test-list (&rest body) + "Create environment for testing `bookmark-bmenu-list' and evaluate BODY. +Same as `with-bookmark-test-list' but with additions suitable for +testing `bookmark-bmenu-list'." + `(with-bookmark-test-list + (let ((bookmark-bmenu-buffer "*Bookmark List - Testing*")) + (unwind-protect + (save-window-excursion + (bookmark-bmenu-list) + ,@body) + (kill-buffer bookmark-bmenu-buffer))))) + +(ert-deftest bookmark-test-bmenu-edit-annotation/show-annotation () + (with-bookmark-bmenu-test + (bookmark-set-annotation "name" "foo") + (bookmark-bmenu-edit-annotation) + (should (string-match "foo" (buffer-string))) + (kill-buffer (current-buffer)))) + +(ert-deftest bookmark-test-bmenu-send-edited-annotation () + (with-bookmark-bmenu-test + (bookmark-bmenu-edit-annotation) + (insert "foo") + (bookmark-edit-annotation-confirm) + (should (equal (bookmark-get-annotation "name") "foo")))) + +(ert-deftest bookmark-test-bmenu-send-edited-annotation/restore-focus () + "Test for https://debbugs.gnu.org/20150 ." + (with-bookmark-bmenu-test + (bookmark-bmenu-edit-annotation) + (insert "foo") + (bookmark-edit-annotation-confirm) + (should (equal (buffer-name (current-buffer)) bookmark-bmenu-buffer)) + (beginning-of-line) + (forward-char 4) + (should (looking-at "name")))) + +(ert-deftest bookmark-test-bmenu-toggle-filenames () + (with-bookmark-bmenu-test + (should (re-search-forward "/some/file" nil t)) + (bookmark-bmenu-toggle-filenames) + (goto-char (point-min)) + (should-not (re-search-forward "/some/file" nil t)))) + +(ert-deftest bookmark-test-bmenu-toggle-filenames/show () + (with-bookmark-bmenu-test + (bookmark-bmenu-toggle-filenames t) + (should (re-search-forward "/some/file")))) + +(ert-deftest bookmark-test-bmenu-show-filenames () + (with-bookmark-bmenu-test + (bookmark-bmenu-show-filenames) + (should (re-search-forward "/some/file")))) + +(ert-deftest bookmark-test-bmenu-hide-filenames () + (with-bookmark-bmenu-test + (bookmark-bmenu-hide-filenames) + (goto-char (point-min)) + (should-not (re-search-forward "/some/file" nil t)))) + +(ert-deftest bookmark-test-bmenu-bookmark () + (with-bookmark-bmenu-test + (should (equal (bookmark-bmenu-bookmark) "name")))) + +(ert-deftest bookmark-test-bmenu-mark () + (with-bookmark-bmenu-test + (bookmark-bmenu-mark) + (forward-line -1) + (beginning-of-line) + (should (looking-at "^>")))) + +(ert-deftest bookmark-test-bmenu-any-marks () + (with-bookmark-bmenu-test + (bookmark-bmenu-mark) + (beginning-of-line) + (should (bookmark-bmenu-any-marks)))) + +(ert-deftest bookmark-test-bmenu-mark-all () + (with-bookmark-bmenu-test-list + (let ((here (point-max))) + ;; Expect to not move the point + (goto-char here) + (bookmark-bmenu-mark-all) + (should (equal here (point))) + ;; Verify that all bookmarks are marked + (goto-char (point-min)) + (bookmark-bmenu-ensure-position) + (should (looking-at "^> ")) + (should (equal bookmark-tests-bookmark-list-0 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + (forward-line 1) + (should (looking-at "^> ")) + (should (equal bookmark-tests-bookmark-list-1 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + (forward-line 1) + (should (looking-at "^> ")) + (should (equal bookmark-tests-bookmark-list-2 + (bookmark-get-bookmark (bookmark-bmenu-bookmark))))))) + +(ert-deftest bookmark-test-bmenu-any-marks-list () + (with-bookmark-bmenu-test-list + ;; Mark just the second item + (goto-char (point-min)) + (bookmark-bmenu-ensure-position) + (forward-line 1) + (bookmark-bmenu-mark) + ;; Verify that only the second item is marked + (goto-char (point-min)) + (bookmark-bmenu-ensure-position) + (should (looking-at "^ ")) + (should (equal bookmark-tests-bookmark-list-0 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + (forward-line 1) + (should (looking-at "^> ")) + (should (equal bookmark-tests-bookmark-list-1 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + (forward-line 1) + (should (looking-at "^ ")) + (should (equal bookmark-tests-bookmark-list-2 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + ;; There should be at least one mark + (should (bookmark-bmenu-any-marks)))) + +(ert-deftest bookmark-test-bmenu-unmark () + (with-bookmark-bmenu-test + (bookmark-bmenu-mark) + (goto-char (point-min)) + (bookmark-bmenu-unmark) + (forward-line -1) + (beginning-of-line) + (should (looking-at "^ ")))) + +(ert-deftest bookmark-test-bmenu-unmark-all () + (with-bookmark-bmenu-test-list + (bookmark-bmenu-mark-all) + (let ((here (point-max))) + ;; Expect to not move the point + (goto-char here) + (bookmark-bmenu-unmark-all) + (should (equal here (point))) + ;; Verify that all bookmarks are unmarked + (goto-char (point-min)) + (bookmark-bmenu-ensure-position) + (should (looking-at "^ ")) + (should (equal bookmark-tests-bookmark-list-0 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + (forward-line 1) + (should (looking-at "^ ")) + (should (equal bookmark-tests-bookmark-list-1 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + (forward-line 1) + (should (looking-at "^ ")) + (should (equal bookmark-tests-bookmark-list-2 + (bookmark-get-bookmark (bookmark-bmenu-bookmark))))))) + +(ert-deftest bookmark-test-bmenu-delete () + (with-bookmark-bmenu-test + (bookmark-bmenu-delete) + (bookmark-bmenu-execute-deletions) + (should (equal (length bookmark-alist) 0)))) + +(ert-deftest bookmark-test-bmenu-delete-all () + (with-bookmark-bmenu-test-list + ;; Verify that unmarked bookmarks aren't deleted + (bookmark-bmenu-execute-deletions) + (should-not (eq bookmark-alist nil)) + (let ((here (point-max))) + ;; Expect to not move the point + (goto-char here) + (bookmark-bmenu-delete-all) + (should (equal here (point))) + ;; Verify that all bookmarks are marked for deletion + (goto-char (point-min)) + (bookmark-bmenu-ensure-position) + (should (looking-at "^D ")) + (should (equal bookmark-tests-bookmark-list-0 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + (forward-line 1) + (should (looking-at "^D ")) + (should (equal bookmark-tests-bookmark-list-1 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + (forward-line 1) + (should (looking-at "^D ")) + (should (equal bookmark-tests-bookmark-list-2 + (bookmark-get-bookmark (bookmark-bmenu-bookmark)))) + ;; Verify that all bookmarks are deleted + (bookmark-bmenu-execute-deletions) + (should (eq bookmark-alist nil))))) + +(ert-deftest bookmark-test-bmenu-locate () + (let (msg) + (cl-letf (((symbol-function 'message) + (lambda (&rest args) + (setq msg (apply #'format args))))) + (with-bookmark-bmenu-test + (bookmark-bmenu-locate) + (should (equal msg "/some/file")))))) + +(ert-deftest bookmark-test-bmenu-filter-alist-by-regexp () + (with-bookmark-bmenu-test + (bookmark-bmenu-filter-alist-by-regexp regexp-unmatchable) + (goto-char (point-min)) + (should (looking-at "^$")))) + +(provide 'bookmark-tests) +;;; bookmark-tests.el ends here |