summaryrefslogtreecommitdiff
path: root/tests/test-fs-get-file-info.el
blob: 9e7e337c5b555b438477b722d433f74c48f09467 (plain)
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
;;; test-tool-library-fs-get-file-info.el --- ERT tests for cj/fs-get-file-info -*- lexical-binding: t; -*-

;; Author: gptel-tool-writer and cjennings
;; Keywords: tests, filesystem, tools

;;; Commentary:
;; ERT tests for the cj/fs-get-file-info function from tool-filesystem-library.el.
;; Place this file in ~/.emacs.d/tests/ and load it to run tests.

;;; Code:

(require 'ert)
(require 'f)
(require 'tool-filesystem-library)

(defvar cj/fs-test--temp-dir nil "Temporary test directory for fs-get-file-info tests.")

(defun cj/fs-test--setup ()
  "Setup temporary directory for fs-get-file-info tests."
  (setq cj/fs-test--temp-dir (make-temp-file "fs-lib-test" t))
  ;; Create test files and directories
  (make-directory (f-join cj/fs-test--temp-dir "subdir") t)
  (with-temp-buffer (insert "Test content") (write-file (f-join cj/fs-test--temp-dir "test-file.txt")))
  (make-directory (f-join cj/fs-test--temp-dir "subdir") t)
  (with-temp-buffer (insert "Nested test") (write-file (f-join cj/fs-test--temp-dir "subdir/nested-file.txt"))))

(defun cj/fs-test--teardown ()
  "Clean up temporary directory for fs-get-file-info tests."
  (when (and cj/fs-test--temp-dir (file-directory-p cj/fs-test--temp-dir))
	(delete-directory cj/fs-test--temp-dir t))
  (setq cj/fs-test--temp-dir nil))

(ert-deftest test-cj/fs-get-file-info-normal-regular-file ()
  "Normal: info for regular file."
  (cj/fs-test--setup)
  (unwind-protect
	  (let ((info (cj/fs-get-file-info (f-join cj/fs-test--temp-dir "test-file.txt"))))
		(should (plist-get info :success))
		(should (string-suffix-p "test-file.txt" (plist-get info :path)))
		(should (not (plist-get info :directory))))
	(cj/fs-test--teardown)))

(ert-deftest test-cj/fs-get-file-info-normal-directory ()
  "Normal: info for directory."
  (cj/fs-test--setup)
  (unwind-protect
	  (let ((info (cj/fs-get-file-info (f-join cj/fs-test--temp-dir "subdir"))))
		(should (plist-get info :success))
		(should (string-suffix-p "subdir" (plist-get info :path)))
		(should (plist-get info :directory)))
	(cj/fs-test--teardown)))

(ert-deftest test-cj/fs-get-file-info-error-nonexistent ()
  "Error: non-existent file returns :success nil plist."
  (let ((info (cj/fs-get-file-info "/tmp/nonexistent-file-1234567890")))
	(should (not (plist-get info :success)))
	(should (stringp (plist-get info :error)))))

(ert-deftest test-cj/fs-get-file-info-error-permission-denied ()
  "Error: permission denied file returns :success nil plist."
  (cj/fs-test--setup)
  (let ((file (f-join cj/fs-test--temp-dir "protected-file")))
	(unwind-protect
		(progn
		  (with-temp-buffer (insert "secret") (write-file file))
		  (set-file-modes file #o000)
		  (let ((info (cj/fs-get-file-info file)))
			(should (not (plist-get info :success)))
			(should (stringp (plist-get info :error)))))
	  (set-file-modes file #o644)
	  (delete-file file)
	  (cj/fs-test--teardown))))

(provide 'test-tool-library-fs-get-file-info)
;;; test-tool-library-fs-get-file-info.el ends here