BufferedStreamTest.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. //
  2. // System.IO.BufferedStream
  3. //
  4. // Authors:
  5. // Ville Palo ([email protected])
  6. //
  7. // (C) 2003 Ville Palo
  8. //
  9. using NUnit.Framework;
  10. using System.IO;
  11. using System.Text;
  12. using System;
  13. namespace MonoTests.System.IO {
  14. [TestFixture]
  15. public class BufferedStreamTest {
  16. public BufferedStreamTest ()
  17. {
  18. ;
  19. }
  20. private MemoryStream mem;
  21. [SetUp]
  22. protected void SetUp ()
  23. {
  24. mem = new MemoryStream ();
  25. }
  26. [TearDown]
  27. protected void TearDown ()
  28. {
  29. mem.Close ();
  30. }
  31. [Test]
  32. public void Ctor ()
  33. {
  34. MemoryStream str = new MemoryStream ();
  35. str.Write (new byte [] {1, 2, 3, 4, 5, 6}, 0, 6);
  36. BufferedStream stream = new BufferedStream (str);
  37. Assertion.AssertEquals ("test#01", true, stream.CanRead);
  38. Assertion.AssertEquals ("test#02", true, stream.CanSeek);
  39. Assertion.AssertEquals ("test#03", true, stream.CanWrite);
  40. Assertion.AssertEquals ("test#04", 6, stream.Length);
  41. Assertion.AssertEquals ("test#05", 6, stream.Position);
  42. if (File.Exists (".test.BufferedStreamTest.1"))
  43. File.Delete (".test.BufferedStreamTest.1");
  44. FileStream file = new FileStream (".test.BufferedStreamTest.1", FileMode.OpenOrCreate, FileAccess.Write);
  45. stream = new BufferedStream (file);
  46. Assertion.AssertEquals ("test#06", false, stream.CanRead);
  47. Assertion.AssertEquals ("test#07", true, stream.CanSeek);
  48. Assertion.AssertEquals ("test#08", true, stream.CanWrite);
  49. Assertion.AssertEquals ("test#09", 0, stream.Length);
  50. Assertion.AssertEquals ("test#10", 0, stream.Position);
  51. file.Close ();
  52. if (File.Exists (".test.BufferedStreamTest.1"))
  53. File.Delete (".test.BufferedStreamTest.1");
  54. file = new FileStream (".test.BufferedStreamTest.1", FileMode.OpenOrCreate, FileAccess.Write);
  55. stream = new BufferedStream (file, 12);
  56. Assertion.AssertEquals ("test#11", false, stream.CanRead);
  57. Assertion.AssertEquals ("test#12", true, stream.CanSeek);
  58. Assertion.AssertEquals ("test#13", true, stream.CanWrite);
  59. Assertion.AssertEquals ("test#14", 0, stream.Length);
  60. Assertion.AssertEquals ("test#15", 0, stream.Position);
  61. file.Close ();
  62. if (File.Exists (".test.BufferedStreamTest.1"))
  63. File.Delete (".test.BufferedStreamTest.1");
  64. }
  65. /// <summary>
  66. /// Throws an exception if stream is null
  67. /// </summary>
  68. [Test]
  69. [ExpectedException(typeof(ArgumentNullException))]
  70. public void CtorNullExceptionStream ()
  71. {
  72. BufferedStream stream = new BufferedStream (null);
  73. }
  74. /// <summary>
  75. /// Throws an exception if stream is null
  76. /// </summary>
  77. [Test]
  78. [ExpectedException(typeof(ArgumentNullException))]
  79. public void CtorNullExceptionStream1 ()
  80. {
  81. BufferedStream stream = new BufferedStream (null, 12);
  82. }
  83. /// <summary>
  84. /// Throws an exception if stream is null
  85. /// </summary>
  86. [Test]
  87. [ExpectedException(typeof(ArgumentOutOfRangeException))]
  88. public void CtorOutOfRangeExceptionStream1 ()
  89. {
  90. MemoryStream str = new MemoryStream ();
  91. BufferedStream stream = new BufferedStream (str, -12);
  92. }
  93. [Test]
  94. [ExpectedException(typeof(ObjectDisposedException))]
  95. public void CtorOutOfRangeException2 ()
  96. {
  97. MemoryStream str = new MemoryStream ();
  98. str.Close ();
  99. BufferedStream stream = new BufferedStream (str);
  100. }
  101. [Test]
  102. public void Close1 ()
  103. {
  104. BufferedStream stream = new BufferedStream (mem);
  105. stream.Close ();
  106. stream.Close ();
  107. }
  108. [Test]
  109. public void Close2 ()
  110. {
  111. BufferedStream stream = new BufferedStream (mem);
  112. stream.Close ();
  113. Assertion.AssertEquals ("test#01", false, stream.CanRead);
  114. Assertion.AssertEquals ("test#02", false, stream.CanSeek);
  115. Assertion.AssertEquals ("test#03", false, stream.CanWrite);
  116. }
  117. [Test]
  118. [ExpectedException(typeof(ObjectDisposedException))]
  119. public void Close3 ()
  120. {
  121. BufferedStream stream = new BufferedStream (mem);
  122. stream.Close ();
  123. long l = stream.Position;
  124. }
  125. [Test]
  126. [ExpectedException(typeof(ObjectDisposedException))]
  127. public void Close4 ()
  128. {
  129. BufferedStream stream = new BufferedStream (mem);
  130. stream.Close ();
  131. long l = stream.Length;
  132. }
  133. [Test]
  134. [ExpectedException(typeof(ObjectDisposedException))]
  135. public void Close5 ()
  136. {
  137. BufferedStream stream = new BufferedStream (mem);
  138. stream.Close ();
  139. stream.WriteByte (1);
  140. }
  141. [Test]
  142. [ExpectedException(typeof(ObjectDisposedException))]
  143. public void Close6 ()
  144. {
  145. BufferedStream stream = new BufferedStream (mem);
  146. stream.Close ();
  147. stream.ReadByte ();
  148. }
  149. [Test]
  150. [ExpectedException(typeof(NotSupportedException))]
  151. public void Close7 ()
  152. {
  153. BufferedStream stream = new BufferedStream (mem);
  154. mem.Close ();
  155. stream.WriteByte (1);
  156. }
  157. [Test]
  158. public void Read ()
  159. {
  160. mem.Write (new byte [] {0, 1, 2, 3, 4, 5, 6, 7}, 0, 8);
  161. BufferedStream stream = new BufferedStream (mem);
  162. byte [] bytes = new byte [10];
  163. stream.Read (bytes, 0, 3);
  164. Assertion.AssertEquals ("test#01", 0, bytes [0]);
  165. Assertion.AssertEquals ("test#02", 0, bytes [1]);
  166. Assertion.AssertEquals ("test#03", 0, bytes [2]);
  167. stream.Seek (0, SeekOrigin.Begin);
  168. stream.Read (bytes, 0, 3);
  169. Assertion.AssertEquals ("test#04", 0, bytes [0]);
  170. Assertion.AssertEquals ("test#05", 1, bytes [1]);
  171. Assertion.AssertEquals ("test#06", 2, bytes [2]);
  172. Assertion.AssertEquals ("test#07", 0, bytes [0]);
  173. stream.Read (bytes, 5, 3);
  174. Assertion.AssertEquals ("test#08", 3, bytes [5]);
  175. Assertion.AssertEquals ("test#09", 4, bytes [6]);
  176. Assertion.AssertEquals ("test#10", 5, bytes [7]);
  177. Assertion.AssertEquals ("test#11", 0, bytes [8]);
  178. stream.Read (bytes, 0, 10);
  179. Assertion.AssertEquals ("test#12", 3, bytes [5]);
  180. Assertion.AssertEquals ("test#13", 4, bytes [6]);
  181. Assertion.AssertEquals ("test#14", 5, bytes [7]);
  182. Assertion.AssertEquals ("test#15", 0, bytes [9]);
  183. }
  184. [Test]
  185. [ExpectedException(typeof(ArgumentException))]
  186. public void ReadException ()
  187. {
  188. mem.Write (new byte [] {0, 1, 2, 3, 4, 5, 6, 7}, 0, 8);
  189. BufferedStream stream = new BufferedStream (mem);
  190. byte [] bytes = new byte [10];
  191. stream.Read (bytes, 0, 30);
  192. }
  193. [Test]
  194. [ExpectedException(typeof (ArgumentOutOfRangeException))]
  195. public void ReadException2 ()
  196. {
  197. BufferedStream stream = new BufferedStream (mem);
  198. byte [] bytes = new byte [10];
  199. stream.Read (bytes, -10, 4);
  200. }
  201. [Test]
  202. public void ReadByte ()
  203. {
  204. mem.Write (new byte [] {0, 1, 2, 3, 4, 5, 6, 7}, 0, 8);
  205. BufferedStream stream = new BufferedStream (mem);
  206. Assertion.AssertEquals ("test#01", -1, stream.ReadByte ());
  207. Assertion.AssertEquals ("test#02", -1, stream.ReadByte ());
  208. Assertion.AssertEquals ("test#03", -1, stream.ReadByte ());
  209. stream.Seek (0, SeekOrigin.Begin);
  210. Assertion.AssertEquals ("test#04", 0, stream.ReadByte ());
  211. Assertion.AssertEquals ("test#05", 1, stream.ReadByte ());
  212. Assertion.AssertEquals ("test#06", 2, stream.ReadByte ());
  213. Assertion.AssertEquals ("test#07", 3, stream.ReadByte ());
  214. }
  215. [Test]
  216. public void Write ()
  217. {
  218. BufferedStream stream = new BufferedStream (mem);
  219. stream.Write (new byte [] {0, 1, 2, 3, 4}, 0, 4);
  220. Assertion.AssertEquals ("test#01", 4, stream.Length);
  221. byte [] bytes = mem.GetBuffer ();
  222. Assertion.AssertEquals ("test#02", 0, bytes [0]);
  223. Assertion.AssertEquals ("test#03", 1, bytes [1]);
  224. Assertion.AssertEquals ("test#04", 2, bytes [2]);
  225. Assertion.AssertEquals ("test#05", 3, bytes [3]);
  226. bytes = new byte [] {1, 4, 3};
  227. stream.Write (bytes, 0, 3);
  228. stream.Flush ();
  229. bytes = mem.GetBuffer ();
  230. Assertion.AssertEquals ("test#06", 0, bytes [0]);
  231. Assertion.AssertEquals ("test#07", 1, bytes [1]);
  232. Assertion.AssertEquals ("test#08", 2, bytes [2]);
  233. Assertion.AssertEquals ("test#09", 3, bytes [3]);
  234. Assertion.AssertEquals ("test#10", 1, bytes [4]);
  235. Assertion.AssertEquals ("test#11", 4, bytes [5]);
  236. Assertion.AssertEquals ("test#10", 3, bytes [6]);
  237. Assertion.AssertEquals ("test#11", 0, bytes [7]);
  238. Assertion.AssertEquals ("test#12", 7, stream.Length);
  239. }
  240. [Test]
  241. [ExpectedException(typeof (ArgumentException))]
  242. public void WriteException ()
  243. {
  244. BufferedStream stream = new BufferedStream (mem);
  245. stream.Write (new byte [] {0,1,2,3}, 0, 10);
  246. }
  247. [Test]
  248. [ExpectedException(typeof (ArgumentOutOfRangeException))]
  249. public void WriteException2 ()
  250. {
  251. BufferedStream stream = new BufferedStream (mem);
  252. stream.Write (new byte [] {0,1,2,3}, -10, 4);
  253. }
  254. [Test]
  255. public void WriteByte ()
  256. {
  257. BufferedStream stream = new BufferedStream (mem);
  258. stream.WriteByte (1);
  259. stream.WriteByte (2);
  260. stream.WriteByte (3);
  261. stream.Flush ();
  262. Assertion.AssertEquals ("test#01", 256, mem.GetBuffer ().Length);
  263. Assertion.AssertEquals ("test#02", 3, stream.Length);
  264. Assertion.AssertEquals ("test#03", 1, mem.GetBuffer () [0]);
  265. Assertion.AssertEquals ("test#04", 2, mem.GetBuffer () [1]);
  266. Assertion.AssertEquals ("test#05", 3, mem.GetBuffer () [2]);
  267. }
  268. [Test]
  269. public void Flush ()
  270. {
  271. BufferedStream stream = new BufferedStream (mem);
  272. stream.WriteByte (1);
  273. stream.WriteByte (2);
  274. byte [] bytes = mem.GetBuffer ();
  275. Assertion.AssertEquals ("test#01", 0, bytes.Length);
  276. stream.Flush ();
  277. bytes = mem.GetBuffer ();
  278. Assertion.AssertEquals ("test#02", 256, bytes.Length);
  279. Assertion.AssertEquals ("test#03", 1, bytes [0]);
  280. Assertion.AssertEquals ("test#04", 2, bytes [1]);
  281. mem.Close ();
  282. mem = new MemoryStream ();
  283. bytes = new byte [] {0, 1, 2, 3, 4, 5};
  284. stream = new BufferedStream (mem);
  285. stream.Write (bytes, 0, 2);
  286. Assertion.AssertEquals ("test#05", 2, stream.Length);
  287. bytes = mem.GetBuffer ();
  288. Assertion.AssertEquals ("test#06", 256, bytes.Length);
  289. Assertion.AssertEquals ("test#07", 0, bytes [0]);
  290. Assertion.AssertEquals ("test#08", 1, bytes [1]);
  291. stream.Write (bytes, 0, 2);
  292. bytes = mem.GetBuffer ();
  293. Assertion.AssertEquals ("test#09", 0, bytes [0]);
  294. Assertion.AssertEquals ("test#10", 1, bytes [1]);
  295. Assertion.AssertEquals ("test#11", 0, bytes [2]);
  296. Assertion.AssertEquals ("test#12", 0, bytes [3]);
  297. stream.Flush ();
  298. bytes = mem.GetBuffer ();
  299. Assertion.AssertEquals ("test#13", 0, bytes [2]);
  300. Assertion.AssertEquals ("test#14", 1, bytes [3]);
  301. }
  302. [Test]
  303. public void Seek ()
  304. {
  305. BufferedStream stream = new BufferedStream (mem);
  306. stream.Write (new byte [] {0, 1, 2, 3, 4, 5}, 0, 6);
  307. Assertion.AssertEquals ("test#01", 6, stream.Position);
  308. stream.Seek (-5, SeekOrigin.End);
  309. Assertion.AssertEquals ("test#02", 1, stream.Position);
  310. stream.Seek (3, SeekOrigin.Current);
  311. Assertion.AssertEquals ("test#03", 4, stream.Position);
  312. stream.Seek (300, SeekOrigin.Current);
  313. Assertion.AssertEquals ("test#04", 304, stream.Position);
  314. }
  315. [Test]
  316. [ExpectedException(typeof (IOException))]
  317. public void SeekException ()
  318. {
  319. BufferedStream stream = new BufferedStream (mem);
  320. stream.Seek (-1, SeekOrigin.Begin);
  321. }
  322. [Test]
  323. public void SetLength ()
  324. {
  325. BufferedStream stream = new BufferedStream (mem);
  326. stream.Write (new byte [] {0,1,2,3,4,5}, 0, 6);
  327. Assertion.AssertEquals ("test#01", 6, stream.Length);
  328. stream.SetLength (60);
  329. Assertion.AssertEquals ("test#02", 60, stream.Length);
  330. stream.SetLength (2);
  331. Assertion.AssertEquals ("test#03", 2, stream.Length);
  332. }
  333. [Test]
  334. [ExpectedException(typeof(ArgumentOutOfRangeException))]
  335. public void SetLengthException ()
  336. {
  337. BufferedStream stream = new BufferedStream (mem);
  338. stream.SetLength (-1);
  339. }
  340. [Test]
  341. [ExpectedException(typeof(NotSupportedException))]
  342. public void SetLengthException2 ()
  343. {
  344. BufferedStream stream = new BufferedStream (mem);
  345. mem.Close ();
  346. stream.SetLength (1);
  347. }
  348. [Test]
  349. [ExpectedException(typeof(NullReferenceException))]
  350. public void SetLengthException3 ()
  351. {
  352. BufferedStream stream = new BufferedStream (mem);
  353. mem = null;
  354. stream.SetLength (1);
  355. }
  356. }
  357. }