emacs/test/src/fileio-tests.el
Paul Eggert bb267f17f9 Merge from origin/emacs-26
63b04c11d5 Fix copyright years by hand
5c7dd8a783 Update copyright year to 2018
220a9ecba1 Merge from Gnulib
312c565566 Don't add empty keyboard macro to macro ring (Bug#24992)
39ca289a7a Allow customization of decoding of "man" command
f8240815ea * etc/NEWS: Add security consideration note on passphrase ...
0c78822c70 Fix subtle problem with scroll-down when scroll-margin is ...
acd289c5a4 Fix problems with indexing in User manual
b240c7846b * lisp/help.el (describe-key): Only (copy-sequence elt) wh...
e879a5444a * src/buffer.c (Frestore_buffer_modified_p): Fix bug#29846
81b1028b63 Improve documentation of 'inhibit-modification-hooks' and ...
7175496d7a Fix doc string of 'enable-recursive-minibuffers'
5b38406491 Fix documentation of delsel and of killing text

# Conflicts:
#	etc/NEWS
#	etc/refcards/ru-refcard.tex
2018-01-01 01:13:04 -08:00

97 lines
4.3 KiB
EmacsLisp

;;; unit tests for src/fileio.c -*- lexical-binding: t; -*-
;; Copyright 2017-2018 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
(require 'ert)
(defun try-link (target link)
(make-symbolic-link target link)
(let* ((read-link (file-symlink-p link))
(failure (unless (string-equal target read-link)
(list 'string-equal target read-link))))
(delete-file link)
failure))
(defun fileio-tests--symlink-failure ()
(let* ((dir (make-temp-file "fileio" t))
(link (expand-file-name "link" dir)))
(unwind-protect
(let (failure
(char 0))
(while (and (not failure) (< char 127))
(setq char (1+ char))
(when (and (eq system-type 'cygwin) (eq char 92))
(setq char (1+ char)))
(setq failure (try-link (string char) link)))
(or failure
(try-link "/:" link)))
(delete-directory dir t))))
(ert-deftest fileio-tests--odd-symlink-chars ()
"Check that any non-NULL ASCII character can appear in a symlink.
Also check that an encoding error can appear in a symlink."
;; Some Windows versions don't support symlinks, and those which do
;; will pop up UAC elevation prompts, so we disable this test on
;; MS-Windows.
(skip-unless (not (eq system-type 'windows-nt)))
(should (equal nil (fileio-tests--symlink-failure))))
(ert-deftest fileio-tests--directory-file-name ()
(should (equal (directory-file-name "/") "/"))
(should (equal (directory-file-name "//") "//"))
(should (equal (directory-file-name "///") "/"))
(should (equal (directory-file-name "////") "/"))
(should (equal (directory-file-name "/abc") "/abc"))
(should (equal (directory-file-name "/abc/") "/abc"))
(should (equal (directory-file-name "/abc//") "/abc")))
(ert-deftest fileio-tests--directory-file-name-dos-nt ()
"Like fileio-tests--directory-file-name, but for DOS_NT systems."
(skip-unless (memq system-type '(ms-dos windows-nt)))
(should (equal (directory-file-name "d:/") "d:/"))
(should (equal (directory-file-name "d://") "d:/"))
(should (equal (directory-file-name "d:///") "d:/"))
(should (equal (directory-file-name "d:////") "d:/"))
(should (equal (directory-file-name "d:/abc") "d:/abc"))
(should (equal (directory-file-name "d:/abc/") "d:/abc"))
(should (equal (directory-file-name "d:/abc//") "d:/abc")))
(ert-deftest fileio-tests--file-name-as-directory ()
(should (equal (file-name-as-directory "") "./"))
(should (equal (file-name-as-directory "/") "/"))
(should (equal (file-name-as-directory "//") "//"))
(should (equal (file-name-as-directory "///") "///"))
(should (equal (file-name-as-directory "////") "////"))
(should (equal (file-name-as-directory "/abc") "/abc/"))
(should (equal (file-name-as-directory "/abc/") "/abc/"))
(should (equal (file-name-as-directory "/abc//") "/abc//")))
(ert-deftest fileio-tests--file-name-as-directory-dos-nt ()
"Like fileio-tests--file-name-as-directory, but for DOS_NT systems."
(skip-unless (memq system-type '(ms-dos windows-nt)))
(should (equal (file-name-as-directory "d:/") "d:/"))
(should (equal (file-name-as-directory "d:\\") "d:/"))
(should (equal (file-name-as-directory "d://") "d://"))
(should (equal (file-name-as-directory "d:///") "d:///"))
(should (equal (file-name-as-directory "d:////") "d:////"))
(should (equal (file-name-as-directory "d:\\\\\\\\") "d:////"))
(should (equal (file-name-as-directory "d:/abc") "d:/abc/"))
(should (equal (file-name-as-directory "D:\\abc") "d:/abc/"))
(should (equal (file-name-as-directory "d:/abc/") "d:/abc/"))
(should (equal (file-name-as-directory "D:\\abc/") "d:/abc/"))
(should (equal (file-name-as-directory "D:/abc//") "d:/abc//")))