USING: destructors kernel tools.test continuations accessors
-namespaces sequences ;
+namespaces sequences destructors.private ;
IN: destructors.tests
TUPLE: dispose-error ;
] ignore-errors destroyed?>>
] unit-test
+TUPLE: silly-disposable < disposable ;
+
+M: silly-disposable dispose* drop ;
+
+silly-disposable new-disposable "s" set
+"s" get dispose
+[ "s" get unregister-disposable ]
+[ disposable>> silly-disposable? ]
+must-fail-with
disposables get conjoin ;
: unregister-disposable ( obj -- )
- disposables get 2dup key? [ already-unregistered ] unless delete-at ;
+ disposables get 2dup key? [ delete-at ] [ drop already-unregistered ] if ;
PRIVATE>
dup disposed>> [ drop ] [ t >>disposed dispose* ] if ;
M: disposable dispose
- [ unregister-disposable ] [ call-next-method ] bi ;
+ dup disposed>> [ drop ] [
+ [ unregister-disposable ]
+ [ call-next-method ]
+ bi
+ ] if ;
: dispose-each ( seq -- )
[
"non-byte-array-error" unique-file binary [
"" write
] with-file-writer
-] [ no-method? ] must-fail-with
\ No newline at end of file
+] [ no-method? ] must-fail-with
+
+! What happens if we close a file twice?
+[ ] [
+ "closing-twice" unique-file ascii <file-writer>
+ [ dispose ] [ dispose ] bi
+] unit-test
\ No newline at end of file