From 336707efb3d173c396ac522490ef2b1b6664eebf Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 22 Aug 2017 16:22:33 +0200 Subject: [PATCH] Test `file-expand-wildcards' for Tramp * lisp/net/tramp-compat.el (tramp-advice-file-expand-wildcards): Remove, not needed anymore. * test/lisp/net/tramp-tests.el (top): Require seq.el. (tramp-test16-directory-files): Simplify. (tramp-test16-file-expand-wildcards): New test. (tramp-test28-interrupt-process): Skip for older Emacsen. --- lisp/net/tramp-compat.el | 27 ----------------- test/lisp/net/tramp-tests.el | 58 ++++++++++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 29 deletions(-) diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index b2df4d6324b..9a50d624487 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el @@ -50,33 +50,6 @@ `(when (functionp ,function) (with-no-warnings (funcall ,function ,@arguments)))) -;; We currently use "[" and "]" in the filename format for IPv6 hosts -;; of GNU Emacs. This means that Emacs wants to expand wildcards if -;; `find-file-wildcards' is non-nil, and then barfs because no -;; expansion could be found. We detect this situation and do -;; something really awful: we have `file-expand-wildcards' return the -;; original filename if it can't expand anything. Let's just hope -;; that this doesn't break anything else. It is not needed anymore -;; since GNU Emacs 23.2. -(unless (featurep 'files 'remote-wildcards) - (defadvice file-expand-wildcards - (around tramp-advice-file-expand-wildcards activate) - (let ((name (ad-get-arg 0))) - ;; If it's a Tramp file, look if wildcards need to be expanded - ;; at all. - (if (and - (tramp-tramp-file-p name) - (not (string-match "[[*?]" (file-remote-p name 'localname)))) - (setq ad-return-value (list name)) - ;; Otherwise, just run the original function. - ad-do-it))) - (add-hook - 'tramp-unload-hook - (lambda () - (ad-remove-advice - 'file-expand-wildcards 'around 'tramp-advice-file-expand-wildcards) - (ad-activate 'file-expand-wildcards)))) - (defsubst tramp-compat-temporary-file-directory () "Return name of directory for temporary files. It is the default value of `temporary-file-directory'." diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 129bc1d65da..85ed6467220 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -39,6 +39,7 @@ (require 'dired) (require 'ert) +(require 'seq) (require 'tramp) (require 'vc) (require 'vc-bzr) @@ -2145,8 +2146,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'." (skip-unless (tramp--test-enabled)) (dolist (quoted (if tramp--test-expensive-test '(nil t) '(nil))) - (let* ((tmp-name1 - (expand-file-name (tramp--test-make-temp-name nil quoted))) + (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted)) (tmp-name2 (expand-file-name "bla" tmp-name1)) (tmp-name3 (expand-file-name "foo" tmp-name1))) (unwind-protect @@ -2172,6 +2172,58 @@ This tests also `file-directory-p' and `file-accessible-directory-p'." ;; Cleanup. (ignore-errors (delete-directory tmp-name1 'recursive)))))) +;; This is not a file name handler test. But Tramp needed to apply an +;; advice for older Emacs versions, so we check that this has been fixed. +(ert-deftest tramp-test16-file-expand-wildcards () + "Check `file-expand-wildcards'." + (skip-unless (tramp--test-enabled)) + + (dolist (quoted (if tramp--test-expensive-test '(nil t) '(nil))) + (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted)) + (tmp-name2 (expand-file-name "foo" tmp-name1)) + (tmp-name3 (expand-file-name "bar" tmp-name1)) + (tmp-name4 (expand-file-name "baz" tmp-name1)) + (default-directory tmp-name1)) + (unwind-protect + (progn + (make-directory tmp-name1) + (write-region "foo" nil tmp-name2) + (write-region "bar" nil tmp-name3) + (write-region "baz" nil tmp-name4) + (should (file-directory-p tmp-name1)) + (should (file-exists-p tmp-name2)) + (should (file-exists-p tmp-name3)) + (should (file-exists-p tmp-name4)) + + ;; We cannot use `sort', it works destructive. + (should (equal (file-expand-wildcards "*") + (seq-sort 'string< '("foo" "bar" "baz")))) + (should (equal (file-expand-wildcards "ba?") + (seq-sort 'string< '("bar" "baz")))) + (should (equal (file-expand-wildcards "ba[rz]") + (seq-sort 'string< '("bar" "baz")))) + + (should (equal (file-expand-wildcards "*" 'full) + (seq-sort + 'string< `(,tmp-name2 ,tmp-name3 ,tmp-name4)))) + (should (equal (file-expand-wildcards "ba?" 'full) + (seq-sort 'string< `(,tmp-name3 ,tmp-name4)))) + (should (equal (file-expand-wildcards "ba[rz]" 'full) + (seq-sort 'string< `(,tmp-name3 ,tmp-name4)))) + + (should (equal (file-expand-wildcards (concat tmp-name1 "/" "*")) + (seq-sort + 'string< `(,tmp-name2 ,tmp-name3 ,tmp-name4)))) + (should (equal (file-expand-wildcards (concat tmp-name1 "/" "ba?")) + (seq-sort 'string< `(,tmp-name3 ,tmp-name4)))) + (should (equal (file-expand-wildcards + (concat tmp-name1 "/" "ba[rz]")) + (seq-sort 'string< `(,tmp-name3 ,tmp-name4))))) + + ;; Cleanup. + (ignore-errors + (delete-directory tmp-name1)))))) + (ert-deftest tramp-test17-insert-directory () "Check `insert-directory'." (skip-unless (tramp--test-enabled)) @@ -2905,6 +2957,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." :tags '(:expensive-test) (skip-unless (tramp--test-enabled)) (skip-unless (tramp--test-sh-p)) + ;; Since Emacs 26.1. + (skip-unless (boundp 'interrupt-process-functions)) (let ((default-directory tramp-test-temporary-file-directory) kill-buffer-query-functions proc) -- 2.39.2