(setf (logical-pathname-translations "demo0")
'(("**;*.*.*" "/tmp/")))
-;;; In case of a parse error we want to get a condition of type
-;;; CL:PARSE-ERROR (or more specifically, of type
-;;; SB-KERNEL:NAMESTRING-PARSE-ERROR).
+;;; In case of a parse error we want to get a condition of type TYPE-ERROR,
+;;; because ANSI says so. (This used to be PARSE-ERROR.)
(assert
(typep (grab-condition (logical-pathname "demo0::bla;file.lisp"))
- 'parse-error))
+ 'type-error))
;;; some things SBCL-0.6.9 used not to parse correctly:
;;;
;;; enough-namestring relative to root
(assert (equal "foo" (enough-namestring "/foo" "/")))
+\f
+;;; Check the handling of NIL, :UNSPECIFIC, the empty string, and
+;;; non-NIL strings in NATIVE-NAMESTRING implementations. Revised by
+;;; RMK 2007-11-28, attempting to preserve the apparent intended
+;;; denotation of SBCL's then-current pathname implementation.
+(assert (equal
+ (loop with components = (list nil :unspecific "" "a")
+ for name in components
+ appending (loop for type in components
+ as pathname = (make-pathname
+ #+win32 "C"
+ :directory '(:absolute "tmp")
+ :name name :type type)
+ collect (ignore-errors
+ (sb-ext:native-namestring pathname))))
+ #-win32
+ #|type NIL :UNSPECIFIC "" "a" |#
+#|name |#
+#|NIL |# '("/tmp/" "/tmp/" NIL NIL
+#|:UNSPECIFIC|# "/tmp/" "/tmp/" NIL NIL
+#|"" |# "/tmp/" "/tmp/" "/tmp/." "/tmp/.a"
+#|"a" |# "/tmp/a" "/tmp/a" "/tmp/a." "/tmp/a.a")
+
+ #+win32
+ #|type NIL :UNSPECIFIC "" "a" |#
+#|name |#
+#|NIL |# '("C:\\tmp\\" "C:\\tmp\\" NIL NIL
+#|:UNSPECIFIC|# "C:\\tmp\\" "C:\\tmp\\" NIL NIL
+#|"" |# "C:\\tmp\\" "C:\\tmp\\" "C:\\tmp\\." "C:\\tmp\\.a"
+#|"a" |# "C:\\tmp\\a" "C:\\tmp\\a" "C:\\tmp\\a." "C:\\tmp\\a.a")))
+
+(with-test (:name :delete-file-logical-pathname)
+ (setf (logical-pathname-translations "SB-TEST")
+ (list (list "**;*.*.*" (make-pathname :name :wild
+ :type :wild
+ :defaults (truename ".")))))
+ (let ((test (pathname "SB-TEST:delete-logical-pathname.tmp")))
+ (assert (typep test 'logical-pathname))
+ (with-open-file (f test :direction :output)
+ (write-line "delete me!" f))
+ (assert (probe-file test))
+ (assert (delete-file test))
+ (assert (not (probe-file test)))))
+
+(with-test (:name :logical-pathname-type-error)
+ (assert (eq :type-error-ok
+ (handler-case (logical-pathname "FOO.txt")
+ (type-error () :type-error-ok))))
+ (assert (eq :type-error-ok
+ (handler-case (logical-pathname "SYS:%")
+ (type-error () :type-error-ok)))))
+
+;;; Reported by Willem Broekema: Reading #p"\\\\" caused an error due
+;;; to insufficient sanity in input testing in EXTRACT-DEVICE (in
+;;; src;code;win32-pathname).
+#+win32
+(with-test (:name :bug-489698)
+ (assert (equal (make-pathname :directory '(:absolute))
+ (read-from-string "#p\"\\\\\\\\\""))))
;;;; success