1- using System . Threading . Tasks ;
1+ using System . IO ;
2+ using System . Threading . Tasks ;
23using Kaitai . Async ;
34using Xunit ;
45
56namespace 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}
0 commit comments