aboutsummaryrefslogtreecommitdiff
path: root/tests/test-gptel-tools-read-text-file.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-gptel-tools-read-text-file.el')
-rw-r--r--tests/test-gptel-tools-read-text-file.el201
1 files changed, 0 insertions, 201 deletions
diff --git a/tests/test-gptel-tools-read-text-file.el b/tests/test-gptel-tools-read-text-file.el
deleted file mode 100644
index db3d6e7ed..000000000
--- a/tests/test-gptel-tools-read-text-file.el
+++ /dev/null
@@ -1,201 +0,0 @@
-;;; test-gptel-tools-read-text-file.el --- Tests for read_text_file gptel tool -*- lexical-binding: t; -*-
-
-;;; Commentary:
-;; Tests for the helpers in read_text_file.el.
-
-;;; Code:
-
-(require 'ert)
-(require 'cl-lib)
-
-(eval-and-compile
- (add-to-list 'load-path (expand-file-name "tests" user-emacs-directory))
- (add-to-list 'load-path (expand-file-name "gptel-tools" user-emacs-directory))
- (setq load-prefer-newer t)
- (unless (featurep 'gptel)
- (defvar gptel-tools nil)
- (defun gptel-make-tool (&rest _args) nil)
- (defun gptel-get-tool (&rest _args) nil)
- (provide 'gptel)))
-
-(require 'read_text_file)
-
-;; -------------------------- helpers
-
-(defun test-gptel-tools-read-text-file--in-home (suffix content fn)
- "Run FN with a temp file (containing CONTENT) under HOME using SUFFIX."
- (let* ((name (format ".test-gptel-tools-read-text-file-%s-%s.tmp"
- suffix (format-time-string "%s%N")))
- (path (expand-file-name name "~")))
- (unwind-protect
- (progn
- (with-temp-file path (insert content))
- (funcall fn path))
- (when (file-exists-p path) (delete-file path)))))
-
-;; -------------------------- validate-file-path
-
-(ert-deftest test-gptel-tools-read-text-file-validate-path-normal ()
- "Normal: an existing readable file under HOME passes."
- (test-gptel-tools-read-text-file--in-home
- "normal" "hi"
- (lambda (path)
- (should (equal (cj/validate-file-path path) (file-truename path))))))
-
-(ert-deftest test-gptel-tools-read-text-file-validate-path-error-outside-home ()
- "Error: path outside HOME signals."
- (should-error (cj/validate-file-path "/etc/hostname")))
-
-(ert-deftest test-gptel-tools-read-text-file-validate-path-error-missing ()
- "Error: missing file signals."
- (let ((path (expand-file-name
- (format ".test-gptel-tools-read-text-file-missing-%s.tmp"
- (format-time-string "%s%N"))
- "~")))
- (when (file-exists-p path) (delete-file path))
- (should-error (cj/validate-file-path path))))
-
-(ert-deftest test-gptel-tools-read-text-file-validate-path-error-directory ()
- "Error: a directory signals."
- (should-error (cj/validate-file-path "~")))
-
-(ert-deftest test-gptel-tools-read-text-file-validate-path-error-unreadable ()
- "Error: unreadable files signal."
- (test-gptel-tools-read-text-file--in-home
- "unreadable" "secret"
- (lambda (path)
- (cl-letf (((symbol-function 'file-readable-p) (lambda (_) nil)))
- (should-error (cj/validate-file-path path))))))
-
-(ert-deftest test-gptel-tools-read-text-file-validate-path-boundary-relative-home-path ()
- "Boundary: relative paths resolve under HOME."
- (test-gptel-tools-read-text-file--in-home
- "relative" "hi"
- (lambda (path)
- (let ((relative (file-relative-name path (expand-file-name "~"))))
- (should (equal (cj/validate-file-path relative)
- (file-truename path)))))))
-
-(ert-deftest test-gptel-tools-read-text-file-validate-path-boundary-symlink-inside-home ()
- "Boundary: symlinks inside HOME resolving inside HOME are accepted."
- (test-gptel-tools-read-text-file--in-home
- "symlink-target" "hi"
- (lambda (target)
- (let ((link (expand-file-name
- (format ".test-gptel-tools-read-text-file-link-%s.tmp"
- (format-time-string "%s%N"))
- "~")))
- (unwind-protect
- (progn
- (make-symbolic-link target link t)
- (should (equal (cj/validate-file-path link)
- (file-truename target))))
- (when (file-symlink-p link) (delete-file link)))))))
-
-(ert-deftest test-gptel-tools-read-text-file-validate-path-error-symlink-outside-home ()
- "Error: symlinks inside HOME pointing outside HOME are rejected."
- (let ((outside (make-temp-file "test-gptel-tools-read-text-file-outside-"))
- (link (expand-file-name
- (format ".test-gptel-tools-read-text-file-outside-link-%s.tmp"
- (format-time-string "%s%N"))
- "~")))
- (unwind-protect
- (progn
- (make-symbolic-link outside link t)
- (should-error (cj/validate-file-path link)))
- (when (file-exists-p outside) (delete-file outside))
- (when (file-symlink-p link) (delete-file link)))))
-
-;; -------------------------- get-file-metadata
-
-(ert-deftest test-gptel-tools-read-text-file-get-metadata-shape ()
- "Returns a plist with :size and :string keys."
- (test-gptel-tools-read-text-file--in-home
- "meta" "abc"
- (lambda (path)
- (let ((meta (cj/get-file-metadata path)))
- (should (plist-get meta :size))
- (should (= 3 (plist-get meta :size)))
- (should (stringp (plist-get meta :string)))
- (should (string-match-p "modified" (plist-get meta :string)))))))
-
-;; -------------------------- check-file-size-limits
-
-(ert-deftest test-gptel-tools-read-text-file-size-limits-normal ()
- "Small size below warning limit is a no-op."
- (should-not (cj/check-file-size-limits 1024 nil)))
-
-(ert-deftest test-gptel-tools-read-text-file-size-limits-error-hard-cap ()
- "Sizes above 100MB always signal."
- (should-error (cj/check-file-size-limits (* 101 1024 1024) t))
- (should-error (cj/check-file-size-limits (* 101 1024 1024) nil)))
-
-(ert-deftest test-gptel-tools-read-text-file-size-limits-warning-with-no-confirm ()
- "Above 10MB but below 100MB with no-confirm passes through silently."
- (should-not (cj/check-file-size-limits (* 11 1024 1024) t)))
-
-(ert-deftest test-gptel-tools-read-text-file-size-limits-warning-user-accepts ()
- "Above warning limit proceeds when the user accepts."
- (cl-letf (((symbol-function 'y-or-n-p) (lambda (_prompt) t)))
- (should-not (cj/check-file-size-limits (* 11 1024 1024) nil))))
-
-(ert-deftest test-gptel-tools-read-text-file-size-limits-warning-user-declines ()
- "Above warning limit signals when the user declines."
- (cl-letf (((symbol-function 'y-or-n-p) (lambda (_prompt) nil)))
- (should-error (cj/check-file-size-limits (* 11 1024 1024) nil))))
-
-;; -------------------------- detect-binary-file
-
-(ert-deftest test-gptel-tools-read-text-file-detect-binary-text-file ()
- "Text file: detect-binary returns nil."
- (test-gptel-tools-read-text-file--in-home
- "text" "plain ascii content"
- (lambda (path)
- (should-not (cj/detect-binary-file path)))))
-
-(ert-deftest test-gptel-tools-read-text-file-detect-binary-with-null-byte ()
- "File with NUL in first 1024 bytes returns truthy."
- (test-gptel-tools-read-text-file--in-home
- "bin" (concat "head\0tail")
- (lambda (path)
- (should (cj/detect-binary-file path)))))
-
-;; -------------------------- handle-special-file-types
-
-(ert-deftest test-gptel-tools-read-text-file-handle-special-epub-error ()
- "EPUB special-type handler signals \"not yet implemented\"."
- (should-error (cj/handle-special-file-types "/tmp/foo.epub" t)))
-
-(ert-deftest test-gptel-tools-read-text-file-handle-special-epub-cancel ()
- "EPUB special-type handler signals when user declines extraction."
- (cl-letf (((symbol-function 'y-or-n-p) (lambda (_prompt) nil)))
- (should-error (cj/handle-special-file-types "/tmp/foo.epub" nil))))
-
-(ert-deftest test-gptel-tools-read-text-file-handle-special-pdf-cancel ()
- "PDF special-type handler signals when user declines extraction."
- (cl-letf (((symbol-function 'y-or-n-p) (lambda (_prompt) nil)))
- (should-error (cj/handle-special-file-types "/tmp/foo.pdf" nil))))
-
-(ert-deftest test-gptel-tools-read-text-file-handle-special-pdf-empty-extraction ()
- "PDF special-type handler signals when extraction returns empty text."
- (cl-letf (((symbol-function 'shell-command-to-string) (lambda (_cmd) "")))
- (should-error (cj/handle-special-file-types "/tmp/foo.pdf" t))))
-
-(ert-deftest test-gptel-tools-read-text-file-handle-special-pdf-text ()
- "PDF special-type handler returns extracted text."
- (cl-letf (((symbol-function 'shell-command-to-string)
- (lambda (_cmd) "pdf text\n")))
- (should (equal (cj/handle-special-file-types "/tmp/foo.pdf" t)
- "pdf text\n"))))
-
-(ert-deftest test-gptel-tools-read-text-file-handle-special-binary-cancel ()
- "Generic binary handler signals when user declines."
- (cl-letf (((symbol-function 'y-or-n-p) (lambda (_prompt) nil)))
- (should-error (cj/handle-special-file-types "/tmp/foo.bin" nil))))
-
-(ert-deftest test-gptel-tools-read-text-file-handle-special-binary-returns-nil ()
- "Generic binary file with no-confirm returns nil to indicate normal read."
- (should-not (cj/handle-special-file-types "/tmp/foo.bin" t)))
-
-(provide 'test-gptel-tools-read-text-file)
-;;; test-gptel-tools-read-text-file.el ends here