Skip to content

Commit 39409a5

Browse files
authored
Implement isreadable and iswritable (#185)
1 parent 3c187f4 commit 39409a5

File tree

3 files changed

+30
-11
lines changed

3 files changed

+30
-11
lines changed

ext/TestExt.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ function TranscodingStreams.test_chunked_read(Encoder, Decoder)
9090
stream = TranscodingStream(Decoder(), buffer, stop_on_end=true)
9191
ok &= hash(read(stream)) == hash(chunk)
9292
ok &= eof(stream)
93+
ok &= isreadable(stream)
9394
close(stream)
9495
end
9596
Test.@test ok

src/stream.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ julia> using TranscodingStreams
103103
104104
julia> file = open(joinpath(dirname(dirname(pathof(TranscodingStreams))), "README.md"));
105105
106-
julia> stream = NoopStream(file);
106+
julia> stream = TranscodingStream(Noop(), file);
107107
108108
julia> readline(file)
109109
"TranscodingStreams.jl"
@@ -182,6 +182,16 @@ function Base.isopen(stream::TranscodingStream)
182182
return stream.state.mode != :close && stream.state.mode != :panic
183183
end
184184

185+
function Base.isreadable(stream::TranscodingStream)::Bool
186+
mode = stream.state.mode
187+
(mode === :idle || mode === :read || mode === :stop) && isreadable(stream.stream)
188+
end
189+
190+
function Base.iswritable(stream::TranscodingStream)::Bool
191+
mode = stream.state.mode
192+
(mode === :idle || mode === :write) && iswritable(stream.stream)
193+
end
194+
185195
function Base.close(stream::TranscodingStream)
186196
mode = stream.state.mode
187197
if mode != :panic

test/codecnoop.jl

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -240,18 +240,26 @@
240240
TranscodingStreams.test_roundtrip_write(NoopStream, NoopStream)
241241
TranscodingStreams.test_roundtrip_lines(NoopStream, NoopStream)
242242

243-
# switch write => read
244-
stream = NoopStream(IOBuffer(b"foobar", read=true, write=true))
245-
@test_throws ArgumentError begin
246-
write(stream, b"xyz")
247-
read(stream, 3)
243+
@testset "switch write => read" begin
244+
stream = NoopStream(IOBuffer(collect(b"foobar"), read=true, write=true))
245+
@test isreadable(stream)
246+
@test iswritable(stream)
247+
@test_throws ArgumentError begin
248+
write(stream, b"xyz")
249+
read(stream, 3)
250+
end
251+
@test !isreadable(stream)
252+
@test iswritable(stream)
248253
end
249254

250-
# switch read => write
251-
stream = NoopStream(IOBuffer(b"foobar", read=true, write=true))
252-
@test_throws ArgumentError begin
253-
read(stream, 3)
254-
write(stream, b"xyz")
255+
@testset "switch read => write" begin
256+
stream = NoopStream(IOBuffer(collect(b"foobar"), read=true, write=true))
257+
@test_throws ArgumentError begin
258+
read(stream, 3)
259+
write(stream, b"xyz")
260+
end
261+
@test isreadable(stream)
262+
@test !iswritable(stream)
255263
end
256264

257265
stream = NoopStream(IOBuffer(""))

0 commit comments

Comments
 (0)