emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/diff-hl ba6cf44 12/25: Add tests.


From: Dmitry Gutov
Subject: [elpa] externals/diff-hl ba6cf44 12/25: Add tests.
Date: Sun, 20 Dec 2020 05:07:01 -0500 (EST)

branch: externals/diff-hl
commit ba6cf44960df79cca2524acf2a92fd6d35fec831
Author: Nathan Moreau <nathan.moreau@m4x.org>
Commit: Nathan Moreau <nathan.moreau@m4x.org>

    Add tests.
---
 .gitignore           |   1 +
 Makefile             |  23 +++++++++
 test/diff-hl-test.el | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++
 test/empty           |  10 ++++
 4 files changed, 162 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c531d98
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.elc
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fb3ec5e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,23 @@
+EMACS ?= emacs
+SOURCES=
+SOURCES+=diff-hl-amend.el
+SOURCES+=diff-hl-dired.el
+SOURCES+=diff-hl-flydiff.el
+SOURCES+=diff-hl-margin.el
+
+ARTIFACTS=$(patsubst %.el, %.elc, $(SOURCES))
+
+RM ?= rm -f
+
+all: test
+
+test:
+       $(EMACS) -batch -L . -l test/diff-hl-test.el -f diff-hl-run-tests
+
+compile:
+       $(EMACS) -batch -f batch-byte-compile $(SOURCES)
+
+clean:
+       $(RM) $(ARTIFACTS)
+
+.PHONY: all test compile plain clean
diff --git a/test/diff-hl-test.el b/test/diff-hl-test.el
new file mode 100644
index 0000000..b94c316
--- /dev/null
+++ b/test/diff-hl-test.el
@@ -0,0 +1,128 @@
+;;; diff-hl-test.el --- tests for diff-hl -*- lexical-binding: t -*-
+
+;; Copyright (C) 2020  Free Software Foundation, Inc.
+
+;; Author:   Nathan Moreau <nathan.moreau@m4x.org>
+
+;; 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 <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'diff-hl)
+(require 'subr-x) ;; string-trim
+(require 'ert)
+
+(defvar diff-hl-test-source-file
+  (expand-file-name (concat (file-name-directory (locate-library "diff-hl"))
+                            "test/empty")))
+
+(defvar diff-hl-test-initial-content nil)
+
+(defmacro diff-hl-test-in-source (&rest body)
+  `(save-window-excursion
+     (find-file diff-hl-test-source-file)
+     ,@body))
+(put 'diff-hl-test-in-source 'lisp-indent-function 0)
+
+(defun diff-hl-test-init ()
+  (diff-hl-test-in-source
+    (setq diff-hl-test-initial-content (buffer-string)))
+  t)
+
+(defun diff-hl-test-teardown ()
+  (diff-hl-test-in-source
+    (erase-buffer)
+    (insert diff-hl-test-initial-content)
+    (save-buffer)))
+
+(defun diff-hl-test-compute-diff-lines ()
+  (diff-hl-test-in-source
+    (save-buffer)
+    (let ((vc-diff-switches "-w"))
+      (diff-hl-diff-goto-hunk))
+    (switch-to-buffer "*vc-diff*")
+    (let ((lines nil)
+          (previous-line (point-min)))
+      (goto-char (point-min))
+      (while (< (point) (point-max))
+        (forward-line 1)
+        (push (string-trim (buffer-substring-no-properties previous-line 
(point))) lines)
+        (setq previous-line (point)))
+      (delq nil (nreverse lines)))))
+
+(defmacro diff-hl-deftest (name &rest body)
+  `(ert-deftest ,name ()
+     (diff-hl-test-init)
+     (unwind-protect
+         (progn ,@body)
+       (diff-hl-test-teardown))))
+(put 'diff-hl-deftest 'lisp-indent-function 'defun)
+
+(diff-hl-deftest diff-hl-insert ()
+  (diff-hl-test-in-source
+    (goto-char (point-max))
+    (insert "added\n")
+    (should (equal "+added"
+                   (car (last (diff-hl-test-compute-diff-lines)))))))
+
+(diff-hl-deftest diff-hl-remove ()
+  (diff-hl-test-in-source
+    (delete-region (point-min) (point-max))
+    (should (equal "-last line"
+                   (car (last (diff-hl-test-compute-diff-lines)))))))
+
+(diff-hl-deftest diff-hl-indirect-buffer-insert ()
+  (diff-hl-test-in-source
+    (narrow-to-region (point-min) (point-max))
+    (goto-char (point-max))
+    (insert "added\n")
+    (should (equal "+added"
+                   (car (last (diff-hl-test-compute-diff-lines)))))))
+
+(diff-hl-deftest diff-hl-indirect-buffer-remove ()
+  (diff-hl-test-in-source
+    (narrow-to-region (point-min) (point-max))
+    (goto-char (point-min))
+    (delete-region (point) (point-max))
+    (should (equal "-last line"
+                   (car (last (diff-hl-test-compute-diff-lines)))))))
+
+(diff-hl-deftest diff-hl-indirect-buffer-move ()
+  (diff-hl-test-in-source
+    (narrow-to-region (point-min) (point-max))
+    (goto-char (point-min))
+    (kill-whole-line 3)
+    (goto-char (point-max))
+    (insert "added\n")
+    (save-buffer)
+    (diff-hl-mode 1)
+    (diff-hl-previous-hunk)
+    (should (looking-at "added"))
+    (diff-hl-previous-hunk)
+    (should (looking-at "function2"))
+    (should-error (diff-hl-previous-hunk) :type 'user-error)
+    (diff-hl-next-hunk)
+    (should (looking-at "added"))
+    (should-error (diff-hl-next-hunk) :type 'user-error)))
+
+(defun diff-hl-run-tests ()
+  (ert-run-tests-batch))
+
+(provide 'diff-hl-test)
+
+;;; diff-hl-test.el ends here
diff --git a/test/empty b/test/empty
new file mode 100644
index 0000000..8fa2495
--- /dev/null
+++ b/test/empty
@@ -0,0 +1,10 @@
+function1 () {
+}
+
+function2 () {
+}
+
+function3 () {
+}
+
+last line



reply via email to

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