blob: 25dd143977fd176ccbdf2eab58fbdd6e66e7ae60 (
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
|
;;; test-tool-library-fs-list-directory-recursive.el --- ERT tests for cj/fs-list-directory-recursive -*- lexical-binding: t; -*-
;; Author: gptel-tool-writer and cjennings
;; Keywords: tests, filesystem, tools
;;; Commentary:
;; ERT tests for the cj/fs-list-directory-recursive 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 temp directory for fs-list-directory-recursive tests.")
(defun cj/fs-test--setup ()
"Set up temp directory for fs-list-directory-recursive tests."
(setq cj/fs-test--temp-dir (make-temp-file "fs-lib-test" t))
;; Create test directory structure
(make-directory (f-join cj/fs-test--temp-dir "subdir") t)
(make-directory (f-join cj/fs-test--temp-dir "subdir2") t)
(with-temp-buffer (insert "Test file 1") (write-file (f-join cj/fs-test--temp-dir "file1.org")))
(with-temp-buffer (insert "Test file 2") (write-file (f-join cj/fs-test--temp-dir "subdir" "file2.txt")))
(with-temp-buffer (insert "Test file 3") (write-file (f-join cj/fs-test--temp-dir "subdir2" "file3.org")))
(make-directory (f-join cj/fs-test--temp-dir ".hiddendir") t)
(with-temp-buffer (insert "Secret") (write-file (f-join cj/fs-test--temp-dir ".hiddendir" "secret.txt"))))
(defun cj/fs-test--teardown ()
"Clean up temp directory for fs-list-directory-recursive 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-list-directory-recursive-normal-recursive-filter ()
"Normal: recursive listing with filter."
(cj/fs-test--setup)
(unwind-protect
(let* ((filter-fn (lambda (fi) (string-suffix-p ".org" (f-filename (plist-get fi :path)))))
(files (cj/fs-list-directory-recursive cj/fs-test--temp-dir filter-fn)))
(should (cl-some (lambda (fi) (string= (f-filename (plist-get fi :path)) "file1.org")) files))
(should (cl-some (lambda (fi) (string= (f-filename (plist-get fi :path)) "file3.org")) files))
(should-not (cl-some (lambda (fi) (string= (f-filename (plist-get fi :path)) "file2.txt")) files)))
(cj/fs-test--teardown)))
(ert-deftest test-cj/fs-list-directory-recursive-normal-max-depth ()
"Normal: recursive listing with max depth limit."
(cj/fs-test--setup)
(unwind-protect
(let* ((filter-fn (lambda (_) t))
(files (cj/fs-list-directory-recursive cj/fs-test--temp-dir filter-fn 1)))
(should (cl-some (lambda (fi) (string= (f-filename (plist-get fi :path)) "file1.org")) files))
(should-not (cl-some (lambda (fi) (string= (f-filename (plist-get fi :path)) "file3.org")) files)))
(cj/fs-test--teardown)))
(ert-deftest test-cj/fs-list-directory-recursive-error-non-directory ()
"Error: non-directory input."
(should-error (cj/fs-list-directory-recursive "/etc/hosts")))
(ert-deftest test-cj/fs-list-directory-recursive-boundary-empty-dir ()
"Boundary: recursive listing in empty directory."
(make-temp-file "empty-dir" t)
(let ((empty (make-temp-file "empty-dir" t)))
(unwind-protect
(progn
(should (equal (cj/fs-list-directory-recursive empty) nil))
(delete-directory empty)))))
(provide 'test-tool-library-fs-list-directory-recursive)
;;; test-tool-library-fs-list-directory-recursive.el ends here
|