Skip to content

Commit 41323ab

Browse files
committed
Use IReaderContext to abstract PipeReader and StreamReader implementations.
1 parent ee433e1 commit 41323ab

24 files changed

+1142
-1768
lines changed
Lines changed: 107 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,115 @@
1-
using System.Threading.Tasks;
1+
using System.IO;
2+
using System.Threading.Tasks;
23
using Kaitai.Async;
34
using Xunit;
45

56
namespace Kaitai.Struct.Runtime.Async.Tests
67
{
7-
public class KaitaiAsyncStreamBaseTests
8+
public class StreamKaitaiAsyncStreamBaseTests : KaitaiAsyncStreamBaseTests
89
{
9-
[Fact]
10-
public async Task AlignToByte_Test()
11-
{
12-
//Arrange
13-
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[]{0b_1000_0000});
14-
15-
var read = await kaitaiStreamSUT.ReadBitsIntAsync(1);
16-
Assert.Equal(1u, read);
17-
18-
//Act
19-
kaitaiStreamSUT.AlignToByte();
20-
//Assert
21-
Assert.Equal(1, kaitaiStreamSUT.Pos);
22-
}
23-
24-
[Theory]
25-
[InlineData(true, 0, 0)]
26-
[InlineData(false, 1, 0)]
27-
[InlineData(false, 1, 1)]
28-
[InlineData(false, 1, 2)]
29-
[InlineData(false, 1, 3)]
30-
[InlineData(false, 1, 4)]
31-
[InlineData(false, 1, 5)]
32-
[InlineData(false, 1, 6)]
33-
[InlineData(false, 1, 7)]
34-
[InlineData(true, 1, 8)]
35-
public async Task Eof_Test(bool shouldBeEof, int streamSize, int readBitsAmount)
36-
{
37-
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[streamSize]);
38-
39-
await kaitaiStreamSUT.ReadBitsIntAsync(readBitsAmount);
40-
41-
if (shouldBeEof)
42-
Assert.True(kaitaiStreamSUT.IsEof);
43-
else
44-
Assert.False(kaitaiStreamSUT.IsEof);
45-
}
46-
47-
[Theory]
48-
[InlineData(0, 0)]
49-
[InlineData(1, 1)]
50-
public async Task Pos_ByRead_Test(int expectedPos, int readBitsAmount)
51-
{
52-
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[1]);
53-
54-
await kaitaiStreamSUT.ReadBytesAsync(readBitsAmount);
55-
56-
Assert.Equal(expectedPos, kaitaiStreamSUT.Pos);
57-
}
58-
59-
[Theory]
60-
[InlineData(0, 0)]
61-
[InlineData(1, 1)]
62-
public async Task Pos_BySeek_Test(int expectedPos, int position)
63-
{
64-
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[1]);
65-
66-
await kaitaiStreamSUT.SeekAsync(position);
67-
68-
Assert.Equal(expectedPos, kaitaiStreamSUT.Pos);
69-
}
70-
71-
[Theory]
72-
[InlineData(0)]
73-
[InlineData(1)]
74-
public void Size_Test(int streamSize)
75-
{
76-
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[streamSize]);
77-
78-
Assert.Equal(streamSize, kaitaiStreamSUT.Size);
79-
}
80-
81-
[Fact]
82-
public void EmptyStream_NoRead_NoSeek_IsEof_ShouldBe_True()
83-
{
84-
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[0]);
85-
86-
Assert.True(kaitaiStreamSUT.IsEof);
87-
}
88-
89-
[Fact]
90-
public void EmptyStream_NoRead_NoSeek_Pos_ShouldBe_0()
91-
{
92-
var kaitaiStreamSUT = new KaitaiAsyncStream(new byte[0]);
93-
94-
Assert.Equal(0, kaitaiStreamSUT.Pos);
95-
}
10+
protected override KaitaiAsyncStream Create(byte[] data) => new KaitaiAsyncStream(data);
11+
}
12+
13+
public class PipeReaderKaitaiAsyncStreamBaseTests : KaitaiAsyncStreamBaseTests
14+
{
15+
protected override KaitaiAsyncStream Create(byte[] data) =>
16+
new KaitaiAsyncStream(System.IO.Pipelines.PipeReader.Create(new MemoryStream(data)));
17+
}
18+
19+
public abstract class KaitaiAsyncStreamBaseTests
20+
{
21+
protected abstract KaitaiAsyncStream Create(byte[] data);
22+
23+
[Theory]
24+
[InlineData(true, 0, 0)]
25+
[InlineData(false, 1, 0)]
26+
[InlineData(false, 1, 1)]
27+
[InlineData(false, 1, 2)]
28+
[InlineData(false, 1, 3)]
29+
[InlineData(false, 1, 4)]
30+
[InlineData(false, 1, 5)]
31+
[InlineData(false, 1, 6)]
32+
[InlineData(false, 1, 7)]
33+
[InlineData(true, 1, 8)]
34+
public async Task Eof_Test(bool shouldBeEof, int streamSize, int readBitsAmount)
35+
{
36+
var kaitaiStreamSUT = Create(new byte[streamSize]);
37+
38+
await kaitaiStreamSUT.ReadBitsIntAsync(readBitsAmount);
39+
40+
if (shouldBeEof)
41+
{
42+
Assert.True(kaitaiStreamSUT.IsEof);
43+
}
44+
else
45+
{
46+
Assert.False(kaitaiStreamSUT.IsEof);
47+
}
48+
}
49+
50+
[Theory]
51+
[InlineData(0, 0)]
52+
[InlineData(1, 1)]
53+
public async Task Pos_ByRead_Test(int expectedPos, int readBitsAmount)
54+
{
55+
var kaitaiStreamSUT = Create(new byte[1]);
56+
57+
await kaitaiStreamSUT.ReadBytesAsync(readBitsAmount);
58+
59+
Assert.Equal(expectedPos, kaitaiStreamSUT.Pos);
60+
}
61+
62+
[Theory]
63+
[InlineData(0, 0)]
64+
[InlineData(1, 1)]
65+
public async Task Pos_BySeek_Test(int expectedPos, int position)
66+
{
67+
var kaitaiStreamSUT = Create(new byte[1]);
68+
69+
await kaitaiStreamSUT.SeekAsync(position);
70+
71+
Assert.Equal(expectedPos, kaitaiStreamSUT.Pos);
72+
}
73+
74+
[Theory]
75+
[InlineData(0)]
76+
[InlineData(1)]
77+
public void Size_Test(int streamSize)
78+
{
79+
var kaitaiStreamSUT = Create(new byte[streamSize]);
80+
81+
Assert.Equal(streamSize, kaitaiStreamSUT.Size);
82+
}
83+
84+
[Fact]
85+
public async Task AlignToByte_Test()
86+
{
87+
//Arrange
88+
var kaitaiStreamSUT = Create(new byte[] {0b_1000_0000});
89+
90+
ulong read = await kaitaiStreamSUT.ReadBitsIntAsync(1);
91+
Assert.Equal(1u, read);
92+
93+
//Act
94+
kaitaiStreamSUT.AlignToByte();
95+
//Assert
96+
Assert.Equal(1, kaitaiStreamSUT.Pos);
97+
}
98+
99+
[Fact]
100+
public void EmptyStream_NoRead_NoSeek_IsEof_ShouldBe_True()
101+
{
102+
var kaitaiStreamSUT = Create(new byte[0]);
103+
104+
Assert.True(kaitaiStreamSUT.IsEof);
105+
}
106+
107+
[Fact]
108+
public void EmptyStream_NoRead_NoSeek_Pos_ShouldBe_0()
109+
{
110+
var kaitaiStreamSUT = Create(new byte[0]);
111+
112+
Assert.Equal(0, kaitaiStreamSUT.Pos);
96113
}
114+
}
97115
}
Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,38 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Text;
1+
using System.IO;
42
using Kaitai.Async;
53
using Xunit;
64

75
namespace Kaitai.Struct.Runtime.Async.Tests
86
{
9-
10-
public class KaitaiAsyncStructTests
7+
public class StreamKaitaiAsyncStructTests : KaitaiAsyncStructTests
8+
{
9+
protected override KaitaiAsyncStream Create(byte[] data) => new KaitaiAsyncStream(data);
10+
}
11+
12+
public class PipeReaderKaitaiAsyncStructTests : KaitaiAsyncStructTests
13+
{
14+
protected override KaitaiAsyncStream Create(byte[] data) =>
15+
new KaitaiAsyncStream(System.IO.Pipelines.PipeReader.Create(new MemoryStream(data)));
16+
}
17+
18+
public abstract class KaitaiAsyncStructTests
19+
{
20+
protected abstract KaitaiAsyncStream Create(byte[] data);
21+
22+
private class FooKaitaiAsyncStruct : KaitaiAsyncStruct
1123
{
12-
[Fact]
13-
public void M_Io_IsSet()
14-
{
15-
var kaitaiAsyncStream = new KaitaiAsyncStream(new byte[0]);
16-
var kaitaiAsyncStructSUT = new FooKaitaiAsyncStruct(kaitaiAsyncStream);
24+
public FooKaitaiAsyncStruct(KaitaiAsyncStream kaitaiStream) : base(kaitaiStream)
25+
{
26+
}
27+
}
1728

18-
Assert.Equal(kaitaiAsyncStream, kaitaiAsyncStructSUT.M_Io);
19-
}
29+
[Fact]
30+
public void M_Io_IsSet()
31+
{
32+
var kaitaiAsyncStream = Create(new byte[0]);
33+
var kaitaiAsyncStructSUT = new FooKaitaiAsyncStruct(kaitaiAsyncStream);
2034

21-
private class FooKaitaiAsyncStruct : KaitaiAsyncStruct
22-
{
23-
public FooKaitaiAsyncStruct(KaitaiAsyncStream kaitaiStream) : base(kaitaiStream)
24-
{
25-
}
26-
}
35+
Assert.Equal(kaitaiAsyncStream, kaitaiAsyncStructSUT.M_Io);
2736
}
28-
}
37+
}
38+
}

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

Lines changed: 0 additions & 97 deletions
This file was deleted.

Kaitai.Struct.Runtime.Async.Tests/PipeReader/ReadBits.cs

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)