(assert (let ((buffer (make-array 10 :element-type '(unsigned-byte 8))))
(read-sequence buffer s))))
(delete-file pathname))
+
+(with-test (:name :delete-file-on-streams)
+ (with-open-file (f "delete-file-on-stream-test.tmp"
+ :direction :io)
+ (delete-file f)
+ #-win32
+ (progn
+ (write-line "still open" f)
+ (file-position f :start)
+ (assert (equal "still open" (read-line f)))))
+ (assert (not (probe-file "delete-file-on-stream-test.tmp"))))
\f
+;;; READ-CHAR-NO-HANG on bivalent streams (as returned by RUN-PROGRAM)
+;;; was wrong. CSR managed to promote the wrongness to all streams in
+;;; the 1.0.32.x series, breaking slime instantly.
+(with-test (:name :read-char-no-hang-after-unread-char)
+ (let* ((process (run-program "/bin/sh" '("-c" "echo a && sleep 10")
+ :output :stream :wait nil))
+ (stream (process-output process))
+ (char (read-char stream)))
+ (assert (char= char #\a))
+ (unread-char char stream)
+ (assert (char= (read-char stream) #\a))
+ (assert (char= (read-char stream) #\Newline))
+ (let ((time (get-universal-time)))
+ ;; no input, not yet known to be at EOF: should return
+ ;; immediately
+ (read-char-no-hang stream)
+ (assert (< (- (get-universal-time) time) 2)))))
+
;;; success