]> gitweb.factorcode.org Git - factor.git/blob - core/io/streams/duplex/duplex-tests.factor
Initial import
[factor.git] / core / io / streams / duplex / duplex-tests.factor
1 USING: io.streams.duplex io kernel continuations tools.test ;
2 IN: temporary
3
4 ! Test duplex stream close behavior
5 TUPLE: closing-stream closed? ;
6
7 : <closing-stream> closing-stream construct-empty ;
8
9 M: closing-stream stream-close
10     dup closing-stream-closed? [
11         "Closing twice!" throw
12     ] [
13         t swap set-closing-stream-closed?
14     ] if ;
15
16 TUPLE: unclosable-stream ;
17
18 : <unclosable-stream> unclosable-stream construct-empty ;
19
20 M: unclosable-stream stream-close
21     "Can't close me!" throw ;
22
23 [ ] [
24     <closing-stream> <closing-stream> <duplex-stream>
25     dup stream-close stream-close
26 ] unit-test
27
28 [ t ] [
29     <unclosable-stream> <closing-stream> [
30         <duplex-stream>
31         [ dup stream-close ] catch 2drop
32     ] keep closing-stream-closed?
33 ] unit-test
34
35 [ t ] [
36     <closing-stream> [ <unclosable-stream>
37         <duplex-stream>
38         [ dup stream-close ] catch 2drop
39     ] keep closing-stream-closed?
40 ] unit-test