0.8.6.13:
[sbcl.git] / tests / stream.impure.lisp
index d3f3adf..71a7a8c 100644 (file)
     (assert (= (read-byte s) -1)))
   (delete-file p))
 \f
+;;; :IF-EXISTS got :ERROR and NIL the wrong way round (reported by
+;;; Milan Zamazal)
+(let* ((p "this-file-will-exist")
+       (stream (open p :direction :output :if-exists :error)))
+  (assert (null (with-open-file (s p :direction :output :if-exists nil) s)))
+  (assert (raises-error?
+          (with-open-file (s p :direction :output :if-exists :error))))
+  (close stream)
+  (delete-file p))
+\f
+(assert (raises-error? (read-byte (make-string-input-stream "abc"))
+                      type-error))
+(assert (raises-error? (with-open-file (s "/dev/zero")
+                        (read-byte s))
+                      type-error))
+;;; bidirectional streams getting confused about their position
+(let ((p "bidirectional-stream-test"))
+  (with-open-file (s p :direction :output :if-exists :supersede)
+    (with-standard-io-syntax
+      (format s "~S ~S ~S~%" 'these 'are 'symbols)))
+  (with-open-file (s p :direction :io :if-exists :overwrite)
+    (read s)
+    (with-standard-io-syntax
+      (prin1 'insert s)))
+  (with-open-file (s p)
+    (assert (string= (read-line s) "THESE INSERTMBOLS")))
+  (delete-file p))
 ;;; success
 (quit :unix-status 104)