The preferred activity in your design is more like for-each family, say, handle the result inside the proc without return result. So maybe it should be named as for-each-*-in-file, which is more understandable in the first glance.
From 258d20a9665e6f845a167258c33374a00e734885 Mon Sep 17 00:00:00 2001
From: AwesomeAdam54321 <adam.faiz@disroot.org>
Date: Tue, 17 Dec 2024 12:20:52 +0800
Subject: [PATCH] test-suite: Add tests for `for-rdelim-in-port`-related
functions.
* test-suite/tests/ports.test: Add test cases for
`for-delimited-in-port` and `for-line-in-file`.
---
test-suite/tests/ports.test | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/test-suite/tests/ports.test b/test-suite/tests/ports.test
index bec5e356c..15d515f1f 100644
--- a/test-suite/tests/ports.test
+++ b/test-suite/tests/ports.test
@@ -2089,6 +2089,28 @@
(not (string-index (%search-load-path (basename (test-file)))
#\\))))))
+(let ((lst '())
+ (lines '())
+ (string "line1\nline2\nline3")
+ (filename (test-file)))
+ (call-with-input-string
+ "A\0B\0C"
+ (lambda (port)
+ (pass-if "for-delimited-in-port returns true upon completion"
+ (for-delimited-in-port port
+ (lambda (entry)
+ (set! lst (cons entry lst)))
+ #:delims "\0")
+ (equal? lst '("C" "B" "A")))))
+ (let ((port (open-output-file filename)))
+ (display string port)
+ (close-port port))
+ (pass-if "for-line-in-file returns true upon completion"
+ (for-line-in-file filename
+ (lambda (line)
+ (set! lines (cons line lines))))
+ (equal? lines '("line3" "line2" "line1"))))
+
(delete-file (test-file))
;;; Local Variables:
--
2.46.0