aboutsummaryrefslogtreecommitdiffstats
path: root/test/lisp/vc/emerge-tests.el
blob: e9c92dfaa799c771baf291223bd310df5d8e072a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
;;; emerge-tests.el --- Tests of shadowfile  -*- lexical-binding:t -*-

(require 'tramp)
(require 'ert-x)
(require 'emerge)

(setq auth-source-save-behavior nil
      password-cache-expiry nil
      ;; When the remote user id is 0, Tramp refuses unsafe temporary files.
      tramp-allow-unsafe-temporary-files
      (or tramp-allow-unsafe-temporary-files noninteractive)
      tramp-cache-read-persistent-data t ;; For auth-sources.
      tramp-persistency-file-name nil
      tramp-verbose 0
      ;; On macOS, `temporary-file-directory' is a symlinked directory.
      temporary-file-directory (file-truename temporary-file-directory)
      ert-remote-temporary-file-directory
      (ignore-errors (file-truename ert-remote-temporary-file-directory)))

(ert-deftest emerge-test-files ()
  "Check emerge for two files."
  (skip-when (memq system-type '(windows-nt ms-dos)))
  (skip-unless (file-remote-p ert-remote-temporary-file-directory))

  ;; Remote file.
  (ert-with-temp-file
      file1 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo"
  ;; Local file.
  (ert-with-temp-file
      file2 :prefix (expand-file-name "emerge-tests" temporary-file-directory) :text "foo"
  ;; Output.
  (ert-with-temp-file
      file3 :prefix (expand-file-name "emerge-tests" temporary-file-directory)

      ;; Run emerge.
      (should (emerge-files nil file1 file2 file3))
      (cl-letf (((symbol-function #'y-or-n-p) #'always))
        (emerge-quit nil))

      ;; Check result.
      (with-temp-buffer
        (insert-file-contents file3)
        (should (string-equal "foo" (buffer-string))))))))

(ert-deftest emerge-test-files-with-ancestor ()
  "Check emerge for three files."
  (skip-when (memq system-type '(windows-nt ms-dos)))
  (skip-unless (file-remote-p ert-remote-temporary-file-directory))

  ;; Remote file.
  (ert-with-temp-file
      file1 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo"
  ;; Local file.
  (ert-with-temp-file
      file2 :prefix (expand-file-name "emerge-tests" temporary-file-directory) :text "foo"
  ;; Remote file.
  (ert-with-temp-file
      file3 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo"
  ;; Output.
  (ert-with-temp-file
      file4 :prefix (expand-file-name "emerge-tests" temporary-file-directory)

      ;; Run emerge.
      (should (emerge-files-with-ancestor nil file1 file2 file3 file4))
      (cl-letf (((symbol-function #'y-or-n-p) #'always))
        (emerge-quit nil))

      ;; Check result.
      (with-temp-buffer
        (insert-file-contents file4)
        (should (string-equal "foo" (buffer-string)))))))))

(defun emerge-test-all (&optional interactive)
  "Run all tests for `emerge-*'."
  (interactive "p")
  (if interactive
      (ert-run-tests-interactively "^emerge-")
    (ert-run-tests-batch "^emerge-")))

(provide 'emerge-tests)
;;; emerge-tests.el ends here