chibi-scheme/lib/chibi/pathname-test.sld
Alex Shinn 00691b64f1 Making libraries portable where possible.
Many still import (chibi), and as (scheme base) is somewhat more
expensive to load at present these are changed to cond-expand.
Many libraries also rely on (srfi 33), and these have been changed
to a cond-expand first trying (srfi 60) where available.
Also fixing a few portability concerns (duplicate imports of the
same binding), and adding a few libraries missing from lib-tests.scm.
2015-04-26 16:17:38 +09:00

206 lines
7.1 KiB
Scheme

(define-library (chibi pathname-test)
(export run-tests)
(import (scheme base) (chibi pathname) (chibi test))
(begin
(define (run-tests)
(test-begin "pathname")
;; tests from the dirname(3) manpage
(test "dirname(3)" "/usr" (path-directory "/usr/lib"))
(test "lib" (path-strip-directory "/usr/lib"))
(test "/" (path-directory "/usr/"))
(test "" (path-strip-directory "/usr/"))
(test "." (path-directory "usr"))
(test "usr" (path-strip-directory "usr"))
(test "/" (path-directory "/"))
(test "" (path-strip-directory "/"))
(test "." (path-directory "."))
(test "." (path-strip-directory "."))
(test "." (path-directory ".."))
(test ".." (path-strip-directory ".."))
;; additional tests (should match GNU dirname/basename behavior)
(test "path-directory:border"
"/" (path-directory "//"))
(test "" (path-strip-directory "//"))
(test "." (path-directory ""))
(test "" (path-strip-directory ""))
(test "." (path-directory "../"))
(test "" (path-strip-directory "../"))
(test ".." (path-directory "../.."))
(test ".." (path-strip-directory "../.."))
(test "path-directory:extra"
"/usr/local" (path-directory "/usr/local/lib"))
(test "lib" (path-strip-directory "/usr/local/lib"))
(test "/usr" (path-directory "/usr/local/"))
(test "" (path-strip-directory "/usr/local/"))
(test "usr" (path-directory "usr/local"))
(test "local" (path-strip-directory "usr/local"))
(test "/" (path-directory "//usr"))
(test "usr" (path-strip-directory "//usr"))
(test "/" (path-directory "//usr/"))
(test "" (path-strip-directory "//usr/"))
(test "path-directory:small"
"/a" (path-directory "/a/b"))
(test "b" (path-strip-directory "/a/b"))
(test "a" (path-directory "a/b"))
(test "b" (path-strip-directory "a/b"))
(test "a" (path-directory "a/b/"))
(test "" (path-strip-directory "a/b/"))
(test "/a/b/c" (path-directory "/a/b/c/d"))
(test "d" (path-strip-directory "/a/b/c/d"))
(test "/a/b/c" (path-directory "/a/b/c/d/"))
(test "" (path-strip-directory "/a/b/c/d/"))
(test "a/b/c" (path-directory "a/b/c/d"))
(test "d" (path-strip-directory "a/b/c/d"))
(test "/a/b" (path-directory "/a/b/c.d"))
(test "c.d" (path-strip-directory "/a/b/c.d"))
(test "/a/b" (path-directory "/a/b/c.d/"))
(test "" (path-strip-directory "/a/b/c.d/"))
(test "/a/b/c" (path-directory "/a/b/c/."))
(test "." (path-strip-directory "/a/b/c/."))
(test "/a/b/c" (path-directory "/a/b/c/.."))
(test ".." (path-strip-directory "/a/b/c/.."))
(test "/a/b/." (path-directory "/a/b/./c"))
(test "c" (path-strip-directory "/a/b/./c"))
(test "/a/b/.." (path-directory "/a/b/../c"))
(test "c" (path-strip-directory "/a/b/../c"))
(test "/a/b" (path-directory "/a/b/c//"))
(test "" (path-strip-directory "/a/b/c//"))
(test "/a/b" (path-directory "/a/b//c///"))
(test "" (path-strip-directory "/a/b//c///"))
;; extensions
(test "path-extension" "scm" (path-extension "foo.scm"))
(test "foo" (path-strip-extension "foo.scm"))
(test "c" (path-extension "foo.scm.c"))
(test "foo.scm" (path-strip-extension "foo.scm.c"))
(test "scm" (path-extension "/home/me/foo.scm"))
(test "/home/me/foo" (path-strip-extension "/home/me/foo.scm"))
(test "scm" (path-extension "foo..scm"))
(test "foo." (path-strip-extension "foo..scm"))
(test "s" (path-extension "foo.s"))
(test "foo" (path-strip-extension "foo.s"))
(test #f (path-extension "foo."))
(test "foo." (path-strip-extension "foo."))
(test #f (path-extension "foo.scm."))
(test "foo.scm." (path-strip-extension "foo.scm."))
(test #f (path-extension "."))
(test "." (path-strip-extension "."))
(test #f (path-extension "a."))
(test "a." (path-strip-extension "a."))
(test #f (path-extension "/."))
(test "/." (path-strip-extension "/."))
(test #f (path-extension "foo.scm/"))
(test "foo.scm/" (path-strip-extension "foo.scm/"))
(test "path-replace-extension"
"foo.c" (path-replace-extension "foo.scm" "c"))
(test "foo.c" (path-replace-extension "foo" "c"))
;; absolute paths
(test-assert (path-absolute? "/"))
(test-assert (path-absolute? "//"))
(test-assert (path-absolute? "/usr"))
(test-assert (path-absolute? "/usr/"))
(test-assert (path-absolute? "/usr/."))
(test-assert (path-absolute? "/usr/.."))
(test-assert (path-absolute? "/usr/./"))
(test-assert (path-absolute? "/usr/../"))
(test-assert (not (path-absolute? "")))
(test-assert (not (path-absolute? ".")))
(test-assert (not (path-absolute? "usr")))
(test-assert (not (path-absolute? "usr/")))
;; normalization & building
(test "path-normalize" "/a/b/c/d/e" (path-normalize "/a/b/c/d/./e"))
(test "/a/b/c/d/e" (path-normalize "/a/b//.///c//d/./e"))
(test "/a/b/c/d/e/" (path-normalize "/a/b//.///c//d/./e/"))
(test "/a/c/d/e" (path-normalize "/a/b/../c/d/e"))
(test "/a/b/c/e" (path-normalize "/a/b//.///c//d/../e"))
(test "/a/c/e" (path-normalize "/a/b//..///c//d/../e"))
(test "/a/b/c/d/e/"
(path-normalize "/a/b//./../c/d/../../b//c/d/e/f/.."))
(test "/a/b/c/" (path-normalize "/a/b/c/."))
(test "path-normalize:border" "" (path-normalize ""))
(test "." (path-normalize "."))
(test "/" (path-normalize "/"))
(test "/" (path-normalize "/."))
(test "path-normalize:overflow"
"/" (path-normalize "/a/b/c/../../../../.."))
(test "../.." (path-normalize "a/b/c/../../../../.."))
(test "../../.." (path-normalize "../a/b/c/../../../../.."))
(test "" (path-strip-leading-parents ".."))
(test "" (path-strip-leading-parents "../"))
(test "a" (path-strip-leading-parents "../a"))
(test "a/b" (path-strip-leading-parents "../../a/b"))
(test "a/b" (path-strip-leading-parents "../../../a/b"))
(test "a/../b" (path-strip-leading-parents "../../../a/../b"))
(test "path-relative-to" "c" (path-relative-to "/a/b/c" "/a/b"))
(test "c" (path-relative-to "/a/b/c" "/a/b/"))
(test "." (path-relative-to "/a/b/" "/a/b/"))
(test "." (path-relative-to "/a/b/" "/a/b"))
(test "." (path-relative-to "/a/b" "/a/b/"))
(test "." (path-relative-to "/a/b" "/a/b"))
(test-not (path-relative-to "/d/a/b/c" "/a/b"))
(test "make-path" "a/b" (make-path "a" "b"))
(test "a/b" (make-path "a/" "b"))
(test "a/b/./c" (make-path "a" "b" "." "c"))
(test "a/b/../c" (make-path "a" "b" ".." "c"))
(test "a/b/c" (make-path "a" '("b" "c")))
(test "/" (make-path "/" ""))
(test "/" (make-path "/" "/"))
(test "/." (make-path "/" "."))
(test "/a" (make-path "/a" ""))
(test "/a" (make-path "/a" "/"))
(test "/a/." (make-path "/a" "."))
(test-end))))