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