From 213243a73871f365c910a6680a894907a497bbee Mon Sep 17 00:00:00 2001 From: John Cummings Date: Fri, 24 Sep 2021 15:36:23 -0400 Subject: [PATCH] Add tests for 'insert-directory' Add tests for 'insert-directory' base functionality and regression tests for the issue where free space was reported for the current directory instead of the target of 'list-directory' (Bug#50630). * test/lisp/files-tests.el: Add 'insert-directory' tests. * test/lisp/files-resources/insert-directory/: Create directories and files to use for testing 'insert-directory'. --- .../insert-directory/test_dir/bar | 0 .../insert-directory/test_dir/foo | 0 .../insert-directory/test_dir_other/bar | 0 .../insert-directory/test_dir_other/foo | 0 test/lisp/files-tests.el | 79 +++++++++++++++++++ 5 files changed, 79 insertions(+) create mode 100644 test/lisp/files-resources/insert-directory/test_dir/bar create mode 100644 test/lisp/files-resources/insert-directory/test_dir/foo create mode 100644 test/lisp/files-resources/insert-directory/test_dir_other/bar create mode 100644 test/lisp/files-resources/insert-directory/test_dir_other/foo diff --git a/test/lisp/files-resources/insert-directory/test_dir/bar b/test/lisp/files-resources/insert-directory/test_dir/bar new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/lisp/files-resources/insert-directory/test_dir/foo b/test/lisp/files-resources/insert-directory/test_dir/foo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/lisp/files-resources/insert-directory/test_dir_other/bar b/test/lisp/files-resources/insert-directory/test_dir_other/bar new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/lisp/files-resources/insert-directory/test_dir_other/foo b/test/lisp/files-resources/insert-directory/test_dir_other/foo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/lisp/files-tests.el b/test/lisp/files-tests.el index b283a512a4..61c5a13546 100644 --- a/test/lisp/files-tests.el +++ b/test/lisp/files-tests.el @@ -26,6 +26,7 @@ (require 'bytecomp) ; `byte-compiler-base-file-name'. (require 'dired) ; `dired-uncache'. (require 'filenotify) ; `file-notify-add-watch'. +(require 'map) ;; Set to t if the local variable was set, `query' if the query was ;; triggered. @@ -1774,6 +1775,84 @@ files-tests-save-buffers-kill-emacs--asks-to-save-buffers ;; `save-some-buffers-default-predicate' (i.e. the 2nd element) is ignored. (nil save-some-buffers-root ,nb-might-save)))))) +;;insert-directory output tests +(let* ((data-dir "insert-directory") + (test-dir (file-name-as-directory + (ert-resource-file + (concat data-dir "/test_dir")))) + (test-dir-other (file-name-as-directory + (ert-resource-file + (concat data-dir "/test_dir_other")))) + (test-files `(,test-dir "foo" "bar")) ;expected files to be found + ;Free space test data for `insert-directory'. + ;Meaning: (path free-space-bytes-to-stub expected-free-space-string) + (free-data `((,test-dir 10 "available 10 B") + (,test-dir-other 100 "available 100 B") + (:default 999 "available 999 B"))) + ;;Try to verify that insert-directory will come from files.el, + ;;not ls-lisp.el. Windows builds will probably use ls-lisp.el + ;;by default, which will invalidate some tests. + (insert-directory-program-used (or (not (featurep 'ls-lisp)) + ls-lisp-use-insert-directory-program))) + + + (defun files-tests--look-up-free-data (path) + "Look up free space test data, with a default for unspecified paths." + (let ((path (file-name-as-directory path))) + (cdr (or (assoc path free-data) + (assoc :default free-data))))) + + (defun files-tests--make-file-system-info-stub (&optional static-path) + "Return a stub for `file-system-info' using dynamic or static test data. +If that data should be static, pass STATIC-PATH to choose which +path's data to use." + (lambda (path) + (let* ((path (cond (static-path) + ;; file-system-info knows how to handle ".", so we + ;; do the same thing + ((equal "." path) default-directory) + (path))) + (return-size + (car (files-tests--look-up-free-data path)))) + (list return-size return-size return-size)))) + + (defun files-tests--insert-directory-output (dir &optional verbose) + "Run `insert-directory' and return its output." + (with-current-buffer-window "files-tests--insert-directory" nil nil + (insert-directory dir "-l" nil t) + (buffer-substring-no-properties (point-min) (point-max)))) + + (ert-deftest files-tests-insert-directory-shows-files () + "Verify `insert-directory' reports the files in the directory." + (let* ((test-dir (car test-files)) + (files (cdr test-files)) + (output (files-tests--insert-directory-output test-dir))) + (dolist (file files) + (should (string-match-p file output))))) + + (defun files-tests--insert-directory-shows-given-free (dir &optional info-func) + "Run `insert-directory' and verify it reports the correct available space. +Stub `file-system-info' to ensure the available space is consistent, +either with the given stub function or a default one using test data." + (cl-letf (((symbol-function 'file-system-info) + (or info-func + (files-tests--make-file-system-info-stub)))) + (should (string-match-p (cadr + (files-tests--look-up-free-data dir)) + (files-tests--insert-directory-output dir t))))) + + (ert-deftest files-tests-insert-directory-shows-free () + "Test that verbose `insert-directory' shows the correct available space." + (files-tests--insert-directory-shows-given-free + test-dir + (files-tests--make-file-system-info-stub test-dir))) + + (ert-deftest files-tests-bug-50630 () + "Verify verbose `insert-directory' shows free space of the target directory. +The current directory at call time should not affect the result (Bug#50630)." + (skip-unless insert-directory-program-used) + (let ((default-directory test-dir-other)) + (files-tests--insert-directory-shows-given-free test-dir)))) (provide 'files-tests) ;;; files-tests.el ends here -- 2.25.1