-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3 from pluskal/PipeReader
Pipe reader
- Loading branch information
Showing
18 changed files
with
1,143 additions
and
780 deletions.
There are no files selected for viewing
196 changes: 107 additions & 89 deletions
196
Kaitai.Struct.Runtime.Async.Tests/KaitaiAsyncStreamBaseTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,97 +1,115 @@ | ||
using System.Threading.Tasks; | ||
using System.IO; | ||
using System.Threading.Tasks; | ||
using Kaitai.Async; | ||
using Xunit; | ||
|
||
namespace Kaitai.Struct.Runtime.Async.Tests | ||
{ | ||
public class KaitaiAsyncStreamBaseTests | ||
public class StreamKaitaiAsyncStreamBaseTests : KaitaiAsyncStreamBaseTests | ||
{ | ||
[Fact] | ||
public async Task AlignToByte_Test() | ||
{ | ||
//Arrange | ||
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[]{0b_1000_0000}); | ||
|
||
var read = await kaitaiStreamSUT.ReadBitsIntAsync(1); | ||
Assert.Equal(1u, read); | ||
|
||
//Act | ||
kaitaiStreamSUT.AlignToByte(); | ||
//Assert | ||
Assert.Equal(1, kaitaiStreamSUT.Pos); | ||
} | ||
|
||
[Theory] | ||
[InlineData(true, 0, 0)] | ||
[InlineData(false, 1, 0)] | ||
[InlineData(false, 1, 1)] | ||
[InlineData(false, 1, 2)] | ||
[InlineData(false, 1, 3)] | ||
[InlineData(false, 1, 4)] | ||
[InlineData(false, 1, 5)] | ||
[InlineData(false, 1, 6)] | ||
[InlineData(false, 1, 7)] | ||
[InlineData(true, 1, 8)] | ||
public async Task Eof_Test(bool shouldBeEof, int streamSize, int readBitsAmount) | ||
{ | ||
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[streamSize]); | ||
|
||
await kaitaiStreamSUT.ReadBitsIntAsync(readBitsAmount); | ||
|
||
if (shouldBeEof) | ||
Assert.True(kaitaiStreamSUT.IsEof); | ||
else | ||
Assert.False(kaitaiStreamSUT.IsEof); | ||
} | ||
|
||
[Theory] | ||
[InlineData(0, 0)] | ||
[InlineData(1, 1)] | ||
public async Task Pos_ByRead_Test(int expectedPos, int readBitsAmount) | ||
{ | ||
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[1]); | ||
|
||
await kaitaiStreamSUT.ReadBytesAsync(readBitsAmount); | ||
|
||
Assert.Equal(expectedPos, kaitaiStreamSUT.Pos); | ||
} | ||
|
||
[Theory] | ||
[InlineData(0, 0)] | ||
[InlineData(1, 1)] | ||
public async Task Pos_BySeek_Test(int expectedPos, int position) | ||
{ | ||
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[1]); | ||
|
||
await kaitaiStreamSUT.SeekAsync(position); | ||
|
||
Assert.Equal(expectedPos, kaitaiStreamSUT.Pos); | ||
} | ||
|
||
[Theory] | ||
[InlineData(0)] | ||
[InlineData(1)] | ||
public void Size_Test(int streamSize) | ||
{ | ||
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[streamSize]); | ||
|
||
Assert.Equal(streamSize, kaitaiStreamSUT.Size); | ||
} | ||
|
||
[Fact] | ||
public void EmptyStream_NoRead_NoSeek_IsEof_ShouldBe_True() | ||
{ | ||
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[0]); | ||
|
||
Assert.True(kaitaiStreamSUT.IsEof); | ||
} | ||
|
||
[Fact] | ||
public void EmptyStream_NoRead_NoSeek_Pos_ShouldBe_0() | ||
{ | ||
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[0]); | ||
|
||
Assert.Equal(0, kaitaiStreamSUT.Pos); | ||
} | ||
protected override KaitaiAsyncStream Create(byte[] data) => new KaitaiAsyncStream(data); | ||
} | ||
|
||
public class PipeReaderKaitaiAsyncStreamBaseTests : KaitaiAsyncStreamBaseTests | ||
{ | ||
protected override KaitaiAsyncStream Create(byte[] data) => | ||
new KaitaiAsyncStream(System.IO.Pipelines.PipeReader.Create(new MemoryStream(data))); | ||
} | ||
|
||
public abstract class KaitaiAsyncStreamBaseTests | ||
{ | ||
protected abstract KaitaiAsyncStream Create(byte[] data); | ||
|
||
[Theory] | ||
[InlineData(true, 0, 0)] | ||
[InlineData(false, 1, 0)] | ||
[InlineData(false, 1, 1)] | ||
[InlineData(false, 1, 2)] | ||
[InlineData(false, 1, 3)] | ||
[InlineData(false, 1, 4)] | ||
[InlineData(false, 1, 5)] | ||
[InlineData(false, 1, 6)] | ||
[InlineData(false, 1, 7)] | ||
[InlineData(true, 1, 8)] | ||
public async Task Eof_Test(bool shouldBeEof, int streamSize, int readBitsAmount) | ||
{ | ||
var kaitaiStreamSUT = Create(new byte[streamSize]); | ||
|
||
await kaitaiStreamSUT.ReadBitsIntAsync(readBitsAmount); | ||
|
||
if (shouldBeEof) | ||
{ | ||
Assert.True(kaitaiStreamSUT.IsEof); | ||
} | ||
else | ||
{ | ||
Assert.False(kaitaiStreamSUT.IsEof); | ||
} | ||
} | ||
|
||
[Theory] | ||
[InlineData(0, 0)] | ||
[InlineData(1, 1)] | ||
public async Task Pos_ByRead_Test(int expectedPos, int readBitsAmount) | ||
{ | ||
var kaitaiStreamSUT = Create(new byte[1]); | ||
|
||
await kaitaiStreamSUT.ReadBytesAsync(readBitsAmount); | ||
|
||
Assert.Equal(expectedPos, kaitaiStreamSUT.Pos); | ||
} | ||
|
||
[Theory] | ||
[InlineData(0, 0)] | ||
[InlineData(1, 1)] | ||
public async Task Pos_BySeek_Test(int expectedPos, int position) | ||
{ | ||
var kaitaiStreamSUT = Create(new byte[1]); | ||
|
||
await kaitaiStreamSUT.SeekAsync(position); | ||
|
||
Assert.Equal(expectedPos, kaitaiStreamSUT.Pos); | ||
} | ||
|
||
[Theory] | ||
[InlineData(0)] | ||
[InlineData(1)] | ||
public void Size_Test(int streamSize) | ||
{ | ||
var kaitaiStreamSUT = Create(new byte[streamSize]); | ||
|
||
Assert.Equal(streamSize, kaitaiStreamSUT.Size); | ||
} | ||
|
||
[Fact] | ||
public async Task AlignToByte_Test() | ||
{ | ||
//Arrange | ||
var kaitaiStreamSUT = Create(new byte[] {0b_1000_0000}); | ||
|
||
ulong read = await kaitaiStreamSUT.ReadBitsIntAsync(1); | ||
Assert.Equal(1u, read); | ||
|
||
//Act | ||
kaitaiStreamSUT.AlignToByte(); | ||
//Assert | ||
Assert.Equal(1, kaitaiStreamSUT.Pos); | ||
} | ||
|
||
[Fact] | ||
public void EmptyStream_NoRead_NoSeek_IsEof_ShouldBe_True() | ||
{ | ||
var kaitaiStreamSUT = Create(new byte[0]); | ||
|
||
Assert.True(kaitaiStreamSUT.IsEof); | ||
} | ||
|
||
[Fact] | ||
public void EmptyStream_NoRead_NoSeek_Pos_ShouldBe_0() | ||
{ | ||
var kaitaiStreamSUT = Create(new byte[0]); | ||
|
||
Assert.Equal(0, kaitaiStreamSUT.Pos); | ||
} | ||
} | ||
} |
48 changes: 29 additions & 19 deletions
48
Kaitai.Struct.Runtime.Async.Tests/KaitaiAsyncStructTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,38 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Text; | ||
using System.IO; | ||
using Kaitai.Async; | ||
using Xunit; | ||
|
||
namespace Kaitai.Struct.Runtime.Async.Tests | ||
{ | ||
|
||
public class KaitaiAsyncStructTests | ||
public class StreamKaitaiAsyncStructTests : KaitaiAsyncStructTests | ||
{ | ||
protected override KaitaiAsyncStream Create(byte[] data) => new KaitaiAsyncStream(data); | ||
} | ||
|
||
public class PipeReaderKaitaiAsyncStructTests : KaitaiAsyncStructTests | ||
{ | ||
protected override KaitaiAsyncStream Create(byte[] data) => | ||
new KaitaiAsyncStream(System.IO.Pipelines.PipeReader.Create(new MemoryStream(data))); | ||
} | ||
|
||
public abstract class KaitaiAsyncStructTests | ||
{ | ||
protected abstract KaitaiAsyncStream Create(byte[] data); | ||
|
||
private class FooKaitaiAsyncStruct : KaitaiAsyncStruct | ||
{ | ||
[Fact] | ||
public void M_Io_IsSet() | ||
{ | ||
var kaitaiAsyncStream = new KaitaiAsyncStream(new byte[0]); | ||
var kaitaiAsyncStructSUT = new FooKaitaiAsyncStruct(kaitaiAsyncStream); | ||
public FooKaitaiAsyncStruct(KaitaiAsyncStream kaitaiStream) : base(kaitaiStream) | ||
{ | ||
} | ||
} | ||
|
||
Assert.Equal(kaitaiAsyncStream, kaitaiAsyncStructSUT.M_Io); | ||
} | ||
[Fact] | ||
public void M_Io_IsSet() | ||
{ | ||
var kaitaiAsyncStream = Create(new byte[0]); | ||
var kaitaiAsyncStructSUT = new FooKaitaiAsyncStruct(kaitaiAsyncStream); | ||
|
||
private class FooKaitaiAsyncStruct : KaitaiAsyncStruct | ||
{ | ||
public FooKaitaiAsyncStruct(KaitaiAsyncStream kaitaiStream) : base(kaitaiStream) | ||
{ | ||
} | ||
} | ||
Assert.Equal(kaitaiAsyncStream, kaitaiAsyncStructSUT.M_Io); | ||
} | ||
} | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
using System.IO; | ||
using System.Threading.Tasks; | ||
using Kaitai.Async; | ||
using Xunit; | ||
|
||
namespace Kaitai.Struct.Runtime.Async.Tests | ||
{ | ||
public class StreamKaitaiReadBitsAsyncTests : ReadBitsAsyncTests | ||
{ | ||
protected override KaitaiAsyncStream Create(byte[] data) => new KaitaiAsyncStream(data); | ||
} | ||
|
||
public class PipeReaderReadBitsAsyncTests : ReadBitsAsyncTests | ||
{ | ||
protected override KaitaiAsyncStream Create(byte[] data) => | ||
new KaitaiAsyncStream(System.IO.Pipelines.PipeReader.Create(new MemoryStream(data))); | ||
} | ||
|
||
public abstract class ReadBitsAsyncTests | ||
{ | ||
protected abstract KaitaiAsyncStream Create(byte[] data); | ||
|
||
[Theory] | ||
[MemberData(nameof(BitsData.BitsBeData), MemberType = typeof(BitsData))] | ||
public async Task ReadBitsIntAsync_Test(ulong expected, byte[] streamContent, int bitsCount) | ||
{ | ||
var kaitaiStreamSUT = Create(streamContent); | ||
|
||
Assert.Equal(expected, await kaitaiStreamSUT.ReadBitsIntAsync(bitsCount)); | ||
} | ||
|
||
[Theory] | ||
[MemberData(nameof(BitsData.BitsLeData), MemberType = typeof(BitsData))] | ||
public async Task ReadBitsIntLeAsync_Test(ulong expected, byte[] streamContent, int bitsCount) | ||
{ | ||
var kaitaiStreamSUT = Create(streamContent); | ||
|
||
Assert.Equal(expected, await kaitaiStreamSUT.ReadBitsIntLeAsync(bitsCount)); | ||
} | ||
} | ||
} |
Oops, something went wrong.