2019-07-04 20:32:39 -04:00
|
|
|
;;; log-edit-tests.el --- Unit tests for log-edit.el -*- lexical-binding: t; -*-
|
|
|
|
|
2024-01-02 09:47:10 +08:00
|
|
|
;; Copyright (C) 2019-2024 Free Software Foundation, Inc.
|
2019-07-04 20:32:39 -04:00
|
|
|
|
|
|
|
;; 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:
|
|
|
|
|
|
|
|
;; Unit tests for lisp/vc/log-edit.el.
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
|
(require 'log-edit)
|
|
|
|
(require 'ert)
|
|
|
|
|
|
|
|
(ert-deftest log-edit-fill-entry ()
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert "\
|
|
|
|
* dir/file.ext (fun1):
|
|
|
|
\(fun2):
|
|
|
|
\(fun3):
|
|
|
|
* file2.txt (fun4):
|
|
|
|
\(fun5):
|
|
|
|
\(fun6):
|
|
|
|
\(fun7): Some prose.
|
|
|
|
\(fun8): A longer description of a complicated change.\
|
2019-12-10 20:04:36 -08:00
|
|
|
Spread over a couple of sentences.\
|
2019-07-04 20:32:39 -04:00
|
|
|
Long enough to be filled for several lines.
|
|
|
|
\(fun9): Etc.")
|
|
|
|
(goto-char (point-min))
|
|
|
|
(let ((fill-column 72)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) "\
|
|
|
|
* dir/file.ext (fun1, fun2, fun3):
|
|
|
|
* file2.txt (fun4, fun5, fun6, fun7): Some prose.
|
|
|
|
\(fun8): A longer description of a complicated change. Spread over a
|
2019-12-10 20:04:36 -08:00
|
|
|
couple of sentences. Long enough to be filled for several lines.
|
2019-07-04 20:32:39 -04:00
|
|
|
\(fun9): Etc."))
|
|
|
|
(let ((fill-column 20)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) "\
|
|
|
|
* dir/file.ext (fun1)
|
|
|
|
\(fun2, fun3):
|
|
|
|
* file2.txt (fun4)
|
|
|
|
\(fun5, fun6, fun7):
|
|
|
|
Some prose.
|
|
|
|
\(fun8): A longer
|
|
|
|
description of a
|
|
|
|
complicated change.
|
|
|
|
Spread over a couple
|
2019-12-10 20:04:36 -08:00
|
|
|
of sentences. Long
|
|
|
|
enough to be filled
|
|
|
|
for several lines.
|
2019-07-04 20:32:39 -04:00
|
|
|
\(fun9): Etc."))
|
|
|
|
(let ((fill-column 40)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) "\
|
|
|
|
* dir/file.ext (fun1, fun2, fun3):
|
|
|
|
* file2.txt (fun4, fun5, fun6, fun7):
|
|
|
|
Some prose.
|
|
|
|
\(fun8): A longer description of a
|
|
|
|
complicated change. Spread over a
|
2019-12-10 20:04:36 -08:00
|
|
|
couple of sentences. Long enough to be
|
|
|
|
filled for several lines.
|
2019-07-04 20:32:39 -04:00
|
|
|
\(fun9): Etc."))))
|
|
|
|
|
2020-04-04 12:28:23 -04:00
|
|
|
(ert-deftest log-edit-fill-entry-indented-func-entries ()
|
|
|
|
;; Indenting function entries is a typical mistake caused by using a
|
|
|
|
;; misconfigured or non-ChangeLog specific fill function.
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert "\
|
|
|
|
* dir/file.ext (fun1):
|
|
|
|
(fun2):
|
|
|
|
(fun3):
|
|
|
|
* file2.txt (fun4):
|
|
|
|
(fun5):
|
|
|
|
(fun6):
|
|
|
|
(fun7): Some prose.
|
|
|
|
(fun8): A longer description of a complicated change.\
|
|
|
|
Spread over a couple of sentences.\
|
|
|
|
Long enough to be filled for several lines.
|
|
|
|
(fun9): Etc.")
|
|
|
|
(goto-char (point-min))
|
|
|
|
(let ((fill-column 72)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) "\
|
|
|
|
* dir/file.ext (fun1, fun2, fun3):
|
|
|
|
* file2.txt (fun4, fun5, fun6, fun7): Some prose.
|
|
|
|
\(fun8): A longer description of a complicated change. Spread over a
|
|
|
|
couple of sentences. Long enough to be filled for several lines.
|
|
|
|
\(fun9): Etc."))))
|
|
|
|
|
2019-07-04 20:32:39 -04:00
|
|
|
(ert-deftest log-edit-fill-entry-trailing-prose ()
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert "\
|
|
|
|
* dir/file.ext (fun1): A longer description of a complicated change.\
|
2019-12-10 20:04:36 -08:00
|
|
|
Spread over a couple of sentences.\
|
2019-07-04 20:32:39 -04:00
|
|
|
Long enough to be filled for several lines.")
|
|
|
|
(let ((fill-column 72)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) "\
|
|
|
|
* dir/file.ext (fun1): A longer description of a complicated change.
|
2019-12-10 20:04:36 -08:00
|
|
|
Spread over a couple of sentences. Long enough to be filled for several
|
|
|
|
lines."))))
|
2019-07-04 20:32:39 -04:00
|
|
|
|
|
|
|
(ert-deftest log-edit-fill-entry-joining ()
|
|
|
|
;; Join short enough function names on the same line.
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert "* dir/file.ext (fun1):\n(fun2):")
|
|
|
|
(let ((fill-column 72)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) "* dir/file.ext (fun1, fun2):")))
|
|
|
|
;; Don't combine them if they're too long.
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert "* dir/long-file-name.ext (a-really-long-function-name):
|
|
|
|
\(another-very-long-function-name):")
|
|
|
|
(let ((fill-column 72)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) "* dir/long-file-name.ext (a-really-long-function-name)
|
|
|
|
\(another-very-long-function-name):")))
|
|
|
|
;; Put function name on next line, if the file name is too long.
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert "\
|
|
|
|
* a-very-long-directory-name/another-long-directory-name/and-a-long-file-name.ext\
|
|
|
|
(a-really-long-function-name):")
|
|
|
|
(let ((fill-column 72)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) "\
|
|
|
|
* a-very-long-directory-name/another-long-directory-name/and-a-long-file-name.ext
|
|
|
|
\(a-really-long-function-name):"))))
|
|
|
|
|
2024-01-28 16:55:33 +08:00
|
|
|
(ert-deftest log-edit-fill-entry-confinement ()
|
|
|
|
(let (string string1 string2 string3 string4)
|
|
|
|
(setq string
|
|
|
|
;; This entry is precisely 65 columns in length;
|
|
|
|
;; log-edit-fill-column should leave it unmodified.
|
|
|
|
"* file2.txt (fun4, fun5, fun6, fun7, fun8, fun9, fun10, fun1134):"
|
|
|
|
string1
|
|
|
|
;; This entry is 66 columns in length, and must be filled.
|
|
|
|
"* file2.txt (fun4, fun5, fun6, fun7, fun8, fun9, fun10, fun11345):"
|
|
|
|
string2
|
|
|
|
;; The first line of this entry totals 65 columns in length,
|
|
|
|
;; and should be preserved intact.
|
|
|
|
"* file2.txt (fun4, fun5, fun6, fun7, fun8, fun9, fun10, fun11345)
|
|
|
|
(fun11356):"
|
|
|
|
string3
|
|
|
|
;; The first defun in this entry is a file name that brings
|
|
|
|
;; the total to 40 columns in length and should be preserved
|
|
|
|
;; intact.
|
|
|
|
"* file2.txt (abcdefghijklmnopqrstuvwxyz)
|
|
|
|
(ABC):"
|
|
|
|
string4
|
|
|
|
;; The first defun brings that total to 41, and should be
|
|
|
|
;; placed on the next line.
|
|
|
|
"* file2.txt (abcdefghijklmnopqrstuvwxyz):")
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert string)
|
|
|
|
(let ((fill-column 64)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) string))
|
|
|
|
(erase-buffer)
|
|
|
|
(insert string1)
|
|
|
|
(let ((fill-column 64)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string)
|
|
|
|
"* file2.txt (fun4, fun5, fun6, fun7, fun8, fun9, fun10)
|
|
|
|
(fun11345):"))
|
|
|
|
(erase-buffer)
|
|
|
|
(insert string2)
|
|
|
|
(let ((fill-column 64)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) string2))
|
|
|
|
(erase-buffer)
|
|
|
|
(insert string3)
|
|
|
|
(let ((fill-column 39)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string) string3))
|
|
|
|
(erase-buffer)
|
|
|
|
(insert string4)
|
|
|
|
(let ((fill-column 39)) (log-edit-fill-entry))
|
|
|
|
(should (equal (buffer-string)
|
|
|
|
;; There is whitespace after "file2.txt" which
|
|
|
|
;; should not be erased!
|
|
|
|
"* file2.txt
|
|
|
|
(abcdefghijklmnopqrstuvwxyz):")))))
|
|
|
|
|
2019-07-04 20:32:39 -04:00
|
|
|
;;; log-edit-tests.el ends here
|