diff --git a/base/stream.jl b/base/stream.jl index 74147f2489605..53d4f724b1f9f 100644 --- a/base/stream.jl +++ b/base/stream.jl @@ -88,7 +88,7 @@ nb_available(s::LibuvStream) = nb_available(s.buffer) function eof(s::LibuvStream) if isopen(s) # fast path - nb_available(s) > 0 && return true + nb_available(s) > 0 && return false else return nb_available(s) <= 0 end @@ -1232,17 +1232,17 @@ write(s::BufferStream, c::Char) = write(s, string(c)) function write{T}(s::BufferStream, a::Array{T}) rv=write(s.buffer, a) !(s.buffer_writes) && notify(s.r_c; all=true); - rv + return rv end function write(s::BufferStream, p::Ptr, nb::Integer) rv=write(s.buffer, p, nb) !(s.buffer_writes) && notify(s.r_c; all=true); - rv + return rv end -function eof(s::LibuvStream) +function eof(s::BufferStream) wait_readnb(s,1) - !isopen(s) && nb_available(s)<=0 + return !isopen(s) && nb_available(s)<=0 end # If buffer_writes is called, it will delay notifying waiters till a flush is called. diff --git a/test/iobuffer.jl b/test/iobuffer.jl index 991d244676e22..f18ebc5e647b4 100644 --- a/test/iobuffer.jl +++ b/test/iobuffer.jl @@ -192,16 +192,22 @@ let bstream = BufferStream() @test isopen(bstream) @test isreadable(bstream) @test iswritable(bstream) + @test nb_available(bstream) == 0 @test sprint(io -> show(io,bstream)) == "BufferStream() bytes waiting:$(nb_available(bstream.buffer)), isopen:true" a = rand(UInt8,10) write(bstream,a) + @test !eof(bstream) flush(bstream) b = read(bstream,UInt8) @test a[1] == b b = read(bstream,UInt8) @test a[2] == b c = zeros(UInt8,8) + @test nb_available(bstream) == 8 + @test !eof(bstream) read!(bstream,c) @test c == a[3:10] close(bstream) + @test eof(bstream) + @test nb_available(bstream) == 0 end diff --git a/test/socket.jl b/test/socket.jl index bec98602da26d..43bc117e84400 100644 --- a/test/socket.jl +++ b/test/socket.jl @@ -268,3 +268,24 @@ let end [close(s) for s in [a, b, c]] end + +let P = Pipe() + Base.link_pipe(P) + write(P, "hello") + @test nb_available(P) == 0 + @test !eof(P) + @test read(P, Char) === 'h' + @test !eof(P) + @test read(P, Char) === 'e' + @test isopen(P) + close(P.in) + @test isopen(P) + @test !eof(P) + @test readuntil(P, 'o') == "llo" + @test isopen(P) + @test eof(P) + @test !isopen(P) + close(P) + @test !isopen(P) + @test eof(P) +end