~ chicken-core (chicken-5) 773164a7d37f73cb2f0ee3cc813fb4d8620714f7


commit 773164a7d37f73cb2f0ee3cc813fb4d8620714f7
Author:     Mario Domenech Goulart <mario.goulart@gmail.com>
AuthorDate: Tue Jun 2 22:07:27 2015 -0300
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Fri Jun 12 16:32:21 2015 +1200

    Add test suite for find-files
    
    Signed-off-by: Evan Hanson <evhan@foldling.org>

diff --git a/distribution/manifest b/distribution/manifest
index a6323df7..e2dc40a5 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -137,6 +137,7 @@ tests/module-tests.scm
 tests/module-tests-2.scm
 tests/test-finalizers.scm
 tests/test-finalizers-2.scm
+tests/test-find-files.scm
 tests/module-tests-compiled.scm
 tests/scrutiny-tests.scm
 tests/scrutiny-tests-strict.scm
diff --git a/tests/runtests.bat b/tests/runtests.bat
index 44985608..c00e525a 100644
--- a/tests/runtests.bat
+++ b/tests/runtests.bat
@@ -428,6 +428,10 @@ echo 0 >tmpdir\.dotfile
 %interpret% -R posix -e "(delete-directory \"tmpdir\" #t)"
 if errorlevel 1 exit /b 1
 
+echo ======================================== find-files tests ...
+%interpret% -bnq test-find-files.scm
+if errorlevel 1 exit /b 1
+
 echo ======================================== regular expression tests ...
 %interpret% -bnq test-irregex.scm
 if errorlevel 1 exit /b 1
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 18dee088..e7be96fc 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -346,6 +346,9 @@ rm -fr tmpdir
 mkdir tmpdir
 touch tmpdir/.dotfile
 
+echo "======================================== find-files tests ..."
+$interpret -bnq test-find-files.scm
+
 if test -z "$MSYSTEM"; then
     ln -s /usr tmpdir/symlink
 fi
diff --git a/tests/test-find-files.scm b/tests/test-find-files.scm
new file mode 100644
index 00000000..10537686
--- /dev/null
+++ b/tests/test-find-files.scm
@@ -0,0 +1,160 @@
+(use posix)
+(include "test.scm")
+
+(handle-exceptions exn
+  'ignore
+  (delete-directory "find-files-test-dir" #t))
+
+(for-each (lambda (d)
+            (create-directory d #t))
+          '("find-files-test-dir/foo/bar/baz/.quux"
+            "find-files-test-dir/dir-link-target"
+            "find-files-test-dir/foo/.x"))
+
+(for-each (lambda (f)
+            (with-output-to-file f (cut display "")))
+          '("find-files-test-dir/file1"
+            "find-files-test-dir/file2"
+            "find-files-test-dir/dir-link-target/foo"
+            "find-files-test-dir/dir-link-target/bar"))
+
+(change-directory "find-files-test-dir")
+
+(create-symbolic-link "dir-link-target" "dir-link-name")
+
+(test-begin "find-files")
+
+(test-equal "no keyword args"
+            (find-files ".")
+            '("./foo/bar/baz"
+              "./foo/bar"
+              "./foo"
+              "./dir-link-target/foo"
+              "./dir-link-target/bar"
+              "./dir-link-target"
+              "./file1"
+              "./dir-link-name"
+              "./file2"))
+
+(test-equal "dotfiles: #t"
+            (find-files "." dotfiles: #t)
+            '("./foo/bar/baz/.quux"
+              "./foo/bar/baz"
+              "./foo/bar"
+              "./foo/.x"
+              "./foo"
+              "./dir-link-target/foo"
+              "./dir-link-target/bar"
+              "./dir-link-target"
+              "./file1"
+              "./dir-link-name"
+              "./file2"))
+
+(test-equal "follow-symlinks: #t"
+            (find-files "." follow-symlinks: #t)
+            '("./foo/bar/baz"
+              "./foo/bar"
+              "./foo"
+              "./dir-link-target/foo"
+              "./dir-link-target/bar"
+              "./dir-link-target"
+              "./file1"
+              "./dir-link-name/foo"
+              "./dir-link-name/bar"
+              "./dir-link-name"
+              "./file2"))
+
+(test-equal "limit: 1"
+            (find-files "." limit: 1)
+            '("./foo/bar"
+              "./foo"
+              "./dir-link-target/foo"
+              "./dir-link-target/bar"
+              "./dir-link-target"
+              "./file1"
+              "./dir-link-name"
+              "./file2"))
+
+(test-equal "limit: 1 follow-symlinks: #t"
+            (find-files "." limit: 1 follow-symlinks: #t)
+            '("./foo/bar"
+              "./foo"
+              "./dir-link-target/foo"
+              "./dir-link-target/bar"
+              "./dir-link-target"
+              "./file1"
+              "./dir-link-name/foo"
+              "./dir-link-name/bar"
+              "./dir-link-name"
+              "./file2"))
+
+(test-equal "limit: 2"
+            (find-files "." limit: 2)
+            '("./foo/bar/baz"
+              "./foo/bar"
+              "./foo"
+              "./dir-link-target/foo"
+              "./dir-link-target/bar"
+              "./dir-link-target"
+              "./file1"
+              "./dir-link-name"
+              "./file2"))
+
+(test-equal "limit: 2 follow-symlinks: #t"
+            (find-files "." limit: 2 follow-symlinks: #t)
+            '("./foo/bar/baz"
+              "./foo/bar"
+              "./foo"
+              "./dir-link-target/foo"
+              "./dir-link-target/bar"
+              "./dir-link-target"
+              "./file1"
+              "./dir-link-name/foo"
+              "./dir-link-name/bar"
+              "./dir-link-name"
+              "./file2"))
+
+(test-equal "test: (lambda (f) (directory? f))"
+            (find-files "." test: (lambda (f) (directory? f)))
+            '("./foo/bar/baz"
+              "./foo/bar"
+              "./foo"
+              "./dir-link-target"
+              "./dir-link-name"))
+
+(test-equal "test: (lambda (f) (directory? f)) action: (lambda (f p) (cons (string-append \"--\" f) p))"
+            (find-files "."
+                        test: (lambda (f) (directory? f))
+                        action: (lambda (f p) (cons (string-append "--" f) p)))
+            '("--./foo/bar/baz"
+              "--./foo/bar"
+              "--./foo"
+              "--./dir-link-target"
+              "--./dir-link-name"))
+
+(test-equal "dotfiles: #t test: (lambda (f) (directory? f)) follow-symlinks: #t"
+            (find-files "." dotfiles: #t test: (lambda (f) (directory? f)) follow-symlinks: #t)
+            '("./foo/bar/baz/.quux"
+              "./foo/bar/baz"
+              "./foo/bar"
+              "./foo/.x"
+              "./foo"
+              "./dir-link-target"
+              "./dir-link-name"))
+
+(test-equal "dotfiles: #t test: (lambda (f) (directory? f)) follow-symlinks: #t limit: 1"
+            (find-files "."
+                        dotfiles: #t
+                        test: (lambda (f) (directory? f))
+                        follow-symlinks: #t
+                        limit: 1)
+            '("./foo/bar"
+              "./foo/.x"
+              "./foo"
+              "./dir-link-target"
+              "./dir-link-name"))
+
+(test-end "find-files")
+
+(change-directory "..")
+(delete-directory "find-files-test-dir" #t)
Trap