Skip to content

Commit b5b03e6

Browse files
authored
Fix peek Char (#225)
1 parent d92fd8b commit b5b03e6

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

src/stream.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,8 @@ end
314314
# Read Functions
315315
# --------------
316316

317-
function Base.read(stream::TranscodingStream, ::Type{UInt8})
317+
# needed for `peek(stream, Char)` to work
318+
function Base.peek(stream::TranscodingStream, ::Type{UInt8})::UInt8
318319
# eof and ready_to_read! are inlined here because ready_to_read! is very slow and eof is broken
319320
eof = buffersize(stream.buffer1) == 0
320321
state = stream.state
@@ -325,7 +326,14 @@ function Base.read(stream::TranscodingStream, ::Type{UInt8})
325326
if eof && sloweof(stream)
326327
throw(EOFError())
327328
end
328-
return readbyte!(stream.buffer1)
329+
buf = stream.buffer1
330+
return buf.data[buf.bufferpos]
331+
end
332+
333+
function Base.read(stream::TranscodingStream, ::Type{UInt8})::UInt8
334+
x = peek(stream)
335+
consumed!(stream.buffer1, 1)
336+
x
329337
end
330338

331339
function Base.readuntil(stream::TranscodingStream, delim::UInt8; keep::Bool=false)

test/codecdoubleframe.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,16 @@ DoubleFrameDecoderStream(stream::IO; kwargs...) = TranscodingStream(DoubleFrameD
386386
@test_throws ErrorException("short write") flush(stream)
387387
end
388388

389+
@testset "peek" begin
390+
stream = DoubleFrameDecoderStream(DoubleFrameEncoderStream(IOBuffer(
391+
codeunits("こんにちは")
392+
)))
393+
@test peek(stream) == 0xe3
394+
@test peek(stream, Char) == ''
395+
@test peek(stream, Int32) == -476872221
396+
close(stream)
397+
end
398+
389399
test_roundtrip_read(DoubleFrameEncoderStream, DoubleFrameDecoderStream)
390400
test_roundtrip_write(DoubleFrameEncoderStream, DoubleFrameDecoderStream)
391401
test_roundtrip_lines(DoubleFrameEncoderStream, DoubleFrameDecoderStream)

test/codecnoop.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,4 +541,12 @@ using FillArrays: Zeros
541541
@test take!(sink) == b"abcd"
542542
end
543543

544+
@testset "peek" begin
545+
stream = NoopStream(IOBuffer(codeunits("こんにちは")))
546+
@test peek(stream) == 0xe3
547+
@test peek(stream, Char) == ''
548+
@test peek(stream, Int32) == -476872221
549+
close(stream)
550+
end
551+
544552
end

0 commit comments

Comments
 (0)