# While most of SBCL is derived from the CMU CL system, the test
# files (like this one) were written from scratch after the fork
# from CMU CL.
-#
+#
# This software is in the public domain and is provided with
# absolutely no warranty. See the COPYING and CREDITS files for
# more information.
# Test DIRECTORY and TRUENAME.
-testdir=`pwd`"/filesys-test-$$"
+testdir=`/bin/pwd`"/filesys-test-$$"
mkdir $testdir
echo this is a test > $testdir/test-1.tmp
echo this is a test > $testdir/test-2.tmp
+echo this is a test > $testdir/wild\?test.tmp
cd $testdir
+ln -s $testdir dirlinktest
ln -s test-1.tmp link-1
ln -s `pwd`/test-2.tmp link-2
ln -s i-do-not-exist link-3
ln -s link-5 link-6
ln -s `pwd`/link-6 link-5
expected_truenames=\
-"'(#p\"$testdir/link-3\"\
+"'(#p\"$testdir/\"\
+ #p\"$testdir/link-3\"\
#p\"$testdir/link-4\"\
#p\"$testdir/link-5\"\
#p\"$testdir/link-6\"\
#p\"$testdir/test-1.tmp\"\
- #p\"$testdir/test-2.tmp\")"
+ #p\"$testdir/test-2.tmp\"\
+ #p\"$testdir/wild\\\\?test.tmp\")"
$SBCL <<EOF
(in-package :cl-user)
(let* ((directory (directory "./*.*"))
(format t "~&TRUENAMES=~S~%" truenames)
(finish-output)
(assert (equal truenames $expected_truenames)))
+ (assert (equal (truename "dirlinktest") #p"$testdir/"))
+ (assert (equal (truename "dirlinktest/") #p"$testdir/"))
(assert (equal (truename "test-1.tmp") #p"$testdir/test-1.tmp"))
(assert (equal (truename "link-1") #p"$testdir/test-1.tmp"))
(assert (equal (truename "link-2") #p"$testdir/test-2.tmp"))
mkdir animal/vertebrate/mammal/mythical
mkdir animal/vertebrate/mammal/rodent
mkdir animal/vertebrate/mammal/ruminant
+touch animal/vertebrate/mammal/platypus
+touch animal/vertebrate/mammal/walrus
touch animal/vertebrate/mammal/bear/grizzly
touch animal/vertebrate/mammal/mythical/mermaid
touch animal/vertebrate/mammal/mythical/unicorn
(defun absolutify (pathname)
"Convert a possibly-relative pathname to absolute."
(merge-pathnames pathname
- (make-pathname :directory
- (pathname-directory
- *default-pathname-defaults*))))
+ (make-pathname :directory
+ (pathname-directory
+ *default-pathname-defaults*))))
(defun sorted-truenamestrings (pathname-designators)
"Convert a collection of pathname designators into canonical form
using TRUENAME, NAMESTRING, and SORT."
(sort (mapcar #'namestring
- (mapcar #'truename
- pathname-designators))
- #'string<))
+ (mapcar #'truename
+ pathname-designators))
+ #'string<))
(defun need-match-1 (directory-pathname result-sorted-truenamestrings)
"guts of NEED-MATCH"
(let ((directory-sorted-truenamestrings (sorted-truenamestrings
- (directory directory-pathname))))
+ (directory directory-pathname))))
(unless (equal directory-sorted-truenamestrings
- result-sorted-truenamestrings)
+ result-sorted-truenamestrings)
(format t "~&~@<DIRECTORY argument = ~_~2I~S~:>~%"
- directory-pathname)
+ directory-pathname)
(format t "~&~@<DIRECTORY result = ~_~2I~S~:>~%"
- directory-sorted-truenamestrings)
+ directory-sorted-truenamestrings)
(format t "~&~@<expected result = ~_~2I~S.~:>~%"
- result-sorted-truenamestrings)
+ result-sorted-truenamestrings)
(error "mismatch between DIRECTORY and expected result"))))
(defun need-match (directory-pathname result-pathnames)
"Require that (DIRECTORY DIRECTORY-PATHNAME) return RESULT-PATHNAMES
;; "/usr/bin" instead of the CMU-CL-style "/usr/bin/". In that case,
;; s:/":": in most or all the NEED-MATCHes here.
(need-match "./*.*" '("animal/" "dirt" "plant/" "water"))
- ;; FIXME: (DIRECTORY "*.*") doesn't work (bug 139). And it looks as
- ;; though the same problem affects (DIRECTORY "animal") too.
- #+nil (need-match "*.*" '("animal/" "dirt" "plant/" "water"))
- #+nil (need-match "animal" '("animal/"))
+ (need-match "*.*" '("animal/" "dirt" "plant/" "water"))
+ (need-match "animal" '("animal/"))
(need-match "./animal" '("animal/"))
(need-match "animal/*.*" '("animal/invertebrate/" "animal/vertebrate/"))
(need-match "animal/*/*.*"
- '("animal/vertebrate/bird/"
- "animal/vertebrate/mammal/"
- "animal/vertebrate/snake/"))
+ '("animal/vertebrate/bird/"
+ "animal/vertebrate/mammal/"
+ "animal/vertebrate/snake/"))
(need-match "plant/*.*" '("plant/kingsfoil" "plant/pipeweed"))
(need-match "plant/**/*.*" '("plant/kingsfoil" "plant/pipeweed"))
(need-match "plant/**/**/*.*" '("plant/kingsfoil" "plant/pipeweed"))
(let ((vertebrates (mapcar (lambda (stem)
- (concatenate 'string
- "animal/vertebrate/"
- stem))
- '("bird/"
- "mammal/"
- "mammal/bear/" "mammal/bear/grizzly"
- "mammal/mythical/" "mammal/mythical/mermaid"
- "mammal/mythical/unicorn"
- "mammal/platypus"
- "mammal/rodent/" "mammal/rodent/beaver"
- "mammal/rodent/mouse" "mammal/rodent/rabbit"
- "mammal/rodent/rat"
- "mammal/ruminant/" "mammal/ruminant/cow"
- "mammal/walrus"
- "snake/" "snake/python"))))
+ (concatenate 'string
+ "animal/vertebrate/"
+ stem))
+ '("bird/"
+ "mammal/"
+ "mammal/bear/" "mammal/bear/grizzly"
+ "mammal/mythical/" "mammal/mythical/mermaid"
+ "mammal/mythical/unicorn"
+ "mammal/platypus"
+ "mammal/rodent/" "mammal/rodent/beaver"
+ "mammal/rodent/mouse" "mammal/rodent/rabbit"
+ "mammal/rodent/rat"
+ "mammal/ruminant/" "mammal/ruminant/cow"
+ "mammal/walrus"
+ "snake/" "snake/python"))))
(need-match "animal/vertebrate/**/*.*" vertebrates)
- ;; FIXME: In sbcl-0.pre7.109, DIRECTORY got confused on (I think...)
- ;; absolute pathnames containing "../*" stuff. If I understood
- ;; and remember correctly, CR's patch will fix this.
- #|
(need-match "animal/vertebrate/mammal/../**/*.*" vertebrates)
(need-match "animal/vertebrate/mammal/../**/**/*.*" vertebrates)
+ #+nil
(need-match "animal/vertebrate/mammal/mythical/../**/../**/*.*"
- vertebrates)
- |#
- )
+ vertebrates))
(need-match "animal/vertebrate/**/robot.*" nil)
(need-match "animal/vertebrate/mammal/../**/*.robot" nil)
(need-match "animal/vertebrate/mammal/../**/robot/*.*" nil)
+ #+nil
(need-match "animal/vertebrate/mammal/robot/../**/../**/*.*" nil))
(need-matches)
+(sb-ext:quit :unix-status 52)
EOF
+if [ $? != 52 ]; then
+ echo DIRECTORY/TRUENAME test part 1 failed, unexpected SBCL return code=$?
+ exit 1
+fi
cd ..
rm -r $testdir