File tree Expand file tree Collapse file tree 3 files changed +47
-18
lines changed Expand file tree Collapse file tree 3 files changed +47
-18
lines changed Original file line number Diff line number Diff line change @@ -64,18 +64,30 @@ function Base.position(stream::NoopStream)
64
64
end
65
65
66
66
function Base. seek (stream:: NoopStream , pos:: Integer )
67
+ mode = stream. state. mode
68
+ if mode === :write
69
+ flushbuffer (stream)
70
+ end
67
71
seek (stream. stream, pos)
68
72
initbuffer! (stream. buffer1)
69
73
return stream
70
74
end
71
75
72
76
function Base. seekstart (stream:: NoopStream )
77
+ mode = stream. state. mode
78
+ if mode === :write
79
+ flushbuffer (stream)
80
+ end
73
81
seekstart (stream. stream)
74
82
initbuffer! (stream. buffer1)
75
83
return stream
76
84
end
77
85
78
86
function Base. seekend (stream:: NoopStream )
87
+ mode = stream. state. mode
88
+ if mode === :write
89
+ flushbuffer (stream)
90
+ end
79
91
seekend (stream. stream)
80
92
initbuffer! (stream. buffer1)
81
93
return stream
Original file line number Diff line number Diff line change 335
335
end
336
336
end
337
337
338
- @testset " seekstart doesn't delete data" begin
338
+ @testset " seek doesn't delete data" begin
339
339
sink = IOBuffer ()
340
340
stream = NoopStream (sink, bufsize= 16 )
341
341
write (stream, " x" )
342
- # seekstart must not delete user data even if it errors.
343
- try
344
- seekstart (stream)
345
- catch e
346
- e isa ArgumentError || rethrow ()
347
- end
348
- write (stream, TranscodingStreams. TOKEN_END)
342
+ seekstart (stream)
349
343
flush (stream)
350
- @test_broken take! (sink) == b " x"
344
+ @test take! (sink) == b " x"
351
345
close (stream)
346
+
347
+ op_expected = [
348
+ (seekstart, b " dbc" ),
349
+ (seekend, b " abcd" ),
350
+ (Base. Fix2 (seek, 1 ), b " adc" ),
351
+ ]
352
+ @testset " $op " for (op, expected) in op_expected
353
+ sink = IOBuffer ()
354
+ stream = NoopStream (sink, bufsize= 16 )
355
+ write (stream, " abc" )
356
+ @test op (stream) === stream
357
+ write (stream, " d" )
358
+ flush (stream)
359
+ @test take! (sink) == expected
360
+ close (stream)
361
+ end
352
362
end
353
363
end
Original file line number Diff line number Diff line change @@ -124,15 +124,22 @@ end
124
124
end
125
125
126
126
@testset " seekstart doesn't delete data" begin
127
- sink = IOBuffer ()
128
- stream = TranscodingStream (QuadrupleCodec (), sink, bufsize= 16 )
129
- write (stream, " x" )
130
- # seekstart must not delete user data even if it errors.
131
- @test_throws ArgumentError seekstart (stream)
132
- write (stream, TranscodingStreams. TOKEN_END)
133
- flush (stream)
134
- @test take! (sink) == b " xxxx"
135
- close (stream)
127
+ for n in 0 : 3
128
+ sink = IOBuffer ()
129
+ # wrap stream in NoopStream n times.
130
+ stream = foldl (
131
+ (s,_) -> NoopStream (s),
132
+ 1 : n;
133
+ init= TranscodingStream (QuadrupleCodec (), sink, bufsize= 16 )
134
+ )
135
+ write (stream, " x" )
136
+ # seekstart must not delete user data even if it errors.
137
+ @test_throws ArgumentError seekstart (stream)
138
+ write (stream, TranscodingStreams. TOKEN_END)
139
+ flush (stream)
140
+ @test take! (sink) == b " xxxx"
141
+ close (stream)
142
+ end
136
143
end
137
144
138
145
@testset " eof is true after write" begin
You can’t perform that action at this time.
0 commit comments