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