]> code.delx.au - gnu-emacs/blobdiff - test/lisp/net/tramp-tests.el
Fix Bug#23631 for Tramp
[gnu-emacs] / test / lisp / net / tramp-tests.el
index a29e42e7343e0875a605349ebe7dc1f536672db5..a8d89e87c2d75c1e3026bb86cbacf82d7162d677 100644 (file)
@@ -637,7 +637,26 @@ This checks also `file-name-as-directory', `file-name-directory',
   (should
    (string-equal (file-name-nondirectory "/method:host:/path/to/file/") ""))
   (should-not
-   (unhandled-file-name-directory "/method:host:/path/to/file")))
+   (unhandled-file-name-directory "/method:host:/path/to/file"))
+
+  ;; Bug#10085.
+  (dolist (n-e '(nil t))
+    ;; We must clear `tramp-default-method'.  On hydra, it is "ftp",
+    ;; which ruins the tests.
+    (let ((non-essential n-e)
+          tramp-default-method)
+      (dolist (file
+              `(,(file-remote-p tramp-test-temporary-file-directory 'method)
+                ,(file-remote-p tramp-test-temporary-file-directory 'host)))
+       (unless (zerop (length file))
+         (setq file (format "/%s:" file))
+         (should (string-equal (directory-file-name file) file))
+         (should
+          (string-equal
+           (file-name-as-directory file)
+           (if (tramp-completion-mode-p) file (concat file "./"))))
+         (should (string-equal (file-name-directory file) file))
+         (should (string-equal (file-name-nondirectory file) "")))))))
 
 (ert-deftest tramp-test07-file-exists-p ()
   "Check `file-exist-p', `write-region' and `delete-file'."
@@ -1353,25 +1372,84 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
   "Check `file-name-completion' and `file-name-all-completions'."
   (skip-unless (tramp--test-enabled))
 
-  (let ((tmp-name (tramp--test-make-temp-name)))
-    (unwind-protect
-       (progn
-         (make-directory tmp-name)
-         (should (file-directory-p tmp-name))
-         (write-region "foo" nil (expand-file-name "foo" tmp-name))
-         (write-region "bar" nil (expand-file-name "bold" tmp-name))
-         (make-directory (expand-file-name "boz" tmp-name))
-         (should (equal (file-name-completion "fo" tmp-name) "foo"))
-         (should (equal (file-name-completion "b" tmp-name) "bo"))
-         (should
-          (equal (file-name-completion "b" tmp-name 'file-directory-p) "boz/"))
-         (should (equal (file-name-all-completions "fo" tmp-name) '("foo")))
-         (should
-          (equal (sort (file-name-all-completions "b" tmp-name) 'string-lessp)
-                 '("bold" "boz/"))))
+  (dolist (n-e '(nil t))
+    (let ((non-essential n-e)
+         (tmp-name (tramp--test-make-temp-name))
+         (method (file-remote-p tramp-test-temporary-file-directory 'method))
+         (host (file-remote-p tramp-test-temporary-file-directory 'host)))
+
+      (unwind-protect
+         (progn
+           ;; Method and host name in completion mode.  This kind of
+           ;; completion does not work on MS Windows.
+           (when (and (tramp-completion-mode-p)
+                      (not (memq system-type '(cygwin windows-nt))))
+             (unless (zerop (length method))
+               (should
+                (member
+                 (format "%s:" method)
+                 (file-name-all-completions (substring method 0 1) "/"))))
+             (unless (zerop (length host))
+               (should
+                (member
+                 (format "%s:" host)
+                 (file-name-all-completions (substring host 0 1) "/"))))
+             (unless (or (zerop (length method)) (zerop (length host)))
+               (should
+                (member
+                 (format "%s:" host)
+                 (file-name-all-completions
+                  (substring host 0 1) (format "/%s:" method))))))
+
+           ;; Local files.
+           (make-directory tmp-name)
+           (should (file-directory-p tmp-name))
+           (write-region "foo" nil (expand-file-name "foo" tmp-name))
+           (should (file-exists-p (expand-file-name "foo" tmp-name)))
+           (write-region "bar" nil (expand-file-name "bold" tmp-name))
+           (should (file-exists-p (expand-file-name "bold" tmp-name)))
+           (make-directory (expand-file-name "boz" tmp-name))
+           (should (file-directory-p (expand-file-name "boz" tmp-name)))
+           (should (equal (file-name-completion "fo" tmp-name) "foo"))
+           (should (equal (file-name-completion "foo" tmp-name) t))
+           (should (equal (file-name-completion "b" tmp-name) "bo"))
+           (should-not (file-name-completion "a" tmp-name))
+           (should
+            (equal
+             (file-name-completion "b" tmp-name 'file-directory-p) "boz/"))
+           (should (equal (file-name-all-completions "fo" tmp-name) '("foo")))
+           (should
+            (equal
+             (sort (file-name-all-completions "b" tmp-name) 'string-lessp)
+             '("bold" "boz/")))
+           (should-not (file-name-all-completions "a" tmp-name))
+           ;; `completion-regexp-list' restricts the completion to
+           ;; files which match all expressions in this list.
+           (let ((completion-regexp-list
+                  `(,directory-files-no-dot-files-regexp "b")))
+             (should
+              (equal (file-name-completion "" tmp-name) "bo"))
+             (should
+              (equal
+               (sort (file-name-all-completions "" tmp-name) 'string-lessp)
+               '("bold" "boz/"))))
+           ;; `file-name-completion' ignores file names that end in
+           ;; any string in `completion-ignored-extensions'.
+           (let ((completion-ignored-extensions '(".ext")))
+             (write-region "foo" nil (expand-file-name "foo.ext" tmp-name))
+             (should (file-exists-p (expand-file-name "foo.ext" tmp-name)))
+             (should (equal (file-name-completion "fo" tmp-name) "foo"))
+             (should (equal (file-name-completion "foo" tmp-name) t))
+             (should (equal (file-name-completion "foo." tmp-name) "foo.ext"))
+             (should (equal (file-name-completion "foo.ext" tmp-name) t))
+             ;; `file-name-all-completions' is not affected.
+             (should
+              (equal
+               (sort (file-name-all-completions "" tmp-name) 'string-lessp)
+               '("../" "./" "bold" "boz/" "foo" "foo.ext")))))
 
-      ;; Cleanup.
-      (ignore-errors (delete-directory tmp-name 'recursive)))))
+       ;; Cleanup.
+       (ignore-errors (delete-directory tmp-name 'recursive))))))
 
 (ert-deftest tramp-test25-load ()
   "Check `load'."
@@ -1420,7 +1498,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
            (should (zerop (process-file "ls" nil t nil fnnd)))
            ;; `ls' could produce colorized output.
            (goto-char (point-min))
-           (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
+           (while
+               (re-search-forward tramp-display-escape-sequence-regexp nil t)
              (replace-match "" nil nil))
            (should (string-equal (format "%s\n" fnnd) (buffer-string)))
            (should-not (get-buffer-window (current-buffer) t))
@@ -1430,7 +1509,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
            (should (zerop (process-file "ls" nil t t fnnd)))
            ;; `ls' could produce colorized output.
            (goto-char (point-min))
-           (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
+           (while
+               (re-search-forward tramp-display-escape-sequence-regexp nil t)
              (replace-match "" nil nil))
            (should
             (string-equal (format "%s\n%s\n" fnnd fnnd) (buffer-string)))
@@ -1533,7 +1613,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
           (format "ls %s" (file-name-nondirectory tmp-name)) (current-buffer))
          ;; `ls' could produce colorized output.
          (goto-char (point-min))
-         (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
+         (while (re-search-forward tramp-display-escape-sequence-regexp nil t)
            (replace-match "" nil nil))
          (should
           (string-equal
@@ -1556,7 +1636,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
              (accept-process-output (get-buffer-process (current-buffer)) 1)))
          ;; `ls' could produce colorized output.
          (goto-char (point-min))
-         (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
+         (while (re-search-forward tramp-display-escape-sequence-regexp nil t)
            (replace-match "" nil nil))
          ;; There might be a nasty "Process *Async Shell* finished" message.
          (goto-char (point-min))
@@ -1585,7 +1665,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
              (accept-process-output (get-buffer-process (current-buffer)) 1)))
          ;; `ls' could produce colorized output.
          (goto-char (point-min))
-         (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
+         (while (re-search-forward tramp-display-escape-sequence-regexp nil t)
            (replace-match "" nil nil))
          ;; There might be a nasty "Process *Async Shell* finished" message.
          (goto-char (point-min))
@@ -2033,9 +2113,12 @@ Use the `ls' command."
 
 (defun tramp--test-utf8 ()
   "Perform the test in `tramp-test32-utf8*'."
-  (let ((coding-system-for-read 'utf-8)
-       (coding-system-for-write 'utf-8)
-       (file-name-coding-system 'utf-8))
+  (let* ((utf8 (if (and (eq system-type 'darwin)
+                       (memq 'utf-8-hfs (coding-system-list)))
+                  'utf-8-hfs 'utf-8))
+        (coding-system-for-read utf8)
+        (coding-system-for-write utf8)
+        (file-name-coding-system utf8))
     (tramp--test-check-files
      (unless (tramp--test-hpux-p) "Γυρίστε το Γαλαξία με Ώτο Στοπ")
      (unless (tramp--test-hpux-p)
@@ -2271,6 +2354,7 @@ Since it unloads Tramp, it shall be the last test to run."
 ;; * set-file-selinux-context
 
 ;; * Work on skipped tests.  Make a comment, when it is impossible.
+;; * Fix `tramp-test06-directory-file-name' for `ftp'.
 ;; * Fix `tramp-test15-copy-directory' for `smb'.  Using tar in a pipe
 ;;   doesn't work well when an interactive password must be provided.
 ;; * Fix `tramp-test27-start-file-process' on MS Windows (`process-send-eof'?).