X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fpathnames.impure.lisp;h=c81cb5a221e4eaa02c1c9c8ec017148a93b0f58f;hb=353d8da16686b5cd1d75f95017c185b50f75cfda;hp=b4a9af5ae06d5281a99a10c72a52364ecb700d8a;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/tests/pathnames.impure.lisp b/tests/pathnames.impure.lisp index b4a9af5..c81cb5a 100644 --- a/tests/pathnames.impure.lisp +++ b/tests/pathnames.impure.lisp @@ -339,5 +339,93 @@ ;;; bug reported by Artem V. Andreev: :WILD not handled in unparsing ;;; directory lists. (assert (equal (namestring #p"/tmp/*/") "/tmp/*/")) + +;;; Printing of pathnames; see CLHS 22.1.3.1. This section was started +;;; to confirm that pathnames are printed as their namestrings under +;;; :escape nil :readably nil. +(loop for (pathname expected . vars) in + `((#p"/foo" "#P\"/foo\"") + (#p"/foo" "#P\"/foo\"" :readably nil) + (#p"/foo" "#P\"/foo\"" :escape nil) + (#p"/foo" "/foo" :readably nil :escape nil)) + for actual = (with-standard-io-syntax + (apply #'write-to-string pathname vars)) + do (assert (string= expected actual) + () + "~S should be ~S, was ~S" + (list* 'write-to-string pathname vars) + expected + actual)) + +;;; we got (truename "/") wrong for about 6 months. Check that it's +;;; still right. +(let ((pathname (truename "/"))) + (assert (equalp pathname #p"/")) + (assert (equal (pathname-directory pathname) '(:absolute)))) + +;;; we failed to unparse logical pathnames with :NAME :WILD :TYPE NIL. +;;; (Reported by Pascal Bourguignon. +(let ((pathname (make-pathname :host "SYS" :directory '(:absolute :wild-inferiors) + :name :wild :type nil))) + (assert (string= (namestring pathname) "SYS:**;*")) + (assert (string= (write-to-string pathname :readably t) "#P\"SYS:**;*\""))) + +;;; reported by James Y Knight on sbcl-devel 2006-05-17 +(let ((p1 (make-pathname :directory '(:relative "bar"))) + (p2 (make-pathname :directory '(:relative :back "foo")))) + (assert (equal (merge-pathnames p1 p2) + (make-pathname :directory '(:relative :back "foo" "bar"))))) + +;;; construct native namestrings even if the directory is empty (means +;;; that same as if (:relative)) +(assert (equal (sb-ext:native-namestring (make-pathname :directory '(:relative) + :name "foo" + :type "txt")) + (sb-ext:native-namestring (let ((p (make-pathname :directory nil + :name "foo" + :type "txt"))) + (assert (not (pathname-directory p))) + p)))) + +;;; reported by Richard Kreuter: PATHNAME and MERGE-PATHNAMES used to +;;; be unsafely-flushable. Since they are known to return non-nil values +;;; only, the test-node of the IF is flushed, and since the function +;;; is unsafely-flushable, out it goes, and bad pathname designators +;;; breeze through. +;;; +;;; These tests rely on using a stream that appears as a file-stream +;;; but isn't a valid pathname-designator. +(assert (eq :false + (if (ignore-errors (pathname sb-sys::*tty*)) :true :false))) +(assert (eq :false + (if (ignore-errors (merge-pathnames sb-sys::*tty*)) :true :false))) + +;;; This used to return "quux/bar.lisp" +(assert (equal #p"quux/bar.fasl" + (let ((*default-pathname-defaults* #p"quux/")) + (compile-file-pathname "foo.lisp" :output-file "bar")))) +(assert (equal #p"quux/bar.fasl" + (let ((*default-pathname-defaults* #p"quux/")) + (compile-file-pathname "bar.lisp")))) + +(enough-namestring #p".a*") + + +(assert (eq 99 + (pathname-version + (translate-pathname + (make-pathname :name "foo" :type "bar" :version 99) + (make-pathname :name :wild :type :wild :version :wild) + (make-pathname :name :wild :type :wild :version :wild))))) + +(assert (eq 99 + (pathname-version + (translate-pathname + (make-pathname :name "foo" :type "bar" :version 99) + (make-pathname :name :wild :type :wild :version :wild) + (make-pathname :name :wild :type :wild :version nil))))) + +;;; enough-namestring relative to root +(assert (equal "foo" (enough-namestring "/foo" "/"))) + ;;;; success -(quit :unix-status 104)