Skip to content

Commit 17da91f

Browse files
committed
Merge branch '10-forward-pipereader-seekasync-on-completed-readresult-ends-with-exception' into 'master'
Resolve "Forward PipeReader.SeekAsync on completed ReadResult ends with exception" Closes kaitai-io#10 See merge request marta/kaitai_struct_csharp_runtime!20
2 parents 3f11b47 + c36377d commit 17da91f

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Kaitai.Struct.Runtime.Async.Tests/KaitaiAsyncStreamBaseTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.IO;
33
using System.IO.Pipelines;
4+
using System.Threading;
45
using System.Threading.Tasks;
56
using Kaitai.Async;
67
using Xunit;
@@ -115,6 +116,24 @@ await EvaluateMaybeCancelled(async () =>
115116
});
116117
}
117118

119+
[Fact]
120+
public async Task ForwardSeek_AfterReadToEndAndBackwardSeek_Test()
121+
{
122+
const int toRead = 1;
123+
124+
var kaitaiStreamSUT = Create(new byte[2]);
125+
126+
await EvaluateMaybeCancelled(async () =>
127+
{
128+
// Simulates kaitai compiler generated code for multiple fields defined as `instances`
129+
await kaitaiStreamSUT.ReadBytesFullAsync(CancellationToken.None);
130+
await kaitaiStreamSUT.SeekAsync(0);
131+
await kaitaiStreamSUT.SeekAsync(toRead);
132+
133+
Assert.Equal(toRead, kaitaiStreamSUT.Pos);
134+
});
135+
}
136+
118137
[Theory]
119138
[InlineData(0)]
120139
[InlineData(1)]

Kaitai.Struct.Runtime.Async/ReaderContext/PipeReaderContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public virtual async ValueTask SeekAsync(long position, CancellationToken cancel
5858
ReadResult = await PipeReader.ReadAsync(cancellationToken);
5959
}
6060

61-
if (ReadResult.Buffer.Length <= position)
61+
if (ReadResult.Buffer.Length >= position)
6262
{
6363
Position = position;
6464
return;

0 commit comments

Comments
 (0)