diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-dirvish-config-dired-line-directory.el | 56 | ||||
| -rw-r--r-- | tests/test-dirvish-config-mark-all-visible.el | 68 | ||||
| -rw-r--r-- | tests/test-dirvish-config-public-wrappers.el | 19 |
3 files changed, 71 insertions, 72 deletions
diff --git a/tests/test-dirvish-config-dired-line-directory.el b/tests/test-dirvish-config-dired-line-directory.el deleted file mode 100644 index 7f344c7c0..000000000 --- a/tests/test-dirvish-config-dired-line-directory.el +++ /dev/null @@ -1,56 +0,0 @@ -;;; test-dirvish-config-dired-line-directory.el --- Tests for the directory-line predicate -*- lexical-binding: t; -*- - -;;; Commentary: -;; `cj/--dired-line-is-directory-p' is the testable predicate behind -;; `cj/dired-mark-all-visible-files'. Dired buffers prefix each file -;; line with a one-char mark column followed by the `ls -l' output, so -;; column 2 is the file-type letter (`d' for directory, `-' for regular -;; file). The wrapper iterates the buffer and skips lines this -;; predicate returns t for; the iteration stays dired-coupled and -;; untested, but the line-classification logic is now isolated. - -;;; Code: - -(require 'ert) -(require 'package) - -(setq package-user-dir (expand-file-name "elpa" user-emacs-directory)) -(package-initialize) -(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) -(add-to-list 'load-path (expand-file-name "elpa/dirvish-2.3.0/extensions" - user-emacs-directory)) -(require 'user-constants) -(require 'keybindings) -(require 'dirvish-config) - -(ert-deftest test-cj--dired-line-is-directory-p-unmarked-directory () - "Normal: an unmarked directory line (` drwx...') matches." - (should (cj/--dired-line-is-directory-p - " drwxr-xr-x 1 me me 4096 May 10 13:00 subdir/"))) - -(ert-deftest test-cj--dired-line-is-directory-p-marked-directory () - "Normal: a star-marked directory line (`* drwx...') matches." - (should (cj/--dired-line-is-directory-p - "* drwxr-xr-x 1 me me 4096 May 10 13:00 subdir/"))) - -(ert-deftest test-cj--dired-line-is-directory-p-regular-file () - "Normal: a regular file line (` -rw...') does not match." - (should-not (cj/--dired-line-is-directory-p - " -rw-r--r-- 1 me me 42 May 10 13:00 notes.txt"))) - -(ert-deftest test-cj--dired-line-is-directory-p-symlink-line () - "Boundary: a symlink line (` lrwx...') does not match -- only `d' is a dir." - (should-not (cj/--dired-line-is-directory-p - " lrwxrwxrwx 1 me me 12 May 10 13:00 link -> target"))) - -(ert-deftest test-cj--dired-line-is-directory-p-empty-line () - "Boundary: an empty string does not match." - (should-not (cj/--dired-line-is-directory-p ""))) - -(ert-deftest test-cj--dired-line-is-directory-p-header-line () - "Boundary: a dired header (` /path/to:') or `total' line does not match." - (should-not (cj/--dired-line-is-directory-p " /home/me/projects:")) - (should-not (cj/--dired-line-is-directory-p " total 24"))) - -(provide 'test-dirvish-config-dired-line-directory) -;;; test-dirvish-config-dired-line-directory.el ends here diff --git a/tests/test-dirvish-config-mark-all-visible.el b/tests/test-dirvish-config-mark-all-visible.el new file mode 100644 index 000000000..5ed01440c --- /dev/null +++ b/tests/test-dirvish-config-mark-all-visible.el @@ -0,0 +1,68 @@ +;;; test-dirvish-config-mark-all-visible.el --- Tests for marking all visible files -*- lexical-binding: t; -*- + +;;; Commentary: +;; `cj/dired-mark-all-visible-files' marks every regular file in a Dired +;; buffer and leaves directories unmarked. The loop is exercised here against +;; a real Dired buffer over a temp directory (the line predicate has its own +;; unit tests). The regression this pins: `dired-mark' advances point itself, +;; so an extra `forward-line' skipped every other file and only alternate files +;; got marked. + +;;; Code: + +(require 'ert) +(require 'package) +(setq package-user-dir (expand-file-name "elpa" user-emacs-directory)) +(package-initialize) +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) +(add-to-list 'load-path (expand-file-name "elpa/dirvish-2.3.0/extensions" + user-emacs-directory)) +(require 'user-constants) +(require 'keybindings) +(require 'dirvish-config) +(require 'dired) + +(defun test-dirvish--marked-count () + "Return the number of `*'-marked lines in the current Dired buffer." + (let ((n 0)) + (save-excursion + (goto-char (point-min)) + (while (not (eobp)) + (when (looking-at-p "^\\*") (setq n (1+ n))) + (forward-line 1))) + n)) + +(ert-deftest test-dirvish-mark-all-visible-marks-every-file () + "Normal: all regular files get marked, no skips. +Three files plus a subdirectory; the count of marks must equal the file count." + (let ((dir (make-temp-file "dirvish-mark-test-" t))) + (unwind-protect + (progn + (dolist (f '("a.txt" "b.txt" "c.txt")) + (write-region "" nil (expand-file-name f dir))) + (make-directory (expand-file-name "subdir" dir)) + (let ((buf (dired-noselect dir))) + (unwind-protect + (with-current-buffer buf + (cj/dired-mark-all-visible-files) + (should (= 3 (test-dirvish--marked-count)))) + (kill-buffer buf)))) + (delete-directory dir t)))) + +(ert-deftest test-dirvish-mark-all-visible-leaves-directories-unmarked () + "Boundary: a directory line is never marked." + (let ((dir (make-temp-file "dirvish-mark-test-" t))) + (unwind-protect + (progn + (write-region "" nil (expand-file-name "only.txt" dir)) + (make-directory (expand-file-name "adir" dir)) + (let ((buf (dired-noselect dir))) + (unwind-protect + (with-current-buffer buf + (cj/dired-mark-all-visible-files) + (should (= 1 (test-dirvish--marked-count)))) + (kill-buffer buf)))) + (delete-directory dir t)))) + +(provide 'test-dirvish-config-mark-all-visible) +;;; test-dirvish-config-mark-all-visible.el ends here diff --git a/tests/test-dirvish-config-public-wrappers.el b/tests/test-dirvish-config-public-wrappers.el index 0a9998646..cec979e4a 100644 --- a/tests/test-dirvish-config-public-wrappers.el +++ b/tests/test-dirvish-config-public-wrappers.el @@ -101,22 +101,9 @@ confused when several built-ins are overridden in the same test." (when (file-exists-p dst) (delete-file dst))))) ;;; cj/dired-mark-all-visible-files - -(ert-deftest test-dirvish-mark-all-visible-skips-directories () - "Normal: directory lines are skipped, file lines are marked." - (let ((marks 0)) - (with-temp-buffer - ;; Real dired listing has lines like " drwxr... dir/" or " -rw... file". - ;; The helper `cj/--dired-line-is-directory-p' matches "<space>d". - (insert " drwxr-xr-x subdir\n" - " -rw-r--r-- file1.txt\n" - " -rw-r--r-- file2.txt\n") - (goto-char (point-min)) - (cl-letf (((symbol-function 'dired-mark) - (lambda (&rest _) (cl-incf marks)))) - (cj/dired-mark-all-visible-files))) - ;; 2 file lines marked; the directory line + the trailing empty line skipped. - (should (= marks 2)))) +;; Covered by test-dirvish-config-mark-all-visible.el, which exercises the loop +;; against a real Dired buffer (the previous fake-buffer mock coupled to the +;; retired regex helper). ;;; cj/dired-copy-path-as-kill |
