]> git.eshelyaron.com Git - emacs.git/commitdiff
Add some more Eshell history tests
authorJim Porter <jporterbugs@gmail.com>
Sat, 11 Nov 2023 01:53:02 +0000 (17:53 -0800)
committerJim Porter <jporterbugs@gmail.com>
Sat, 11 Nov 2023 02:00:21 +0000 (18:00 -0800)
* test/lisp/eshell/em-hist-tests.el (em-hist-test/check-history-file):
New function.  Use it throughout this file.
(em-hist-test/history-append): Rename to...
(em-hist-test/write-history/append): ... this.
(em-hist-test/history-read): Rename to...
(em-hist-test/write-history/overwrite): ... this.
(em-hist-test/write-history/append-multiple-eshells)
(em-hist-test/write-history/overwrite-multiple-shells): New tests.
(em-hist-test/write-history/read-only): Check the resulting history.

test/lisp/eshell/em-hist-tests.el

index 4851bdc50b2de4e2944270f4b8c3a4ff42f11514..e90ce141a81664da472da09c120a813e2880b1f8 100644 (file)
@@ -19,6 +19,9 @@
 
 ;;; Code:
 
+(eval-when-compile
+  (require 'cl-lib))
+
 (require 'ert)
 (require 'ert-x)
 (require 'em-hist)
                            (file-name-directory (or load-file-name
                                                     default-directory))))
 
+(cl-defun em-hist-test/check-history-file (file-name expected &optional
+                                                     (expected-ring t))
+  "Check that the contents of FILE-NAME match the EXPECTED history entries.
+Additonally, check that after loading the file, the history ring
+matches too.  If EXPECTED-RING is a list, compare the ring
+elements against that; if t (the default), check again EXPECTED."
+  (when (eq expected-ring t) (setq expected-ring expected))
+  ;; First check the actual file.
+  (should (equal (with-temp-buffer
+                   (insert-file-contents file-name)
+                   (buffer-string))
+                 (mapconcat (lambda (i) (concat i "\n")) expected)))
+  ;; Now read the history ring and check that too.
+  (let (eshell-history-ring eshell-history-index eshell-hist--new-items)
+    (eshell-read-history file-name)
+    (should (equal (nreverse (ring-elements eshell-history-ring))
+                   expected-ring))))
+
 ;;; Tests:
 
-(ert-deftest em-hist-test/write-readonly-history ()
+(ert-deftest em-hist-test/write-history/append ()
+  "Test appending new history to history file."
+  (ert-with-temp-file histfile
+    (with-temp-eshell
+     (em-hist-test/check-history-file histfile nil)
+     (eshell-insert-command "echo hi")
+     (eshell-write-history histfile 'append)
+     (em-hist-test/check-history-file histfile '("echo hi"))
+     (eshell-insert-command "echo bye")
+     (eshell-write-history histfile 'append)
+     (em-hist-test/check-history-file histfile '("echo hi" "echo bye")))))
+
+(ert-deftest em-hist-test/write-history/append-multiple-eshells ()
+  "Test appending new history to history file from multiple Eshells."
+  (ert-with-temp-file histfile
+    (with-temp-eshell
+     (with-temp-eshell
+      ;; Enter some commands and save them.
+      (eshell-insert-command "echo foo")
+      (eshell-insert-command "echo bar")
+      (eshell-write-history histfile 'append)
+      (em-hist-test/check-history-file histfile '("echo foo" "echo bar")))
+     ;; Now do the same in the first Eshell buffer.
+     (eshell-insert-command "echo goat")
+     (eshell-insert-command "echo panda")
+     (eshell-write-history histfile 'append)
+     (em-hist-test/check-history-file
+      histfile '("echo foo" "echo bar" "echo goat" "echo panda")))))
+
+(ert-deftest em-hist-test/write-history/overwrite ()
+  "Test overwriting history file."
+  (ert-with-temp-file histfile
+    (with-temp-eshell
+     (em-hist-test/check-history-file histfile nil)
+     (eshell-insert-command "echo hi")
+     (eshell-insert-command "echo bye")
+     (eshell-insert-command "echo bye")
+     (eshell-insert-command "echo hi")
+     (eshell-write-history histfile)
+     (em-hist-test/check-history-file
+      histfile '("echo hi" "echo bye" "echo bye" "echo hi"))
+     (let ((eshell-hist-ignoredups t))
+       (em-hist-test/check-history-file
+        histfile '("echo hi" "echo bye" "echo bye" "echo hi")
+        '("echo hi" "echo bye" "echo hi")))
+     (let ((eshell-hist-ignoredups 'erase))
+       (em-hist-test/check-history-file
+        histfile '("echo hi" "echo bye" "echo bye" "echo hi")
+        '("echo bye" "echo hi"))))))
+
+(ert-deftest em-hist-test/write-history/overwrite-multiple-shells ()
+  "Test overwriting history file from multiple Eshells."
+  (ert-with-temp-file histfile
+    (with-temp-eshell
+     (with-temp-eshell
+      ;; Enter some commands and save them.
+      (eshell-insert-command "echo foo")
+      (eshell-insert-command "echo bar")
+      (eshell-write-history histfile)
+      (em-hist-test/check-history-file histfile '("echo foo" "echo bar")))
+     ;; Now do the same in the first Eshell buffer.
+     (eshell-insert-command "echo goat")
+     (eshell-insert-command "echo panda")
+     (eshell-write-history histfile)
+     (em-hist-test/check-history-file
+      histfile '("echo goat" "echo panda")))))
+
+(ert-deftest em-hist-test/write-history/read-only ()
   "Test that having read-only strings in history is okay."
   (ert-with-temp-file histfile
     (let ((eshell-history-ring (make-ring 2)))
                    (propertize "echo foo" 'read-only t))
       (ring-insert eshell-history-ring
                    (propertize "echo bar" 'read-only t))
-      (eshell-write-history histfile))))
-
-(ert-deftest em-hist-test/history-append ()
-  "Test 'history -a'."
-  (ert-with-temp-file histfile
-    (with-temp-eshell
-     (let ((eshell-history-file-name histfile))
-       (eshell-insert-command "echo hi")
-       (eshell-insert-command "history -w")
-       (eshell-insert-command "history -a")
-       (eshell-insert-command "echo bye")
-       (eshell-insert-command "history -a")
-       (eshell-insert-command "history -r")
-       (should (equal (ring-elements eshell-history-ring)
-                      '("history -a" "echo bye"
-                        "history -a" "history -w" "echo hi")))))))
-
-(ert-deftest em-hist-test/history-read ()
-  "Test 'history -r'."
-  (ert-with-temp-file histfile
-    (with-temp-eshell
-     (let ((eshell-history-file-name histfile))
-       (eshell-insert-command "echo hi")
-       (eshell-insert-command "echo bye")
-       (eshell-insert-command "echo bye")
-       (eshell-insert-command "echo hi")
-       (eshell-insert-command "history -w")
-       (let ((eshell-hist-ignoredups t))
-         (eshell-insert-command "history -r")
-         (should (equal (ring-elements eshell-history-ring)
-                        '("history -w" "echo hi" "echo bye" "echo hi"))))
-       (let ((eshell-hist-ignoredups 'erase))
-         (eshell-insert-command "history -r")
-         (should (equal (ring-elements eshell-history-ring)
-                        '("history -w" "echo hi" "echo bye"))))))))
+      (eshell-write-history histfile)
+      (em-hist-test/check-history-file histfile '("echo foo" "echo bar")))))
 
 (ert-deftest em-hist-test/add-to-history/allow-dups ()
   "Test adding to history, allowing dups."