Raymond Toy pushed to branch issue-140-stream-element-type-two-way-stream at cmucl / cmucl
Commits: 8144bada by Raymond Toy at 2022-11-22T07:43:26-08:00 Address review comments
Since `two-way-stream` isn't a `file-stream`, signal an error from `stream-external-format`.
Update the test to verify that `stream-external-format` for a `two-way-stream` signals a `type-error`.
Add a test for `broadcast-stream`s to verify that we return the format of the last stream.
- - - - -
2 changed files:
- src/code/stream.lisp - tests/issues.lisp
Changes:
===================================== src/code/stream.lisp ===================================== @@ -304,11 +304,7 @@ ;; Not defined by CLHS. What should happen if ;; (synonym-stream-symbol stream) is unbound? (stream-external-format - (symbol-value (synonym-stream-symbol stream)))) - (two-way-stream - ;; Not defined by CLHS, but use default for backward - ;; compatibility. - :default)) + (symbol-value (synonym-stream-symbol stream))))) ;; fundamental-stream :default))
===================================== tests/issues.lisp ===================================== @@ -747,9 +747,7 @@
;;; Test stream-external-format for various types of streams.
-;; Test two-way-stream where both streams have the same external -;; format. -(define-test issue.140.two-way-stream-same +(define-test issue.140.two-way-stream (:tag :issues) (with-open-file (in (merge-pathnames "issues.lisp" cmucl-test-runner::*load-path*) :direction :input @@ -759,21 +757,8 @@ :external-format :utf-8 :if-exists :supersede) (let ((two-way-stream (make-two-way-stream in out))) - (assert-equal :default (stream-external-format two-way-stream)))))) - -;; Test two-way-stream where the two streams have the different -;; external formats. -(define-test issue.140.two-way-stream-diff - (:tag :issues) - (with-open-file (in (merge-pathnames "issues.lisp" cmucl-test-runner::*load-path*) - :direction :input - :external-format :iso8859-1) - (with-open-file (out "/tmp/output.tst" - :direction :output - :external-format :utf-8 - :if-exists :supersede) - (let ((two-way-stream (make-two-way-stream in out))) - (assert-equal :default (stream-external-format two-way-stream)))))) + (assert-error 'type-error + (stream-external-format two-way-stream))))))
;; Test synonym-stream returns the format of the underlying stream. (define-test issue.140.synonym-stream @@ -785,6 +770,29 @@ (setf syn s) (assert-equal :iso8859-1 (stream-external-format syn)))))
+(define-test issue.140.broadcast-stream + (:tag :issues) + ;; Create 3 output streams. The exact external formats aren't + ;; really important here as long as they're different for each file + ;; so we can tell if we got the right answer. + (with-open-file (s1 "/tmp/broad-1" + :direction :output + :if-exists :supersede + :external-format :latin1) + (with-open-file (s2 "/tmp/broad-2" + :direction :output + :if-exists :supersede + :external-format :utf-8) + (with-open-file (s3 "/tmp/broad-3" + :direction :output + :if-exists :supersede + :external-format :utf-16) + ;; The format must be the value from the last stream. + (assert-equal :utf-16 + (stream-external-format + (make-broadcast-stream s1 s2 s3))))))) + + (define-test issue.150 (:tag :issues) (let ((ext:*gc-verbose* nil)
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/8144bada55b3ac9880c61067...