diff options
Diffstat (limited to 'test/lisp/gnus')
-rw-r--r-- | test/lisp/gnus/gnus-test-headers.el | 178 | ||||
-rw-r--r-- | test/lisp/gnus/gnus-tests.el | 2 | ||||
-rw-r--r-- | test/lisp/gnus/message-tests.el | 56 |
3 files changed, 234 insertions, 2 deletions
diff --git a/test/lisp/gnus/gnus-test-headers.el b/test/lisp/gnus/gnus-test-headers.el new file mode 100644 index 00000000000..abf3d4f2713 --- /dev/null +++ b/test/lisp/gnus/gnus-test-headers.el @@ -0,0 +1,178 @@ +;;; gnus-test-headers.el --- Tests for Gnus header-related functions -*- lexical-binding: t; -*- + +;; Copyright (C) 2018-2019 Free Software Foundation, Inc. + +;; Author: Eric Abrahamsen <eric@ericabrahamsen.net> + +;; 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: + +;; The tests her are for + +;;; Code: + +(require 'ert) +(require 'gnus-sum) + +(defconst gnus-headers-test-data + '([2 "Re: [Emacs-devel] Emacs move" "Dave Love <d.love@dl.ac.uk>" + "Thu, 14 Sep 2000 11:10:46 +0100" + "<200009141010.LAA26351@djlvig.dl.ac.uk>" + "<20000913175943.A26093@sparky.nisa.net>" + 1882 16 "nnmaildir mails:2" + ((To . "Jeff Bailey <jbailey@nisa.net>") + (Cc . "emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [3 "Re: [Emacs-devel] Emacs move" "Sam Steingold <sds@gnu.org>" + "14 Sep 2000 10:21:56 -0400" "<upum7xddn.fsf@xchange.com>" + "<20000913175943.A26093@sparky.nisa.net>" + 2991 50 "nnmaildir mails:3" + ((To . "Jeff Bailey <jbailey@nisa.net>") + (Cc . "emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [4 "Re: [Emacs-devel] Emacs move" "Jeff Bailey <jbailey@nisa.net>" + "Thu, 14 Sep 2000 09:14:47 -0700" + "<20000914091447.G4827@sparky.nisa.net>" + "<20000913175943.A26093@sparky.nisa.net> <upum7xddn.fsf@xchange.com>" + 1780 15 "nnmaildir mails:4" + ((To . "sds@gnu.org, Jeff Bailey <jbailey@nisa.net>") + (Cc . "emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [5 "Re: [Emacs-devel] Emacs move" "Dave Love <d.love@dl.ac.uk>" + "Thu, 14 Sep 2000 18:24:36 +0100" + "<200009141724.SAA26807@djlvig.dl.ac.uk>" + "<20000913175943.A26093@sparky.nisa.net>" + 1343 9 "nnmaildir mails:5" + ((To . "Jeff Bailey <jbailey@nisa.net>") + (Cc . "emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [6 "Re: [Emacs-devel] Emacs move" "Karl Fogel <kfogel@galois.collab.net>" + "14 Sep 2000 10:37:35 -0500" "<87em2nyog0.fsf@galois.collab.net>" + "<20000913175943.A26093@sparky.nisa.net> <200009141724.SAA26807@djlvig.dl.ac.uk>" + 3740 124 "nnmaildir mails:6" + ((To . "Dave Love <d.love@dl.ac.uk>") + (Cc . "Jeff Bailey <jbailey@nisa.net>, emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [7 "Re: [Emacs-devel] Emacs move" "Jeff Bailey <jbailey@nisa.net>" + "Thu, 14 Sep 2000 10:55:12 -0700" + "<20000914105512.A29291@sparky.nisa.net>" + "<20000913175943.A26093@sparky.nisa.net> <200009141724.SAA26807@djlvig.dl.ac.uk> <87em2nyog0.fsf@galois.collab.net>" + 1687 16 "nnmaildir mails:7" + ((To . "kfogel@red-bean.com, Dave Love <d.love@dl.ac.uk>") + (Cc . "Jeff Bailey <jbailey@nisa.net>, emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [8 "Re: [Emacs-devel] Emacs move" "John Wiegley <johnw@gnu.org>" + "Thu, 14 Sep 2000 12:19:01 -0700" + "<200009141919.MAA05085@localhost.localdomain>" + "<20000913175943.A26093@sparky.nisa.net>" + 1978 27 "nnmaildir mails:8" + ((To . "emacs-devel@gnu.org"))] + [9 "Re: [Emacs-devel] Emacs move" + "\"Robert J. Chassell\" <bob@rattlesnake.com>" + "Thu, 14 Sep 2000 07:33:15 -0400 (EDT)" + "<m13ZXGV-000BCgC@megalith.rattlesnake.com>" + "<20000913175943.A26093@sparky.nisa.net>" + 3046 72 "nnmaildir mails:9" + ((To . "jbailey@nisa.net") + (Cc . "emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [10 "Re: [Emacs-devel] Emacs move" + "wmperry@aventail.com (William M. Perry)" + "14 Sep 2000 09:10:25 -0500" + "<86g0n3f4j2.fsf@megalith.bp.aventail.com>" + "<20000913175943.A26093@sparky.nisa.net> <m13ZXGV-000BCgC@megalith.rattlesnake.com>" + 3104 44 "nnmaildir mails:10" + ((To . "bob@rattlesnake.com") + (Cc . "jbailey@nisa.net, emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [11 "Re: [Emacs-devel] Emacs move" "Gerd Moellmann <gerd@gnu.org>" + "Thu, 14 Sep 2000 21:51:05 +0200 (CEST)" + "<200009141951.VAA06005@gerd.segv.de>" + "<20000913175943.A26093@sparky.nisa.net> <m13ZXGV-000BCgC@megalith.rattlesnake.com> <86g0n3f4j2.fsf@megalith.bp.aventail.com>" + 1884 6 "nnmaildir mails:11" + ((To . "wmvperry@aventail.com") + (Cc . "bob@rattlesnake.com, jbailey@nisa.net, emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [12 "Re: [Emacs-devel] Emacs move" "Gerd Moellmann <gerd@gnu.org>" + "Thu, 14 Sep 2000 21:49:03 +0200 (CEST)" + "<200009141949.VAA05998@gerd.segv.de>" + "<20000913175943.A26093@sparky.nisa.net> <m13ZXGV-000BCgC@megalith.rattlesnake.com>" + 2408 24 "nnmaildir mails:12" + ((To . "bob@rattlesnake.com") + (Cc . "jbailey@nisa.net, emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [13 "Re: [Emacs-devel] Emacs move" + "\"Robert J. Chassell\" <bob@rattlesnake.com>" + "Thu, 14 Sep 2000 17:50:01 -0400 (EDT)" + "<m13ZgtN-000BD3C@megalith.rattlesnake.com>" + "<20000913175943.A26093@sparky.nisa.net> <m13ZXGV-000BCgC@megalith.rattlesnake.com> <200009141949.VAA05998@gerd.segv.de>" + 1968 23 "nnmaildir mails:13" + ((To . "gerd@gnu.org") + (Cc . "bob@rattlesnake.com, jbailey@nisa.net, emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [14 "Re: [Emacs-devel] Emacs move" "Richard Stallman <rms@gnu.org>" + "Fri, 15 Sep 2000 16:28:12 -0600 (MDT)" + "<200009152228.QAA20526@wijiji.santafe.edu>" + "<20000913175943.A26093@sparky.nisa.net> <m13ZXGV-000BCgC@megalith.rattlesnake.com>" + 1288 2 "nnmaildir mails:14" + ((To . "jbailey@nisa.net, emacs-devel@gnu.org, cvs-hackers@gnu.org"))] + [15 "[Emacs-devel] Emacs move" "Jeff Bailey <jbailey@nisa.net>" + "Wed, 13 Sep 2000 17:59:43 -0700" + "<20000913175943.A26093@sparky.nisa.net>" "" + 1661 26 "nnmaildir mails:15" + ((To . "emacs-devel@gnu.org") + (Cc . "cvs-hackers@gnu.org"))] + [16 "Re: [Emacs-devel] Emacs move" "Jeff Bailey <jbailey@nisa.net>" + "Fri, 15 Sep 2000 22:00:12 -0700" + "<20000915220012.A3923@sparky.nisa.net>" + "<20000913175943.A26093@sparky.nisa.net> <m13ZXGV-000BCgC@megalith.rattlesnake.com> <200009141949.VAA05998@gerd.segv.de> <m13ZgtN-000BD3C@megalith.rattlesnake.com>" + 2857 51 "nnmaildir mails:16" + ((To . "bob@rattlesnake.com, gerd@gnu.org") + (Cc . "jbailey@nisa.net, emacs-devel@gnu.org, cvs-hackers@gnu.org"))]) + "A pile of headers with potential interdependencies.") + +(ert-deftest gnus-headers-make-dependency-table () + (let ((table (gnus-make-hashtable 20)) + (data (copy-sequence gnus-headers-test-data)) + ret) + (dolist (h data) + ;; `gnus-dependencies-add-header' returns nil if it fails to add + ;; the header. + (should (gnus-dependencies-add-header h table nil))) + ;; Pick a value to test. + (setq ret (gethash "<m13ZXGV-000BCgC@megalith.rattlesnake.com>" + table)) + ;; The message has three children. + (should (= 3 (length (cdr ret)))) + ;; The first of those children has one child. + (should (= 1 (length (cdr (nth 1 ret))))))) + +(ert-deftest gnus-headers-loop-dependencies () + "Intentionally create a reference loop." + (let ((table (gnus-make-hashtable 20)) + (data (copy-sequence gnus-headers-test-data)) + (parent-id "<200009141724.SAA26807@djlvig.dl.ac.uk>") + (child-id "<87em2nyog0.fsf@galois.collab.net>") + parent) + (dolist (h data) + (gnus-dependencies-add-header h table nil)) + + (setq parent (gethash parent-id table)) + + ;; Put the parent header in the child references of one of its own + ;; children. `gnus-thread-loop-p' only checks if there's a loop + ;; between parent and immediate child, not parent and random + ;; descendant. At least, near as I can tell that's the case. + + (push (list (car parent)) (cdr (gethash child-id table))) + + (let ((gnus-newsgroup-dependencies table)) + (should + (= 1 ; 1 indicates an infloop. + (gnus-thread-loop-p (car parent) (cadr parent))))))) + +(provide 'gnus-test-headers) +;;; gnus-test-headers.el ends here diff --git a/test/lisp/gnus/gnus-tests.el b/test/lisp/gnus/gnus-tests.el index 33e438300aa..4b7c91f130d 100644 --- a/test/lisp/gnus/gnus-tests.el +++ b/test/lisp/gnus/gnus-tests.el @@ -26,8 +26,6 @@ ;;; Code: ;; registry.el is required by gnus-registry.el but this way we're explicit. -(eval-when-compile (require 'cl)) - (require 'registry) (require 'gnus-registry) diff --git a/test/lisp/gnus/message-tests.el b/test/lisp/gnus/message-tests.el index c55ccbf34d0..aa3587dddf5 100644 --- a/test/lisp/gnus/message-tests.el +++ b/test/lisp/gnus/message-tests.el @@ -29,6 +29,8 @@ (require 'ert) (require 'ert-x) +(require 'cl-lib) + (ert-deftest message-mode-propertize () (with-temp-buffer (unwind-protect @@ -97,6 +99,60 @@ (should (string= stripped-was (message-strip-subject-trailing-was with-was))))))) +(ert-deftest message-all-recipients () + (ert-with-test-buffer (:name "message") + (insert "To: Person 1 <p1@p1.org>, Person 2 <p2@p2.org>\n") + (insert "Cc: Person 3 <p3@p3.org>, Person 4 <p4@p4.org>\n") + (insert "Bcc: Person 5 <p5@p5.org>, Person 6 <p6@p6.org>\n") + (should (equal (message-all-recipients) + '(("Person 1" "p1@p1.org") + ("Person 2" "p2@p2.org") + ("Person 3" "p3@p3.org") + ("Person 4" "p4@p4.org") + ("Person 5" "p5@p5.org") + ("Person 6" "p6@p6.org")))))) + +(ert-deftest message-all-epg-keys-available-p () + (skip-unless (epg-check-configuration (epg-find-configuration 'OpenPGP))) + (let ((person1 '("Person 1" "p1@p1.org")) + (person2 '("Person 2" "p2@p2.org")) + (person3 '("Person 3" "p3@p3.org")) + (recipients nil) + (keyring '("p1@p1.org" "p2@p2.org"))) + (cl-letf (((symbol-function 'epg-list-keys) + (lambda (_ email) (cl-find email keyring :test #'string=))) + ((symbol-function 'message-all-recipients) + (lambda () recipients))) + + (setq recipients (list)) + (should (message-all-epg-keys-available-p)) + + (setq recipients (list person1)) + (should (message-all-epg-keys-available-p)) + + (setq recipients (list person1 person2)) + (should (message-all-epg-keys-available-p)) + + (setq recipients (list person3)) + (should-not (message-all-epg-keys-available-p)) + + (setq recipients (list person1 person3)) + (should-not (message-all-epg-keys-available-p)) + + (setq recipients (list person3 person1)) + (should-not (message-all-epg-keys-available-p)) + + (setq recipients (list person1 person2 person3)) + (should-not (message-all-epg-keys-available-p))))) + +(ert-deftest message-alter-repeat-address () + (should (equal (message--alter-repeat-address + "Lars Ingebrigtsen <larsi@gnus.org>") + "Lars Ingebrigtsen <larsi@gnus.org>")) + + (should (equal (message--alter-repeat-address + "\"larsi@gnus.org\" <larsi@gnus.org>") + "larsi@gnus.org"))) (provide 'message-mode-tests) |