summaryrefslogtreecommitdiffstats
path: root/tests/018
diff options
context:
space:
mode:
Diffstat (limited to 'tests/018')
-rw-r--r--tests/018/close-delegate.expected5
-rw-r--r--tests/018/close-delegate.tl20
2 files changed, 24 insertions, 1 deletions
diff --git a/tests/018/close-delegate.expected b/tests/018/close-delegate.expected
index 227f9f67..de68447f 100644
--- a/tests/018/close-delegate.expected
+++ b/tests/018/close-delegate.expected
@@ -1,3 +1,6 @@
close called, count 2
close called, count 1
-20
+40
+close called, count 2
+close called, count 1
+40
diff --git a/tests/018/close-delegate.tl b/tests/018/close-delegate.tl
index 4cf1d650..64a1dc91 100644
--- a/tests/018/close-delegate.tl
+++ b/tests/018/close-delegate.tl
@@ -18,3 +18,23 @@
(get-lines s))
len
prinl)
+
+(defstruct refcount-close-alt stream-wrap
+ stream
+ (count 1)
+
+ (:method close (me throw-on-error-p)
+ (put-line `close called, count @{me.count}`)
+ (when (plusp me.count)
+ (if (zerop (dec me.count))
+ (close-stream me.stream throw-on-error-p)
+ :))))
+
+(flow
+ (with-stream (s (make-struct-delegate-stream
+ (new refcount-close-alt
+ count 2
+ stream (open-file *load-path*))))
+ (get-lines s))
+ len
+ prinl)