summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Meyer <kyle@kyleam.com>2021-01-22 23:43:00 -0500
committerKyle Meyer <kyle@kyleam.com>2021-01-23 10:17:52 -0500
commitc4d9bdebc98f8ab38790bceba0f33f34a42d4ce0 (patch)
tree019c904998c1ead264b76e45dddc5572ada831f7
parent1934b6872e322ca3d7205b9a2f600832055e3e24 (diff)
downloadpiem-c4d9bdebc98f8ab38790bceba0f33f34a42d4ce0.tar.gz
Add a few basic tests
The more interesting things will involve more work and setup to test, but at least start testing some simple things. This project's Makefile was originally based off of Elfeed's, and the changes from this commit are adapted from there as well. Message-Id: <20210123044300.31326-1-kyle@kyleam.com>
-rw-r--r--Makefile10
-rw-r--r--tests/piem-tests.el104
2 files changed, 112 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 6ea8472..a139d1a 100644
--- a/Makefile
+++ b/Makefile
@@ -2,16 +2,21 @@
EMACS = emacs
# Rely on EMACSLOADPATH for everything but the current directory.
-BATCH = $(EMACS) --batch -Q -L .
+BATCH = $(EMACS) --batch -Q -L . -L tests
EL = piem.el piem-b4.el piem-elfeed.el piem-eww.el piem-gnus.el \
- piem-maildir.el piem-notmuch.el
+ piem-maildir.el piem-notmuch.el \
+ tests/piem-tests.el
ELC = $(EL:.el=.elc)
all: compile piem.info piem-autoloads.el
compile: $(ELC)
+check: test
+test: $(ELC)
+ $(BATCH) -l tests/piem-tests.elc -f ert-run-tests-batch
+
piem-autoloads.el: $(EL)
$(BATCH) -l package --eval \
'(package-generate-autoloads "piem" default-directory)'
@@ -31,6 +36,7 @@ piem-gnus.elc: piem-gnus.el piem.elc
piem-maildir.elc: piem-maildir.el
piem-notmuch.elc: piem-notmuch.el piem.elc
piem.elc: piem.el piem-maildir.elc
+tests/piem-tests.elc: tests/piem-tests.el piem.elc
.SUFFIXES: .el .elc .texi .info .html
diff --git a/tests/piem-tests.el b/tests/piem-tests.el
new file mode 100644
index 0000000..346f9e1
--- /dev/null
+++ b/tests/piem-tests.el
@@ -0,0 +1,104 @@
+;;; piem-tests.el --- tests for piem -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2021 Kyle Meyer
+
+;; Author: Kyle Meyer <kyle@kyleam.com>
+
+;; This program 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.
+
+;; This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'piem)
+
+(ert-deftest piem-message-link-re ()
+ (should-not (string-match-p
+ (piem-message-link-re "https://example.com/inbox")
+ "https://example.com/inbox"))
+ (should (string-match-p
+ (piem-message-link-re "https://example.com/inbox")
+ "https://example.com/inbox/msg@id/"))
+ (should-not (string-match-p
+ (piem-message-link-re "https://example.com/inbox" "msg@id1")
+ "https://example.com/inbox/msg@id/"))
+ (should (string-match-p
+ (piem-message-link-re "https://example.com/inbox/")
+ "https://example.com/inbox/msg@id/T/#t"))
+ (should (string-match-p
+ (piem-message-link-re "https://example.com/inbox/")
+ "https://example.com/inbox/msg@id/T/#r53974723fd9"))
+ (should (string-match-p
+ (piem-message-link-re "https://example.com/inbox/")
+ "https://example.com/inbox/msg@id/T/#r53974723fd9"))
+ (should (string-match-p
+ (piem-message-link-re "https://example.com/inbox/")
+ "https://example.com/inbox/msg@id/t/#ma0d6f35c094")))
+
+(ert-deftest piem-escape-mid ()
+ (should (equal (piem-escape-mid "msg@id") "msg@id"))
+ (should (equal (piem-escape-mid "m/g@id") "m%2Fg@id")))
+
+(ert-deftest piem-name-branch-who-what-v ()
+ (should (equal (piem-name-branch-who-what-v
+ (list :from "Foo Bar <f@example.com>"
+ :subject "[PATCH] Do a thing"))
+ "fb/do-thing"))
+ (should (equal (piem-name-branch-who-what-v
+ (list :from "Foo <f@example.com>"
+ :subject "[PATCH] Do a thing"))
+ "f/do-thing"))
+ (should (equal (piem-name-branch-who-what-v
+ (list :from "Foo Bar <f@example.com>"
+ :subject "[PATCH v3] Do a thing"))
+ "fb/do-thing__v3"))
+ (should-not (piem-name-branch-who-what-v
+ (list :from "Foo Bar <xyz.com>"))))
+
+(ert-deftest piem--insert-message-id-header ()
+ (should-not
+ (with-temp-buffer
+ (piem--insert-message-id-header "msg@id")))
+ (should
+ (string-match-p
+ (concat
+ (rx "Subject: [PATCH 1/2] a\nMessage-Id: <msg@id>\n"
+ (one-or-more anychar)
+ "Subject: [PATCH 2/2] b\nMessage-Id: <msg@id>\n"))
+ (with-temp-buffer
+ (insert "\
+From 0d732713af1f3fb48b37430e2cd0a3033cea14f3 Mon Sep 17 00:00:00 2001
+From: Foo Bar <f@example.com>
+Date: Fri, 22 Jan 2021 22:35:58 -0500
+Subject: [PATCH 1/2] a
+
+---
+ a | 1 +
+ 1 file changed, 1 insertion(+)
+ create mode 100644 a
+
+From 7b2433ead6d8d10bff3325cb3719a316ddb52392 Mon Sep 17 00:00:00 2001
+From: Foo Bar <f@example.com>
+Date: Fri, 22 Jan 2021 22:36:09 -0500
+Subject: [PATCH 2/2] b
+
+---
+ b | 1 +
+ 1 file changed, 1 insertion(+)
+ create mode 100644 b")
+ (goto-char (point-min))
+ (piem--insert-message-id-header "msg@id")
+ (buffer-string)))))
+
+(provide 'piem-tests)
+;;; piem-tests.el ends here