emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 77d823794e: Add some more mailcap tests.


From: Tassilo Horn
Subject: master 77d823794e: Add some more mailcap tests.
Date: Sat, 15 Jan 2022 18:25:46 -0500 (EST)

branch: master
commit 77d823794eacd73469d32fe780b7dd4eae213b34
Author: Tassilo Horn <tsdh@gnu.org>
Commit: Tassilo Horn <tsdh@gnu.org>

    Add some more mailcap tests.
    
    * test/lisp/net/mailcap-resources/mailcap: New file.
    * test/lisp/net/mailcap-resources/test.test: New file.
    * test/lisp/net/mailcap-tests.el (with-pristine-mailcap): New macro.
    (mailcap-parsing-and-mailcap-mime-info): New test for parsing mailcap
    files and selecting the right viewer.
    (mailcap--test-result): New variable.
    (mailcap--test-viewer): New function.
    (mailcap-view-file): New test for mailcap-view-file.
---
 test/lisp/net/mailcap-resources/mailcap   |  9 ++++
 test/lisp/net/mailcap-resources/test.test |  1 +
 test/lisp/net/mailcap-tests.el            | 70 +++++++++++++++++++++++++++++++
 3 files changed, 80 insertions(+)

diff --git a/test/lisp/net/mailcap-resources/mailcap 
b/test/lisp/net/mailcap-resources/mailcap
new file mode 100644
index 0000000000..ad3f7404fd
--- /dev/null
+++ b/test/lisp/net/mailcap-resources/mailcap
@@ -0,0 +1,9 @@
+audio/ogg; mpv %s
+audio/flac; mpv %s
+audio/x-wav; aplay %s
+text/*; emacsclient -t %s
+application/pdf; acroread %s; test=false
+application/pdf; evince %s
+application/pdf; okular %s
+image/*; eog %s
+image/svg+xml; inkscape %s
diff --git a/test/lisp/net/mailcap-resources/test.test 
b/test/lisp/net/mailcap-resources/test.test
new file mode 100644
index 0000000000..9daeafb986
--- /dev/null
+++ b/test/lisp/net/mailcap-resources/test.test
@@ -0,0 +1 @@
+test
diff --git a/test/lisp/net/mailcap-tests.el b/test/lisp/net/mailcap-tests.el
index 362cb22bb2..b439c08c79 100644
--- a/test/lisp/net/mailcap-tests.el
+++ b/test/lisp/net/mailcap-tests.el
@@ -63,4 +63,74 @@
                  (append mailcap-tests-path-extensions
                          mailcap-tests-mime-extensions))))
 
+(defmacro with-pristine-mailcap (&rest body)
+  ;; We only want the mailcap info we define ourselves.
+  `(let (mailcap--computed-mime-data
+         mailcap-mime-data
+         mailcap-user-mime-data)
+     ;; `mailcap-mime-info' calls `mailcap-parse-mailcaps' which parses
+     ;; the system's mailcaps.  We don't want that for our test.
+     (cl-letf (((symbol-function 'mailcap-parse-mailcaps) #'ignore))
+       ,@body)))
+
+(ert-deftest mailcap-parsing-and-mailcap-mime-info ()
+  (with-pristine-mailcap
+   ;; One mailcap entry has a test=false field.  The shell command
+   ;; execution errors when running the tests from the Makefile
+   ;; because then HOME=/nonexistent.
+   (ert-with-temp-directory home
+     (setenv "HOME" home)
+     ;; Now parse our resource mailcap file.
+     (mailcap-parse-mailcap (ert-resource-file "mailcap"))
+
+     ;; Assert that we get what we have defined.
+     (dolist (type '("audio/ogg" "audio/flac"))
+       (should (string= "mpv %s" (mailcap-mime-info type))))
+     (should (string= "aplay %s" (mailcap-mime-info "audio/x-wav")))
+     (should (string= "emacsclient -t %s"
+                      (mailcap-mime-info "text/plain")))
+     ;; evince is chosen because acroread has test=false and okular
+     ;; comes later.
+     (should (string= "evince %s"
+                      (mailcap-mime-info "application/pdf")))
+     (should (string= "inkscape %s"
+                      (mailcap-mime-info "image/svg+xml")))
+     (should (string= "eog %s"
+                      (mailcap-mime-info "image/jpg")))
+     ;; With REQUEST being a number, all fields of the selected entry
+     ;; should be returned.
+     (should (equal '((viewer . "evince %s")
+                      (type . "application/pdf"))
+                    (mailcap-mime-info "application/pdf" 1)))
+     ;; With 'all, all applicable entries should be returned.
+     (should (equal '(((viewer . "evince %s")
+                       (type . "application/pdf"))
+                      ((viewer . "okular %s")
+                       (type . "application/pdf")))
+                    (mailcap-mime-info "application/pdf" 'all)))
+     (let* ((c nil)
+            (toggle (lambda (_) (setq c (not c)))))
+       (mailcap-add "audio/ogg" "toggle %s" toggle)
+       (should (string= "toggle %s" (mailcap-mime-info "audio/ogg")))
+       ;; The test results are cached, so in order to have the test
+       ;; re-evaluated, one needs to clear the cache.
+       (setq mailcap-viewer-test-cache nil)
+       (should (string= "mpv %s" (mailcap-mime-info "audio/ogg")))
+       (setq mailcap-viewer-test-cache nil)
+       (should (string= "toggle %s" (mailcap-mime-info "audio/ogg")))))))
+
+(defvar mailcap--test-result nil)
+(defun mailcap--test-viewer ()
+  (setq mailcap--test-result (string= (buffer-string) "test\n")))
+
+(ert-deftest mailcap-view-file ()
+  (with-pristine-mailcap
+   ;; Try using a lambda as viewer and check wether
+   ;; `mailcap-view-file' works correctly.
+   (let* ((mailcap-mime-extensions '((".test" . "test/test"))))
+     (mailcap-add "test/test" 'mailcap--test-viewer)
+     (save-window-excursion
+       (mailcap-view-file (ert-resource-file "test.test")))
+     (should mailcap--test-result))))
+
 ;;; mailcap-tests.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]