File tree Expand file tree Collapse file tree 3 files changed +27
-2
lines changed
Expand file tree Collapse file tree 3 files changed +27
-2
lines changed Original file line number Diff line number Diff line change @@ -83,6 +83,17 @@ def read(size = nil, buffer = nil)
8383 until @done
8484 fill_read_buffer
8585 end
86+
87+ if buffer
88+ buffer . replace ( @read_buffer )
89+ @read_buffer . clear
90+ else
91+ buffer = @read_buffer
92+ @read_buffer = StringBuffer . new
93+ end
94+
95+ # Read without size always returns a non-nil value, even if it is an empty string.
96+ return buffer
8697 end
8798
8899 return consume_read_buffer ( size , buffer )
Original file line number Diff line number Diff line change 11# Releases
22
3+ ## Unreleased
4+
5+ - Fix EOF behavior to match Ruby IO semantics: ` read() ` returns empty string ` "" ` at EOF while ` read(size) ` returns ` nil ` at EOF.
6+
37## v0.9.0
48
59 - Add support for ` buffer ` parameter in ` read ` , ` read_exactly ` , and ` read_partial ` methods to allow reading into a provided buffer.
Original file line number Diff line number Diff line change 139139 expect ( client . read ) . to be == "Hello World"
140140 expect ( client ) . to be ( :eof? )
141141 end
142-
142+
143+ it "reads until done" do
144+ server . close
145+
146+ # Subsequent reads should return nil:
147+ expect ( client . read ( 1 ) ) . to be_nil
148+
149+ # Reading with no length should return an empty string:
150+ expect ( client . read ) . to be == ""
151+ end
152+
143153 it "reads only the amount requested" do
144154 server . write "Hello World"
145155 server . close
@@ -714,7 +724,7 @@ def before
714724 with "#close" do
715725 it "should close the stream" do
716726 server . close
717- expect ( client . read ) . to be_nil
727+ expect ( client . read ) . to be == ""
718728
719729 expect ( server . closed? ) . to be_truthy
720730 expect ( client . closed? ) . to be_falsey
You can’t perform that action at this time.
0 commit comments