1 USING: io.streams.duplex io kernel continuations tools.test ;
4 ! Test duplex stream close behavior
5 TUPLE: closing-stream closed? ;
7 : <closing-stream> closing-stream construct-empty ;
9 M: closing-stream stream-close
10 dup closing-stream-closed? [
11 "Closing twice!" throw
13 t swap set-closing-stream-closed?
16 TUPLE: unclosable-stream ;
18 : <unclosable-stream> unclosable-stream construct-empty ;
20 M: unclosable-stream stream-close
21 "Can't close me!" throw ;
24 <closing-stream> <closing-stream> <duplex-stream>
25 dup stream-close stream-close
29 <unclosable-stream> <closing-stream> [
31 [ dup stream-close ] catch 2drop
32 ] keep closing-stream-closed?
36 <closing-stream> [ <unclosable-stream>
38 [ dup stream-close ] catch 2drop
39 ] keep closing-stream-closed?