summaryrefslogtreecommitdiff
path: root/test-suite/tests/filesys.test
diff options
context:
space:
mode:
Diffstat (limited to 'test-suite/tests/filesys.test')
-rw-r--r--test-suite/tests/filesys.test41
1 files changed, 41 insertions, 0 deletions
diff --git a/test-suite/tests/filesys.test b/test-suite/tests/filesys.test
index 6fed981e5..6b09a2ba0 100644
--- a/test-suite/tests/filesys.test
+++ b/test-suite/tests/filesys.test
@@ -1,6 +1,7 @@
;;;; filesys.test --- test file system functions -*- scheme -*-
;;;;
;;;; Copyright (C) 2004, 2006, 2013, 2019, 2021 Free Software Foundation, Inc.
+;;;; Copyright (C) 2021 Maxime Devos <maximedevos@telenet.be>
;;;;
;;;; This library is free software; you can redistribute it and/or
;;;; modify it under the terms of the GNU Lesser General Public
@@ -265,3 +266,43 @@
(result (eqv? 'directory (stat:type _stat))))
(false-if-exception (rmdir name))
result)))))
+
+(with-test-prefix "chdir"
+ (pass-if-equal "current directory" (getcwd)
+ (begin (chdir ".") (getcwd)))
+ (define file (search-path %load-path "ice-9/boot-9.scm"))
+
+
+ (pass-if-equal "test directory" (dirname file)
+ (let ((olddir (getcwd))
+ (dir #f))
+ (chdir (dirname file))
+ (set! dir (getcwd))
+ (chdir olddir)
+ dir))
+
+ (pass-if-equal "test directory, via port" (dirname file)
+ (unless (provided? 'chdir-port)
+ (throw 'unresolved))
+ (let ((olddir (getcwd))
+ (port (open (dirname file) O_RDONLY))
+ (dir #f))
+ (chdir port)
+ (set! dir (getcwd))
+ (chdir olddir)
+ dir))
+
+ (pass-if-exception "closed port" exception:wrong-type-arg
+ (unless (provided? 'chdir-port)
+ (throw 'unresolved))
+ (let ((port (open (dirname file) O_RDONLY))
+ (olddir (getcwd)))
+ (close-port port)
+ (chdir port)
+ (chdir olddir))) ; should not be reached
+
+ (pass-if-exception "not a port or file name" exception:wrong-type-arg
+ (chdir '(stuff)))
+
+ (pass-if-exception "non-file port" exception:wrong-type-arg
+ (chdir (open-input-string ""))))