;;; em-hist-tests.el --- em-hist test suite -*- lexical-binding:t -*- ;; Copyright (C) 2017-2024 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) (require 'ert-x) (require 'em-hist) (ert-deftest eshell-write-readonly-history () "Test that having read-only strings in history is okay." (ert-with-temp-file histfile (let ((eshell-history-ring (make-ring 2))) (ring-insert eshell-history-ring (propertize "echo foo" 'read-only t)) (ring-insert eshell-history-ring (propertize "echo bar" 'read-only t)) (eshell-write-history histfile)))) (ert-deftest eshell-add-history-element-to-empty-ring-with-erase-dups () "Test that we add a new history item to an empty history ring with `eshell-hist-ignoredups' set to 'erase." (ert-with-test-buffer (:name "eshell-hist-test") (let ((eshell-history-ring (make-ring 2)) (eshell-hist-ignoredups 'erase)) (eshell-add-input-to-history "echo foo") (should (= (ring-length eshell-history-ring) 1)) (should (= (ring-member eshell-history-ring "echo foo") 0))))) (ert-deftest eshell-add-history-element-to-non-empty-ring-with-erase-dups-erases-duplicate () "Test that when we add an existing history item to a non empty history ring with `eshell-hist-ignoredups' set to 'erase the existing element is erased." (ert-with-test-buffer (:name "eshell-hist-test") (let ((eshell-history-ring (make-ring 2)) (eshell-hist-ignoredups 'erase)) (eshell-add-input-to-history "echo foo") (eshell-add-input-to-history "echo foo") (should (= (ring-length eshell-history-ring) 1)) (should (= (ring-member eshell-history-ring "ls") 0))))) (ert-deftest eshell-add-history-element-to-non-empty-ring-with-erase-dups-erases-duplicates () "Test that when we add an existing history item to a non empty history ring with `eshell-hist-ignoredups' set to 'erase the existing elements are erased." (ert-with-test-buffer (:name "eshell-hist-test") (let ((eshell-history-ring (make-ring 5)) (eshell-hist-ignoredups nil)) (eshell-add-input-to-history "echo foo") (eshell-add-input-to-history "echo bar") (eshell-add-input-to-history "echo foo") (should (= (ring-length eshell-history-ring) 3)) (setq eshell-hist-ignoredups 'erase) (eshell-add-input-to-history "echo foo") (should (= (ring-length eshell-history-ring) 2)) (should (= (ring-member eshell-history-ring "echo foo") 0)) (should (= (ring-member eshell-history-ring "echo bar") 1)))))) (ert-deftest eshell-add-history-element-to-non-empty-ring-with-erase-dups-keeps-non-duplicates () "Test that when we add a new history item to a non empty history ring with `eshell-hist-ignoredups' set to 'erase the existing elements are not erased." (ert-with-test-buffer (:name "eshell-hist-test") (let ((eshell-history-ring (make-ring 2)) (eshell-hist-ignoredups 'erase)) (eshell-add-input-to-history "echo foo") (eshell-add-input-to-history "echo bar") (should (= (ring-length eshell-history-ring) 2)) (should (= (ring-member eshell-history-ring "echo foo") 1)) (should (= (ring-member eshell-history-ring "echo bar") 0))))) (provide 'em-hist-test) ;;; em-hist-tests.el ends here