BinaryWriterTest.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. //
  2. // System.IO.StringWriter
  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 BinaryWriterTest : Assertion {
  16. string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
  17. [SetUp]
  18. protected void SetUp() {
  19. if (Directory.Exists (TempFolder))
  20. Directory.Delete (TempFolder, true);
  21. Directory.CreateDirectory (TempFolder);
  22. }
  23. [TearDown]
  24. public void TearDown()
  25. {
  26. if (Directory.Exists (TempFolder))
  27. Directory.Delete (TempFolder, true);
  28. }
  29. [Test]
  30. public void Ctor ()
  31. {
  32. MemoryStream stream = new MemoryStream ();
  33. BinaryWriter writer = new BinaryWriter (stream);
  34. AssertEquals ("test#01", true, writer.BaseStream.CanRead);
  35. AssertEquals ("test#02", true, writer.BaseStream.CanSeek);
  36. AssertEquals ("test#03", true, writer.BaseStream.CanWrite);
  37. writer = new BinaryWriter (stream, new ASCIIEncoding ());
  38. AssertEquals ("test#04", true, writer.BaseStream.CanRead);
  39. AssertEquals ("test#05", true, writer.BaseStream.CanSeek);
  40. AssertEquals ("test#06", true, writer.BaseStream.CanWrite);
  41. }
  42. /// <summary>
  43. /// Throws an exception if stream is null
  44. /// </summary>
  45. [Test]
  46. [ExpectedException(typeof(ArgumentNullException))]
  47. public void CtorNullExceptionStream ()
  48. {
  49. BinaryWriter reader = new BinaryWriter (null);
  50. }
  51. /// <summary>
  52. /// Throws an exception if encoding is null
  53. /// </summary>
  54. [Test]
  55. [ExpectedException(typeof(ArgumentNullException))]
  56. public void CtorNullExceptionStreamEncoding ()
  57. {
  58. MemoryStream stream = new MemoryStream ();
  59. BinaryWriter reader = new BinaryWriter (stream, null);
  60. }
  61. /// <summary>
  62. /// Throws an exception if stream is closed
  63. /// </summary>
  64. [Test]
  65. [ExpectedException(typeof(ArgumentException))]
  66. public void CtorExceptionStreamClosed ()
  67. {
  68. MemoryStream stream = new MemoryStream ();
  69. stream.Close ();
  70. BinaryWriter writer = new BinaryWriter (stream);
  71. }
  72. /// <summary>
  73. /// Throws an exception if stream does not support writing
  74. /// </summary>
  75. [Test]
  76. [ExpectedException(typeof(ArgumentException))]
  77. public void CtorArgumentExceptionStreamCannotWrite ()
  78. {
  79. string path = TempFolder + "/BinaryWriterTest.1";
  80. DeleteFile (path);
  81. FileStream stream = null;
  82. BinaryWriter reader = null;
  83. try {
  84. stream = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Read);
  85. reader = new BinaryWriter (stream);
  86. } finally {
  87. if (reader != null)
  88. reader.Close ();
  89. if (stream != null)
  90. stream.Close ();
  91. DeleteFile (path);
  92. }
  93. }
  94. [Test]
  95. public void Encoding ()
  96. {
  97. MemoryStream stream = new MemoryStream ();
  98. BinaryWriter writer = new BinaryWriter (stream);
  99. writer.Write ("t*st");
  100. byte [] bytes = stream.GetBuffer ();
  101. AssertEquals ("test#01", 4, bytes [0]);
  102. AssertEquals ("test#02", 116, bytes [1]);
  103. AssertEquals ("test#03", 42, bytes [2]);
  104. AssertEquals ("test#04", 115, bytes [3]);
  105. AssertEquals ("test#05", 116, bytes [4]);
  106. AssertEquals ("test#06", 0, bytes [5]);
  107. stream = new MemoryStream ();
  108. writer = new BinaryWriter (stream, new UnicodeEncoding ());
  109. writer.Write ("t*st");
  110. bytes = stream.GetBuffer ();
  111. AssertEquals ("test#07", 8, bytes [0]);
  112. AssertEquals ("test#08", 116, bytes [1]);
  113. AssertEquals ("test#09", 0, bytes [2]);
  114. AssertEquals ("test#10", 42, bytes [3]);
  115. AssertEquals ("test#11", 0, bytes [4]);
  116. AssertEquals ("test#12", 115, bytes [5]);
  117. AssertEquals ("test#13", 0, bytes [6]);
  118. AssertEquals ("test#14", 116, bytes [7]);
  119. AssertEquals ("test#15", 0, bytes [8]);
  120. stream = new MemoryStream ();
  121. writer = new BinaryWriter (stream, new UTF7Encoding ());
  122. writer.Write ("t*st");
  123. bytes = stream.GetBuffer ();
  124. AssertEquals ("test#16", 8, bytes [0]);
  125. AssertEquals ("test#17", 116, bytes [1]);
  126. AssertEquals ("test#18", 43, bytes [2]);
  127. AssertEquals ("test#19", 65, bytes [3]);
  128. AssertEquals ("test#21", 67, bytes [4]);
  129. AssertEquals ("test#22", 111, bytes [5]);
  130. AssertEquals ("test#23", 45, bytes [6]);
  131. AssertEquals ("test#24", 115, bytes [7]);
  132. AssertEquals ("test#25", 116, bytes [8]);
  133. AssertEquals ("test#26", 0, bytes [9]);
  134. AssertEquals ("test#27", 0, bytes [10]);
  135. stream = new MemoryStream ();
  136. writer = new BinaryWriter (stream, new ASCIIEncoding ());
  137. writer.Write ("t*st");
  138. bytes = stream.GetBuffer ();
  139. AssertEquals ("test#28", 4, bytes [0]);
  140. AssertEquals ("test#29", 116, bytes [1]);
  141. AssertEquals ("test#30", 42, bytes [2]);
  142. AssertEquals ("test#31", 115, bytes [3]);
  143. AssertEquals ("test#32", 116, bytes [4]);
  144. AssertEquals ("test#33", 0, bytes [5]);
  145. }
  146. [Test]
  147. [ExpectedException(typeof(ObjectDisposedException))]
  148. public void Close1 ()
  149. {
  150. MemoryStream stream = new MemoryStream ();
  151. BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
  152. writer.Close ();
  153. writer.Write ("Test");
  154. }
  155. [Test]
  156. public void Close2 ()
  157. {
  158. MemoryStream stream = new MemoryStream ();
  159. BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
  160. writer.Close ();
  161. writer.Flush ();
  162. stream.Flush ();
  163. }
  164. [Test]
  165. [ExpectedException(typeof(ObjectDisposedException))]
  166. public void Close3 ()
  167. {
  168. MemoryStream stream = new MemoryStream ();
  169. BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
  170. writer.Close ();
  171. writer.Seek (1, SeekOrigin.Begin);
  172. }
  173. [Test]
  174. public void Close4 ()
  175. {
  176. MemoryStream stream = new MemoryStream ();
  177. BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
  178. writer.Close ();
  179. AssertEquals ("test#01", false, writer.BaseStream.CanRead);
  180. AssertEquals ("test#01", false, writer.BaseStream.CanWrite);
  181. AssertEquals ("test#01", false, writer.BaseStream.CanSeek);
  182. }
  183. [Test]
  184. public void Seek ()
  185. {
  186. MemoryStream stream = new MemoryStream ();
  187. BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
  188. writer.Write ("Test");
  189. writer.Seek (2, SeekOrigin.Begin);
  190. writer.Write ("-");
  191. writer.Seek (400, SeekOrigin.Begin);
  192. writer.Write ("-");
  193. writer.Seek (-394, SeekOrigin.End);
  194. writer.Write ("-");
  195. writer.Seek (-2, SeekOrigin.Current);
  196. writer.Write ("-");
  197. byte [] bytes = stream.GetBuffer ();
  198. AssertEquals ("test#01", 512, bytes.Length);
  199. AssertEquals ("test#02", 4, bytes [0]);
  200. AssertEquals ("test#03", 84, bytes [1]);
  201. AssertEquals ("test#04", 1, bytes [2]);
  202. AssertEquals ("test#05", 45, bytes [3]);
  203. AssertEquals ("test#06", 116, bytes [4]);
  204. AssertEquals ("test#07", 0, bytes [5]);
  205. AssertEquals ("test#08", 0, bytes [6]);
  206. AssertEquals ("test#09", 0, bytes [7]);
  207. AssertEquals ("test#10", 1, bytes [8]);
  208. AssertEquals ("test#11", 45, bytes [9]);
  209. AssertEquals ("test#12", 0, bytes [10]);
  210. AssertEquals ("test#13", 0, bytes [11]);
  211. AssertEquals ("test#14", 0, bytes [12]);
  212. AssertEquals ("test#15", 1, bytes [400]);
  213. }
  214. [Test]
  215. [ExpectedException(typeof(IOException))]
  216. public void SeekException ()
  217. {
  218. MemoryStream stream = new MemoryStream ();
  219. BinaryWriter writer = new BinaryWriter (stream);
  220. writer.Write ("Test");
  221. writer.Seek (-12, SeekOrigin.Begin);
  222. }
  223. [Test]
  224. public void WriteCharArray ()
  225. {
  226. MemoryStream stream = new MemoryStream ();
  227. BinaryWriter writer = new BinaryWriter (stream);
  228. writer.Write (new char [] {'m', 'o', 'n', 'o', ':', ':'});
  229. writer.Write (new char [] {':', ':', 'O', 'N', 'O', 'M'});
  230. byte [] bytes = stream.GetBuffer ();
  231. AssertEquals ("test#01", 256, bytes.Length);
  232. AssertEquals ("test#02", 109, bytes [0]);
  233. AssertEquals ("test#03", 111, bytes [1]);
  234. AssertEquals ("test#04", 110, bytes [2]);
  235. AssertEquals ("test#05", 111, bytes [3]);
  236. AssertEquals ("test#06", 58, bytes [4]);
  237. AssertEquals ("test#07", 58, bytes [5]);
  238. AssertEquals ("test#08", 58, bytes [6]);
  239. AssertEquals ("test#09", 58, bytes [7]);
  240. AssertEquals ("test#10", 79, bytes [8]);
  241. AssertEquals ("test#11", 78, bytes [9]);
  242. AssertEquals ("test#12", 79, bytes [10]);
  243. AssertEquals ("test#13", 77, bytes [11]);
  244. AssertEquals ("test#14", 0, bytes [12]);
  245. AssertEquals ("test#15", 0, bytes [13]);
  246. }
  247. [Test]
  248. public void WriteByteArray ()
  249. {
  250. MemoryStream stream = new MemoryStream ();
  251. BinaryWriter writer = new BinaryWriter (stream);
  252. writer.Write (new byte [] {1, 2, 3, 4, 5, 6});
  253. writer.Write (new byte [] {6, 5, 4, 3, 2, 1});
  254. byte [] bytes = stream.GetBuffer ();
  255. AssertEquals ("test#01", 256, bytes.Length);
  256. AssertEquals ("test#02", 1, bytes [0]);
  257. AssertEquals ("test#03", 2, bytes [1]);
  258. AssertEquals ("test#04", 3, bytes [2]);
  259. AssertEquals ("test#05", 4, bytes [3]);
  260. AssertEquals ("test#06", 5, bytes [4]);
  261. AssertEquals ("test#07", 6, bytes [5]);
  262. AssertEquals ("test#08", 6, bytes [6]);
  263. AssertEquals ("test#09", 5, bytes [7]);
  264. AssertEquals ("test#10", 4, bytes [8]);
  265. AssertEquals ("test#11", 3, bytes [9]);
  266. AssertEquals ("test#12", 2, bytes [10]);
  267. AssertEquals ("test#13", 1, bytes [11]);
  268. AssertEquals ("test#14", 0, bytes [12]);
  269. AssertEquals ("test#15", 0, bytes [13]);
  270. }
  271. [Test]
  272. public void WriteInt ()
  273. {
  274. short s = 64;
  275. int i = 64646464;
  276. long l = 9999999999999;
  277. MemoryStream stream = new MemoryStream ();
  278. BinaryWriter writer = new BinaryWriter (stream);
  279. writer.Write (s);
  280. byte [] bytes;
  281. bytes = stream.GetBuffer ();
  282. AssertEquals ("test#01", 256, bytes.Length);
  283. AssertEquals ("test#02", 64, bytes [0]);
  284. AssertEquals ("test#03", 0, bytes [1]);
  285. writer.Write (i);
  286. bytes = stream.GetBuffer ();
  287. AssertEquals ("test#04", 256, bytes.Length);
  288. AssertEquals ("test#05", 64, bytes [0]);
  289. AssertEquals ("test#06", 0, bytes [1]);
  290. AssertEquals ("test#07", 64, bytes [2]);
  291. AssertEquals ("test#08", 109, bytes [3]);
  292. AssertEquals ("test#09", 218, bytes [4]);
  293. AssertEquals ("test#10", 3, bytes [5]);
  294. AssertEquals ("test#11", 0, bytes [6]);
  295. writer.Write (l);
  296. bytes = stream.GetBuffer ();
  297. AssertEquals ("test#12", 256, bytes.Length);
  298. AssertEquals ("test#13", 255, bytes [6]);
  299. AssertEquals ("test#14", 159, bytes [7]);
  300. AssertEquals ("test#15", 114, bytes [8]);
  301. AssertEquals ("test#16", 78, bytes [9]);
  302. AssertEquals ("test#17", 24, bytes [10]);
  303. AssertEquals ("test#18", 9, bytes [11]);
  304. AssertEquals ("test#19", 0, bytes [12]);
  305. }
  306. [Test]
  307. public void WriteDecimal ()
  308. {
  309. MemoryStream stream = new MemoryStream ();
  310. BinaryWriter writer = new BinaryWriter (stream);
  311. decimal d1 = 19932143214312.32M;
  312. decimal d2 = -8995034512332157M;
  313. writer.Write (d1);
  314. writer.Write (d2);
  315. byte [] bytes = stream.GetBuffer ();
  316. AssertEquals ("test#01", 256, bytes.Length);
  317. AssertEquals ("test#02", 192, bytes [0]);
  318. AssertEquals ("test#03", 18, bytes [1]);
  319. AssertEquals ("test#04", 151, bytes [2]);
  320. AssertEquals ("test#05", 95, bytes [3]);
  321. AssertEquals ("test#06", 209, bytes [4]);
  322. AssertEquals ("test#07", 20, bytes [5]);
  323. AssertEquals ("test#08", 7, bytes [6]);
  324. AssertEquals ("test#09", 0, bytes [7]);
  325. AssertEquals ("test#10", 0, bytes [8]);
  326. AssertEquals ("test#11", 0, bytes [9]);
  327. AssertEquals ("test#12", 0, bytes [10]);
  328. AssertEquals ("test#13", 0, bytes [11]);
  329. AssertEquals ("test#14", 0, bytes [12]);
  330. AssertEquals ("test#15", 0, bytes [13]);
  331. AssertEquals ("test#16", 2, bytes [14]);
  332. AssertEquals ("test#17", 0, bytes [15]);
  333. AssertEquals ("test#18", 125, bytes [16]);
  334. AssertEquals ("test#19", 149, bytes [17]);
  335. AssertEquals ("test#20", 217, bytes [18]);
  336. AssertEquals ("test#21", 172, bytes [19]);
  337. AssertEquals ("test#22", 239, bytes [20]);
  338. AssertEquals ("test#23", 244, bytes [21]);
  339. AssertEquals ("test#24", 31, bytes [22]);
  340. AssertEquals ("test#25", 0, bytes [23]);
  341. AssertEquals ("test#26", 0, bytes [24]);
  342. AssertEquals ("test#27", 0, bytes [25]);
  343. AssertEquals ("test#28", 0, bytes [26]);
  344. AssertEquals ("test#29", 0, bytes [27]);
  345. AssertEquals ("test#30", 0, bytes [28]);
  346. AssertEquals ("test#31", 0, bytes [29]);
  347. AssertEquals ("test#32", 0, bytes [30]);
  348. AssertEquals ("test#33", 128, bytes [31]);
  349. AssertEquals ("test#34", 0, bytes [32]);
  350. AssertEquals ("test#35", 0, bytes [33]);
  351. AssertEquals ("test#36", 0, bytes [34]);
  352. AssertEquals ("test#37", 0, bytes [35]);
  353. AssertEquals ("test#38", 0, bytes [36]);
  354. AssertEquals ("test#39", 0, bytes [37]);
  355. AssertEquals ("test#40", 0, bytes [38]);
  356. AssertEquals ("test#41", 0, bytes [39]);
  357. AssertEquals ("test#42", 0, bytes [40]);
  358. AssertEquals ("test#43", 0, bytes [41]);
  359. AssertEquals ("test#44", 0, bytes [42]);
  360. AssertEquals ("test#45", 0, bytes [43]);
  361. AssertEquals ("test#46", 0, bytes [44]);
  362. AssertEquals ("test#47", 0, bytes [45]);
  363. AssertEquals ("test#48", 0, bytes [46]);
  364. }
  365. [Test]
  366. public void WriteFloat ()
  367. {
  368. MemoryStream stream = new MemoryStream ();
  369. BinaryWriter writer = new BinaryWriter (stream);
  370. float f1 = 1.543E+10F;
  371. float f2 = -9.6534E-6f;
  372. writer.Write (f1);
  373. writer.Write (f2);
  374. byte [] bytes = stream.GetBuffer ();
  375. AssertEquals ("test#01", 256, bytes.Length);
  376. AssertEquals ("test#02", 199, bytes [0]);
  377. AssertEquals ("test#03", 236, bytes [1]);
  378. AssertEquals ("test#04", 101, bytes [2]);
  379. AssertEquals ("test#05", 80, bytes [3]);
  380. AssertEquals ("test#06", 10, bytes [4]);
  381. AssertEquals ("test#07", 245, bytes [5]);
  382. AssertEquals ("test#08", 33, bytes [6]);
  383. AssertEquals ("test#09", 183, bytes [7]);
  384. AssertEquals ("test#10", 0, bytes [8]);
  385. AssertEquals ("test#11", 0, bytes [9]);
  386. }
  387. [Test]
  388. public void WriteDouble ()
  389. {
  390. MemoryStream stream = new MemoryStream ();
  391. BinaryWriter writer = new BinaryWriter (stream);
  392. double d1 = 1.543E+100;
  393. double d2 = -9.6534E-129;
  394. writer.Write (d1);
  395. writer.Write (d2);
  396. byte [] bytes = stream.GetBuffer ();
  397. AssertEquals ("test#01", 256, bytes.Length);
  398. AssertEquals ("test#02", 49, bytes [0]);
  399. AssertEquals ("test#03", 69, bytes [1]);
  400. AssertEquals ("test#04", 15, bytes [2]);
  401. AssertEquals ("test#05", 157, bytes [3]);
  402. AssertEquals ("test#06", 211, bytes [4]);
  403. AssertEquals ("test#07", 55, bytes [5]);
  404. AssertEquals ("test#08", 188, bytes [6]);
  405. AssertEquals ("test#09", 84, bytes [7]);
  406. AssertEquals ("test#10", 76, bytes [8]);
  407. AssertEquals ("test#11", 59, bytes [9]);
  408. AssertEquals ("test#12", 59, bytes [10]);
  409. AssertEquals ("test#13", 60, bytes [11]);
  410. AssertEquals ("test#14", 4, bytes [12]);
  411. AssertEquals ("test#15", 196, bytes [13]);
  412. AssertEquals ("test#16", 90, bytes [14]);
  413. AssertEquals ("test#17", 165, bytes [15]);
  414. AssertEquals ("test#18", 0, bytes [16]);
  415. }
  416. [Test]
  417. public void WriteByteAndChar ()
  418. {
  419. byte b1 = 12;
  420. byte b2 = 64;
  421. char c1 = '-';
  422. char c2 = 'M';
  423. MemoryStream stream = new MemoryStream ();
  424. BinaryWriter writer = new BinaryWriter (stream);
  425. writer.Write (b1);
  426. writer.Write (c1);
  427. writer.Write (b2);
  428. writer.Write (c2);
  429. byte [] bytes = stream.GetBuffer ();
  430. AssertEquals ("test#01", 256, bytes.Length);
  431. AssertEquals ("test#02", 12, bytes [0]);
  432. AssertEquals ("test#03", 45, bytes [1]);
  433. AssertEquals ("test#04", 64, bytes [2]);
  434. AssertEquals ("test#05", 77, bytes [3]);
  435. AssertEquals ("test#06", 0, bytes [4]);
  436. }
  437. [Test]
  438. public void WriteString ()
  439. {
  440. MemoryStream stream = new MemoryStream ();
  441. BinaryWriter writer = new BinaryWriter (stream);
  442. string s1 = "abc";
  443. string s2 = "DeF\n";
  444. writer.Write (s1);
  445. writer.Write (s2);
  446. byte [] bytes = stream.GetBuffer ();
  447. AssertEquals ("test#01", 256, bytes.Length);
  448. AssertEquals ("test#02", 3, bytes [0]);
  449. AssertEquals ("test#03", 97, bytes [1]);
  450. AssertEquals ("test#04", 98, bytes [2]);
  451. AssertEquals ("test#05", 99, bytes [3]);
  452. AssertEquals ("test#06", 4, bytes [4]);
  453. AssertEquals ("test#07", 68, bytes [5]);
  454. AssertEquals ("test#08", 101, bytes [6]);
  455. AssertEquals ("test#09", 70, bytes [7]);
  456. AssertEquals ("test#10", 10, bytes [8]);
  457. AssertEquals ("test#11", 0, bytes [9]);
  458. }
  459. private void DeleteFile (string path)
  460. {
  461. if (File.Exists (path))
  462. File.Delete (path);
  463. }
  464. }
  465. }