Skip to content

Commit 32bda6c

Browse files
author
喻斌
committed
resolved #70
1 parent 8b81081 commit 32bda6c

File tree

4 files changed

+533
-0
lines changed

4 files changed

+533
-0
lines changed

src/CatLib.Core.Tests/CatLib.Core.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
<Compile Include="Support\RingBuffer\RingBufferTests.cs" />
5353
<Compile Include="Support\SortSet\SortSetTests.cs" />
5454
<Compile Include="Support\Storage\MemoryStorageTests.cs" />
55+
<Compile Include="Support\Stream\CombineStreamTests.cs" />
5556
<Compile Include="Support\Stream\PipelineStreamTests.cs" />
5657
<Compile Include="Support\Stream\StorageStreamTests.cs" />
5758
<Compile Include="Support\Template\ManagerTests.cs" />
Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
/*
2+
* This file is part of the CatLib package.
3+
*
4+
* (c) Yu Bin <[email protected]>
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*
9+
* Document: http://catlib.io/
10+
*/
11+
12+
using Microsoft.VisualStudio.TestTools.UnitTesting;
13+
using System;
14+
using System.IO;
15+
16+
namespace CatLib
17+
{
18+
[TestClass]
19+
public class CombineStreamTests
20+
{
21+
[TestMethod]
22+
public void TestCombineStream()
23+
{
24+
var mem1 = "hello".ToStream();
25+
var mem2 = "world".ToStream();
26+
27+
var stream = new CombineStream(mem1, mem2);
28+
Assert.AreEqual("helloworld", stream.ToText());
29+
}
30+
31+
[TestMethod]
32+
public void TestCombineStream2()
33+
{
34+
var mem1 = "hello".ToStream();
35+
var mem2 = "world".ToStream();
36+
var stream = new CombineStream(mem1, mem2);
37+
38+
var buffer = new byte[5];
39+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
40+
Assert.AreEqual("hello", Util.Encoding.GetString(buffer));
41+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
42+
Assert.AreEqual("world", Util.Encoding.GetString(buffer));
43+
}
44+
45+
[TestMethod]
46+
public void TestCombineSeek()
47+
{
48+
var mem1 = "hello".ToStream();
49+
var mem2 = "world".ToStream();
50+
var stream = new CombineStream(mem1, mem2);
51+
52+
var buffer = new byte[5];
53+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
54+
Assert.AreEqual("hello", Util.Encoding.GetString(buffer));
55+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
56+
Assert.AreEqual("world", Util.Encoding.GetString(buffer));
57+
58+
stream.Seek(5, SeekOrigin.Begin);
59+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
60+
Assert.AreEqual("world", Util.Encoding.GetString(buffer));
61+
62+
stream.Seek(4, SeekOrigin.Begin);
63+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
64+
Assert.AreEqual("oworl", Util.Encoding.GetString(buffer));
65+
stream.Seek(6, SeekOrigin.Begin);
66+
Assert.AreEqual(4, stream.Read(buffer, 0, 5));
67+
Assert.AreEqual("orld", Util.Encoding.GetString(buffer, 0, 4));
68+
stream.Seek(10, SeekOrigin.Begin);
69+
Assert.AreEqual(0, stream.Read(buffer, 0, 5));
70+
Assert.AreEqual(0, stream.Read(buffer, 0, 5));
71+
}
72+
73+
[TestMethod]
74+
public void TestCombineSeek2()
75+
{
76+
var mem1 = "hello".ToStream();
77+
var mem2 = "world".ToStream();
78+
var stream = new CombineStream(mem1, mem2);
79+
80+
var buffer = new byte[5];
81+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
82+
Assert.AreEqual("hello", Util.Encoding.GetString(buffer));
83+
stream.Seek(2, SeekOrigin.Current);
84+
Assert.AreEqual(3, stream.Read(buffer, 0, 5));
85+
Assert.AreEqual("rld", Util.Encoding.GetString(buffer, 0, 3));
86+
stream.Seek(-3, SeekOrigin.End);
87+
Assert.AreEqual(3, stream.Read(buffer, 0, 5));
88+
Assert.AreEqual("rld", Util.Encoding.GetString(buffer, 0, 3));
89+
}
90+
91+
[TestMethod]
92+
public void TestSetPosition()
93+
{
94+
var mem1 = "hello".ToStream();
95+
var mem2 = "world".ToStream();
96+
var stream = new CombineStream(mem1, mem2);
97+
98+
var buffer = new byte[5];
99+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
100+
Assert.AreEqual("hello", Util.Encoding.GetString(buffer));
101+
102+
Assert.AreEqual(5, stream.Position);
103+
stream.Position = 0;
104+
Assert.AreEqual(5, stream.Read(buffer, 0, 5));
105+
Assert.AreEqual("hello", Util.Encoding.GetString(buffer));
106+
}
107+
108+
[TestMethod]
109+
public void TestGetContstValue()
110+
{
111+
var mem1 = "hello".ToStream();
112+
var mem2 = "world".ToStream();
113+
var stream = new CombineStream(mem1, mem2);
114+
115+
Assert.AreEqual(false, stream.CanWrite);
116+
Assert.AreEqual(true, stream.CanSeek);
117+
Assert.AreEqual(true, stream.CanRead);
118+
}
119+
120+
[TestMethod]
121+
[ExpectedException(typeof(ArgumentOutOfRangeException))]
122+
public void TestSeekOutOfRange()
123+
{
124+
var mem1 = "hello".ToStream();
125+
var mem2 = "world".ToStream();
126+
var stream = new CombineStream(mem1, mem2);
127+
stream.Seek(11, SeekOrigin.Begin);
128+
}
129+
130+
public class CannotSeekStream : Stream
131+
{
132+
public override bool CanRead { get; }
133+
public override bool CanSeek => false;
134+
135+
public override bool CanWrite { get; }
136+
137+
public override long Position { get; set; }
138+
139+
public override long Length { get; }
140+
141+
public override long Seek(long offset, SeekOrigin origin)
142+
{
143+
throw new NotImplementedException();
144+
}
145+
146+
public override void Flush()
147+
{
148+
throw new NotImplementedException();
149+
}
150+
151+
public override void Write(byte[] buffer, int offset, int count)
152+
{
153+
throw new NotImplementedException();
154+
}
155+
156+
public override void SetLength(long value)
157+
{
158+
throw new NotImplementedException();
159+
}
160+
161+
public override int Read(byte[] buffer, int offset, int count)
162+
{
163+
throw new NotImplementedException();
164+
}
165+
}
166+
167+
[TestMethod]
168+
public void TestCannotSeekStream()
169+
{
170+
var stream = new CombineStream("hello".ToStream(), new CannotSeekStream());
171+
Assert.AreEqual(false, stream.CanSeek);
172+
}
173+
174+
[TestMethod]
175+
[ExpectedException(typeof(NotSupportedException))]
176+
public void TestCannotSeekStreamSetPosition()
177+
{
178+
var stream = new CombineStream("hello".ToStream(), new CannotSeekStream());
179+
stream.Seek(0, SeekOrigin.Begin);
180+
}
181+
182+
[TestMethod]
183+
[ExpectedException(typeof(NotSupportedException))]
184+
public void TestUnknowSeek()
185+
{
186+
var mem1 = "hello".ToStream();
187+
var mem2 = "world".ToStream();
188+
var stream = new CombineStream(mem1, mem2);
189+
stream.Seek(11, (SeekOrigin)100);
190+
}
191+
192+
[TestMethod]
193+
public void TestDispose()
194+
{
195+
var mem1 = "hello".ToStream();
196+
var mem2 = "world".ToStream();
197+
198+
Assert.AreEqual(true, mem1.CanWrite);
199+
Assert.AreEqual(true, mem2.CanWrite);
200+
201+
using (var stream = new CombineStream(mem1, mem2, true))
202+
{
203+
}
204+
205+
Assert.AreEqual(false, mem1.CanWrite);
206+
Assert.AreEqual(false, mem2.CanWrite);
207+
}
208+
209+
[TestMethod]
210+
[ExpectedException(typeof(NotSupportedException))]
211+
public void TestWrite()
212+
{
213+
var mem1 = "hello".ToStream();
214+
var mem2 = "world".ToStream();
215+
var stream = new CombineStream(mem1, mem2);
216+
217+
stream.Write(new byte[5], 0, 1);
218+
}
219+
220+
[TestMethod]
221+
[ExpectedException(typeof(NotSupportedException))]
222+
public void TestSetLength()
223+
{
224+
var mem1 = "hello".ToStream();
225+
var mem2 = "world".ToStream();
226+
var stream = new CombineStream(mem1, mem2);
227+
228+
stream.SetLength(10);
229+
}
230+
231+
[TestMethod]
232+
[ExpectedException(typeof(NotSupportedException))]
233+
public void TestFlush()
234+
{
235+
var mem1 = "hello".ToStream();
236+
var mem2 = "world".ToStream();
237+
var stream = new CombineStream(mem1, mem2);
238+
239+
stream.Flush();
240+
}
241+
}
242+
}

src/CatLib.Core/CatLib.Core.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,11 @@
9292
<Compile Include="Support\RingBuffer\IRingBuffer.cs" />
9393
<Compile Include="Support\RingBuffer\RingBuffer.cs" />
9494
<Compile Include="Support\Storage\IStorage.cs" />
95+
<Compile Include="Support\Stream\CombineStream.cs" />
9596
<Compile Include="Support\Stream\PipelineStream.cs" />
9697
<Compile Include="Support\Stream\StorageStream.cs" />
9798
<Compile Include="Support\Storage\MemoryStorage.cs" />
99+
<Compile Include="Support\Stream\WrapperStream.cs" />
98100
<Compile Include="Support\Util\Dict.cs" />
99101
<Compile Include="Support\SortSet\ISortSet.cs" />
100102
<Compile Include="Support\SortSet\SortSet.cs" />

0 commit comments

Comments
 (0)