branch: externals/diff-hl commit ba6cf44960df79cca2524acf2a92fd6d35fec831 Author: Nathan Moreau <nathan.mor...@m4x.org> Commit: Nathan Moreau <nathan.mor...@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.mor...@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