diff options
Diffstat (limited to 'test/lisp/vc/vc-git-tests.el')
-rw-r--r-- | test/lisp/vc/vc-git-tests.el | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/lisp/vc/vc-git-tests.el b/test/lisp/vc/vc-git-tests.el index 3e6536add39..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 () @@ -64,4 +66,66 @@ (actual-output (vc-git--program-version))) (should (equal actual-output expected-output)))) +(ert-deftest vc-git-test-annotate-time () + "Test `vc-git-annotate-time'." + (require 'vc-annotate) + (with-temp-buffer + (insert "\ +00000000 (Foo Bar 2023-06-14 1) a +00000001 (Foo Bar 2023-06-14 00:00:00 -0130 2) b +00000002 (Foo Bar 2023-06-14 00:00:00 +0145 3) c +00000003 (Foo Bar 2023-06-14 00:00:00 4) d +00000004 (Foo Bar 0-0-0 5) \n") + (goto-char (point-min)) + (should (floatp (vc-git-annotate-time))) + (should (> (vc-git-annotate-time) + (vc-git-annotate-time))) + (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 |