summaryrefslogtreecommitdiff
path: root/test/lisp/vc
diff options
context:
space:
mode:
Diffstat (limited to 'test/lisp/vc')
-rw-r--r--test/lisp/vc/log-edit-tests.el210
-rw-r--r--test/lisp/vc/vc-git-tests.el47
2 files changed, 257 insertions, 0 deletions
diff --git a/test/lisp/vc/log-edit-tests.el b/test/lisp/vc/log-edit-tests.el
index 1a2af716f34..8373156587d 100644
--- a/test/lisp/vc/log-edit-tests.el
+++ b/test/lisp/vc/log-edit-tests.el
@@ -134,4 +134,214 @@ lines."))))
* a-very-long-directory-name/another-long-directory-name/and-a-long-file-name.ext
\(a-really-long-function-name):"))))
+(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):")))))
+
+(ert-deftest log-edit-fill-entry-space-substitution ()
+ ;; This test verifies that filling the paragraph surrounding the
+ ;; last line of defuns does not break between defun lists with
+ ;; spaces in identifiers.
+ (let (string wanted)
+ (setq string "
+* src/sfnt.c (xmalloc, xrealloc): Improve behavior upon allocation
+failures during test.
+(sfnt_table_names): Add prep.
+(sfnt_transform_coordinates): Allow applying offsets during
+coordinate transform.
+(sfnt_decompose_compound_glyph): Defer offset computation until
+any component compound glyph is loaded, then apply it during the
+transform process.
+(sfnt_multiply_divide): Make available everywhere. Implement on
+64 bit systems.
+(sfnt_multiply_divide_signed): New function.
+(sfnt_mul_fixed): Fix division overflow.
+(sfnt_curve_to_and_build_1, sfnt_build_glyph_outline): Remove
+outdated comment.
+(sfnt_build_outline_edges): Fix coding style.
+(sfnt_lookup_glyph_metrics): Allow looking up metrics without
+scaling.
+(struct sfnt_cvt_table): Fix type of cvt values.
+(struct sfnt_prep_table): New structure.
+(sfnt_read_cvt_table): Read cvt values in terms of fwords, not
+longs (as Apple's doc seems to say).
+(sfnt_read_fpgm_table): Fix memory allocation for font program
+table.
+(sfnt_read_prep_table): New function.
+(struct sfnt_interpreter_zone): New structure.
+(struct sfnt_interpreter_graphics_state): New fields `project',
+`move', `vector_dot_product'. Rename to `sfnt_graphics_state'.
+(struct sfnt_interpreter, sfnt_mul_f26dot6): Stop doing rounding
+division.
+(sfnt_init_graphics_state, sfnt_make_interpreter, MOVE, SSW, RAW)
+(SDS, ADD, SUB, ABS, NEG, WCVTF, _MIN, S45ROUND, SVTCAx)
+(sfnt_set_srounding_state, sfnt_skip_code)
+(sfnt_interpret_unimplemented, sfnt_interpret_fdef)
+(sfnt_interpret_idef, sfnt_interpret_if, sfnt_interpret_else)
+(sfnt_round_none, sfnt_round_to_grid, sfnt_round_to_double_grid)
+"
+ wanted "
+* src/sfnt.c
+(xmalloc, xrealloc):
+Improve behavior
+upon allocation
+failures during
+test.
+(sfnt_table_names):
+Add prep.
+(sfnt_transform_coordinates):
+Allow applying
+offsets during
+coordinate
+transform.
+(sfnt_decompose_compound_glyph):
+Defer offset
+computation until
+any component
+compound glyph is
+loaded, then apply
+it during the
+transform process.
+(sfnt_multiply_divide):
+Make available
+everywhere.
+Implement on 64 bit
+systems.
+(sfnt_multiply_divide_signed):
+New function.
+(sfnt_mul_fixed):
+Fix division
+overflow.
+(sfnt_curve_to_and_build_1)
+(sfnt_build_glyph_outline):
+Remove outdated
+comment.
+(sfnt_build_outline_edges):
+Fix coding style.
+(sfnt_lookup_glyph_metrics):
+Allow looking up
+metrics without
+scaling.
+(struct sfnt_cvt_table):
+Fix type of cvt
+values.
+(struct sfnt_prep_table):
+New structure.
+(sfnt_read_cvt_table):
+Read cvt values in
+terms of fwords, not
+longs (as Apple's
+doc seems to say).
+(sfnt_read_fpgm_table):
+Fix memory
+allocation for font
+program table.
+(sfnt_read_prep_table):
+New function.
+(struct sfnt_interpreter_zone):
+New structure.
+(struct sfnt_interpreter_graphics_state):
+New fields
+`project', `move',
+`vector_dot_product'.
+Rename to
+`sfnt_graphics_state'.
+(struct sfnt_interpreter)
+(sfnt_mul_f26dot6):
+Stop doing rounding
+division.
+(sfnt_init_graphics_state)
+(sfnt_make_interpreter)
+(MOVE, SSW, RAW, SDS)
+(ADD, SUB, ABS, NEG)
+(WCVTF, _MIN)
+(S45ROUND, SVTCAx)
+(sfnt_set_srounding_state)
+(sfnt_skip_code)
+(sfnt_interpret_unimplemented)
+(sfnt_interpret_fdef)
+(sfnt_interpret_idef)
+(sfnt_interpret_if)
+(sfnt_interpret_else)
+(sfnt_round_none)
+(sfnt_round_to_grid)
+(sfnt_round_to_double_grid):
+")
+ (with-temp-buffer
+ (insert string)
+ (let ((fill-column 20)) (log-edit-fill-entry))
+ (should (equal (buffer-string) wanted)))))
+
+(ert-deftest log-edit-fill-entry-initial-wrapping ()
+ ;; This test verifies that a newline is inserted before a defun
+ ;; itself longer than the fill column when such a defun is being
+ ;; inserted after a file name, and not otherwise.
+ (let (string wanted)
+ (setq string "
+* src/sfnt.c (long_entry_1): This entry should be placed on a
+new line.
+(but_this_entry_should_not): With the prose displaced to the
+next line instead."
+ wanted "
+* src/sfnt.c
+(long_entry_1): This
+entry should be
+placed on a new
+line.
+(but_this_entry_should_not):
+With the prose
+displaced to the
+next line instead.")
+ (with-temp-buffer
+ (insert string)
+ (let ((fill-column 20)) (log-edit-fill-entry))
+ (should (equal (buffer-string) wanted)))))
+
;;; log-edit-tests.el ends here
diff --git a/test/lisp/vc/vc-git-tests.el b/test/lisp/vc/vc-git-tests.el
index c52cd9c5875..f15a0f52e8c 100644
--- a/test/lisp/vc/vc-git-tests.el
+++ b/test/lisp/vc/vc-git-tests.el
@@ -24,6 +24,8 @@
;;; Code:
+(require 'ert-x)
+(require 'vc)
(require 'vc-git)
(ert-deftest vc-git-test-program-version-general ()
@@ -81,4 +83,49 @@
(should-not (vc-git-annotate-time))
(should-not (vc-git-annotate-time))))
+(defmacro vc-git-test--with-repo (name &rest body)
+ "Initialize a repository in a temporary directory and evaluate BODY.
+
+The current directory will be set to the top of that repository; NAME
+will be bound to that directory's file name. Once BODY exits, the
+directory will be deleted.
+
+Some dummy environment variables will be set for the duration of BODY to
+allow `git commit' to determine identities for authors and committers."
+ (declare (indent 1))
+ `(ert-with-temp-directory ,name
+ (let ((default-directory ,name)
+ (process-environment (append '("EMAIL=john@doe.ee"
+ "GIT_AUTHOR_NAME=A"
+ "GIT_COMMITTER_NAME=C")
+ process-environment)))
+ (vc-create-repo 'Git)
+ ,@body)))
+
+(defun vc-git-test--run (&rest args)
+ "Run git ARGSā€¦, check for non-zero status, and return output."
+ (with-temp-buffer
+ (apply 'vc-git-command t 0 nil args)
+ (buffer-string)))
+
+(ert-deftest vc-git-test-dir-track-local-branch ()
+ "Test that `vc-dir' works when tracking local branches. Bug#68183."
+ (skip-unless (executable-find vc-git-program))
+ (vc-git-test--with-repo repo
+ ;; Create an initial commit to get a branch started.
+ (write-region "hello" nil "README")
+ (vc-git-test--run "add" "README")
+ (vc-git-test--run "commit" "-mFirst")
+ ;; Get current branch name lazily, to remain agnostic of
+ ;; init.defaultbranch.
+ (let ((upstream-branch
+ (string-trim (vc-git-test--run "branch" "--show-current"))))
+ (vc-git-test--run "checkout" "--track" "-b" "hack" upstream-branch)
+ (vc-dir default-directory)
+ (pcase-dolist (`(,header ,value)
+ `(("Branch" "hack")
+ ("Tracking" ,upstream-branch)))
+ (goto-char (point-min))
+ (re-search-forward (format "^%s *: %s$" header value))))))
+
;;; vc-git-tests.el ends here