X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=contrib%2Fsb-posix%2Fposix-tests.lisp;h=14f04b0ffaf7be28c207cac513a3a4695faa6030;hb=bbfa2aeb01af0a2353539aa3132a4b2a383cbd32;hp=2b8ff6e010a49e9d6438ba5683eab345278a7070;hpb=38da35e372a6e6f353fe5559edf6fca6459ef966;p=sbcl.git diff --git a/contrib/sb-posix/posix-tests.lisp b/contrib/sb-posix/posix-tests.lisp index 2b8ff6e..14f04b0 100644 --- a/contrib/sb-posix/posix-tests.lisp +++ b/contrib/sb-posix/posix-tests.lisp @@ -12,7 +12,7 @@ (defvar *current-directory* *default-pathname-defaults*) (defvar *this-file* *load-truename*) - + (deftest chdir.1 (sb-posix:chdir *test-directory*) 0) @@ -47,7 +47,7 @@ (sb-posix:syscall-error (c) (sb-posix:syscall-errno c))) #.sb-posix::enotdir) - + (deftest mkdir.1 (let ((dne (make-pathname :directory '(:relative "mkdir.does-not-exist.1")))) (unwind-protect @@ -84,7 +84,7 @@ (sb-posix:syscall-error (c) (sb-posix:syscall-errno c))) #.sb-posix::eacces) - + (deftest rmdir.1 (let ((dne (make-pathname :directory '(:relative "rmdir.does-not-exist.1")))) (ensure-directories-exist (merge-pathnames dne *test-directory*)) @@ -112,6 +112,7 @@ (sb-posix:syscall-errno c))) #.sb-posix::enotdir) +#-sunos ; Apparently gives EINVAL on SunOS 8, which doesn't make sense (deftest rmdir.error.3 (handler-case (sb-posix:rmdir "/") @@ -132,8 +133,10 @@ (sb-posix:syscall-error (c) (delete-file file) (sb-posix:rmdir dir) - (sb-posix:syscall-errno c)))) - #.sb-posix::enotempty) + (let ((errno (sb-posix:syscall-errno c))) + ;; documented by POSIX + (or (= errno sb-posix::eexist) (= errno sb-posix::enotempty)))))) + t) (deftest rmdir.error.5 (let* ((dir (merge-pathnames @@ -153,7 +156,7 @@ (sb-posix:rmdir dir) (sb-posix:syscall-errno c)))) #.sb-posix::eacces) - + (deftest stat.1 (let* ((stat (sb-posix:stat *test-directory*)) (mode (sb-posix::stat-mode stat))) @@ -205,7 +208,73 @@ (sb-posix:rmdir dir) (sb-posix:syscall-errno c)))) #.sb-posix::eacces) + +;;; stat-mode tests +(defmacro with-stat-mode ((mode pathname) &body body) + (let ((stat (gensym))) + `(let* ((,stat (sb-posix:stat ,pathname)) + (,mode (sb-posix::stat-mode ,stat))) + ,@body))) +(defmacro with-lstat-mode ((mode pathname) &body body) + (let ((stat (gensym))) + `(let* ((,stat (sb-posix:lstat ,pathname)) + (,mode (sb-posix::stat-mode ,stat))) + ,@body))) + +(deftest stat-mode.1 + (with-stat-mode (mode *test-directory*) + (sb-posix:s-isreg mode)) + 0) + +(deftest stat-mode.2 + (with-stat-mode (mode *test-directory*) + (zerop (sb-posix:s-isdir mode))) + nil) + +(deftest stat-mode.3 + (with-stat-mode (mode *test-directory*) + (sb-posix:s-ischr mode)) + 0) + +(deftest stat-mode.4 + (with-stat-mode (mode *test-directory*) + (sb-posix:s-isblk mode)) + 0) + +(deftest stat-mode.5 + (with-stat-mode (mode *test-directory*) + (sb-posix:s-isfifo mode)) + 0) + +(deftest stat-mode.6 + (with-stat-mode (mode *test-directory*) + (sb-posix:s-issock mode)) + 0) + +(deftest stat-mode.7 + (let ((link-pathname (make-pathname :name "stat-mode.7" + :defaults *test-directory*))) + (unwind-protect + (progn + (sb-posix:symlink *test-directory* link-pathname) + (with-lstat-mode (mode link-pathname) + (zerop (sb-posix:s-islnk mode)))) + (ignore-errors (sb-posix:unlink link-pathname)))) + nil) + +(deftest stat-mode.8 + (let ((pathname (make-pathname :name "stat-mode.8" + :defaults *test-directory*))) + (unwind-protect + (progn + (with-open-file (out pathname :direction :output) + (write-line "test" out)) + (with-stat-mode (mode pathname) + (zerop (sb-posix:s-isreg mode)))) + (ignore-errors (delete-file pathname)))) + nil) + ;;; see comment in filename's designator definition, in macros.lisp (deftest filename-designator.1 (let ((file (format nil "~A/[foo].txt" (namestring *test-directory*))))