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 : Assertion {
\r
21 string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
\r
24 protected void SetUp() {
\r
25 if (Directory.Exists (TempFolder))
\r
26 Directory.Delete (TempFolder, true);
\r
27 Directory.CreateDirectory (TempFolder);
\r
31 public void TearDown()
\r
33 if (Directory.Exists (TempFolder))
\r
34 Directory.Delete (TempFolder, true);
\r
40 MemoryStream stream = new MemoryStream ();
\r
41 BinaryWriter writer = new BinaryWriter (stream);
\r
42 AssertEquals ("test#01", true, writer.BaseStream.CanRead);
\r
43 AssertEquals ("test#02", true, writer.BaseStream.CanSeek);
\r
44 AssertEquals ("test#03", true, writer.BaseStream.CanWrite);
\r
46 writer = new BinaryWriter (stream, new ASCIIEncoding ());
\r
47 AssertEquals ("test#04", true, writer.BaseStream.CanRead);
\r
48 AssertEquals ("test#05", true, writer.BaseStream.CanSeek);
\r
49 AssertEquals ("test#06", true, writer.BaseStream.CanWrite);
\r
54 /// Throws an exception if stream is null
\r
57 [ExpectedException(typeof(ArgumentNullException))]
\r
58 public void CtorNullExceptionStream ()
\r
60 BinaryWriter reader = new BinaryWriter (null);
\r
64 /// Throws an exception if encoding is null
\r
67 [ExpectedException(typeof(ArgumentNullException))]
\r
68 public void CtorNullExceptionStreamEncoding ()
\r
70 MemoryStream stream = new MemoryStream ();
\r
71 BinaryWriter reader = new BinaryWriter (stream, null);
\r
75 /// Throws an exception if stream is closed
\r
78 [ExpectedException(typeof(ArgumentException))]
\r
79 public void CtorExceptionStreamClosed ()
\r
81 MemoryStream stream = new MemoryStream ();
\r
83 BinaryWriter writer = new BinaryWriter (stream);
\r
87 /// Throws an exception if stream does not support writing
\r
90 [ExpectedException(typeof(ArgumentException))]
\r
91 public void CtorArgumentExceptionStreamCannotWrite ()
\r
93 string path = TempFolder + "/BinaryWriterTest.1";
\r
95 FileStream stream = null;
\r
96 BinaryWriter reader = null;
\r
99 stream = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Read);
\r
100 reader = new BinaryWriter (stream);
\r
102 if (reader != null)
\r
104 if (stream != null)
\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 AssertEquals ("test#01", 4, bytes [0]);
\r
119 AssertEquals ("test#02", 116, bytes [1]);
\r
120 AssertEquals ("test#03", 42, bytes [2]);
\r
121 AssertEquals ("test#04", 115, bytes [3]);
\r
122 AssertEquals ("test#05", 116, bytes [4]);
\r
123 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 AssertEquals ("test#07", 8, bytes [0]);
\r
131 AssertEquals ("test#08", 116, bytes [1]);
\r
132 AssertEquals ("test#09", 0, bytes [2]);
\r
133 AssertEquals ("test#10", 42, bytes [3]);
\r
134 AssertEquals ("test#11", 0, bytes [4]);
\r
135 AssertEquals ("test#12", 115, bytes [5]);
\r
136 AssertEquals ("test#13", 0, bytes [6]);
\r
137 AssertEquals ("test#14", 116, bytes [7]);
\r
138 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 AssertEquals ("test#16", 8, bytes [0]);
\r
146 AssertEquals ("test#17", 116, bytes [1]);
\r
147 AssertEquals ("test#18", 43, bytes [2]);
\r
148 AssertEquals ("test#19", 65, bytes [3]);
\r
149 AssertEquals ("test#21", 67, bytes [4]);
\r
150 AssertEquals ("test#22", 111, bytes [5]);
\r
151 AssertEquals ("test#23", 45, bytes [6]);
\r
152 AssertEquals ("test#24", 115, bytes [7]);
\r
153 AssertEquals ("test#25", 116, bytes [8]);
\r
154 AssertEquals ("test#26", 0, bytes [9]);
\r
155 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 AssertEquals ("test#28", 4, bytes [0]);
\r
162 AssertEquals ("test#29", 116, bytes [1]);
\r
163 AssertEquals ("test#30", 42, bytes [2]);
\r
164 AssertEquals ("test#31", 115, bytes [3]);
\r
165 AssertEquals ("test#32", 116, bytes [4]);
\r
166 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 AssertEquals ("test#01", false, writer.BaseStream.CanRead);
\r
206 AssertEquals ("test#01", false, writer.BaseStream.CanWrite);
\r
207 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 AssertEquals ("test#01", 512, bytes.Length);
\r
228 AssertEquals ("test#02", 4, bytes [0]);
\r
229 AssertEquals ("test#03", 84, bytes [1]);
\r
230 AssertEquals ("test#04", 1, bytes [2]);
\r
231 AssertEquals ("test#05", 45, bytes [3]);
\r
232 AssertEquals ("test#06", 116, bytes [4]);
\r
233 AssertEquals ("test#07", 0, bytes [5]);
\r
234 AssertEquals ("test#08", 0, bytes [6]);
\r
235 AssertEquals ("test#09", 0, bytes [7]);
\r
236 AssertEquals ("test#10", 1, bytes [8]);
\r
237 AssertEquals ("test#11", 45, bytes [9]);
\r
238 AssertEquals ("test#12", 0, bytes [10]);
\r
239 AssertEquals ("test#13", 0, bytes [11]);
\r
240 AssertEquals ("test#14", 0, bytes [12]);
\r
241 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 AssertEquals ("test#01", 256, bytes.Length);
\r
267 AssertEquals ("test#02", 109, bytes [0]);
\r
268 AssertEquals ("test#03", 111, bytes [1]);
\r
269 AssertEquals ("test#04", 110, bytes [2]);
\r
270 AssertEquals ("test#05", 111, bytes [3]);
\r
271 AssertEquals ("test#06", 58, bytes [4]);
\r
272 AssertEquals ("test#07", 58, bytes [5]);
\r
273 AssertEquals ("test#08", 58, bytes [6]);
\r
274 AssertEquals ("test#09", 58, bytes [7]);
\r
275 AssertEquals ("test#10", 79, bytes [8]);
\r
276 AssertEquals ("test#11", 78, bytes [9]);
\r
277 AssertEquals ("test#12", 79, bytes [10]);
\r
278 AssertEquals ("test#13", 77, bytes [11]);
\r
279 AssertEquals ("test#14", 0, bytes [12]);
\r
280 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 AssertEquals ("test#01", 256, bytes.Length);
\r
294 AssertEquals ("test#02", 1, bytes [0]);
\r
295 AssertEquals ("test#03", 2, bytes [1]);
\r
296 AssertEquals ("test#04", 3, bytes [2]);
\r
297 AssertEquals ("test#05", 4, bytes [3]);
\r
298 AssertEquals ("test#06", 5, bytes [4]);
\r
299 AssertEquals ("test#07", 6, bytes [5]);
\r
300 AssertEquals ("test#08", 6, bytes [6]);
\r
301 AssertEquals ("test#09", 5, bytes [7]);
\r
302 AssertEquals ("test#10", 4, bytes [8]);
\r
303 AssertEquals ("test#11", 3, bytes [9]);
\r
304 AssertEquals ("test#12", 2, bytes [10]);
\r
305 AssertEquals ("test#13", 1, bytes [11]);
\r
306 AssertEquals ("test#14", 0, bytes [12]);
\r
307 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 AssertEquals ("test#01", 256, bytes.Length);
\r
324 AssertEquals ("test#02", 64, bytes [0]);
\r
325 AssertEquals ("test#03", 0, bytes [1]);
\r
328 bytes = stream.GetBuffer ();
\r
329 AssertEquals ("test#04", 256, bytes.Length);
\r
330 AssertEquals ("test#05", 64, bytes [0]);
\r
331 AssertEquals ("test#06", 0, bytes [1]);
\r
332 AssertEquals ("test#07", 64, bytes [2]);
\r
333 AssertEquals ("test#08", 109, bytes [3]);
\r
334 AssertEquals ("test#09", 218, bytes [4]);
\r
335 AssertEquals ("test#10", 3, bytes [5]);
\r
336 AssertEquals ("test#11", 0, bytes [6]);
\r
339 bytes = stream.GetBuffer ();
\r
340 AssertEquals ("test#12", 256, bytes.Length);
\r
341 AssertEquals ("test#13", 255, bytes [6]);
\r
342 AssertEquals ("test#14", 159, bytes [7]);
\r
343 AssertEquals ("test#15", 114, bytes [8]);
\r
344 AssertEquals ("test#16", 78, bytes [9]);
\r
345 AssertEquals ("test#17", 24, bytes [10]);
\r
346 AssertEquals ("test#18", 9, bytes [11]);
\r
347 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 AssertEquals ("test#01", 256, bytes.Length);
\r
364 AssertEquals ("test#02", 192, bytes [0]);
\r
365 AssertEquals ("test#03", 18, bytes [1]);
\r
366 AssertEquals ("test#04", 151, bytes [2]);
\r
367 AssertEquals ("test#05", 95, bytes [3]);
\r
368 AssertEquals ("test#06", 209, bytes [4]);
\r
369 AssertEquals ("test#07", 20, bytes [5]);
\r
370 AssertEquals ("test#08", 7, bytes [6]);
\r
371 AssertEquals ("test#09", 0, bytes [7]);
\r
372 AssertEquals ("test#10", 0, bytes [8]);
\r
373 AssertEquals ("test#11", 0, bytes [9]);
\r
374 AssertEquals ("test#12", 0, bytes [10]);
\r
375 AssertEquals ("test#13", 0, bytes [11]);
\r
376 AssertEquals ("test#14", 0, bytes [12]);
\r
377 AssertEquals ("test#15", 0, bytes [13]);
\r
378 AssertEquals ("test#16", 2, bytes [14]);
\r
379 AssertEquals ("test#17", 0, bytes [15]);
\r
380 AssertEquals ("test#18", 125, bytes [16]);
\r
381 AssertEquals ("test#19", 149, bytes [17]);
\r
382 AssertEquals ("test#20", 217, bytes [18]);
\r
383 AssertEquals ("test#21", 172, bytes [19]);
\r
384 AssertEquals ("test#22", 239, bytes [20]);
\r
385 AssertEquals ("test#23", 244, bytes [21]);
\r
386 AssertEquals ("test#24", 31, bytes [22]);
\r
387 AssertEquals ("test#25", 0, bytes [23]);
\r
388 AssertEquals ("test#26", 0, bytes [24]);
\r
389 AssertEquals ("test#27", 0, bytes [25]);
\r
390 AssertEquals ("test#28", 0, bytes [26]);
\r
391 AssertEquals ("test#29", 0, bytes [27]);
\r
392 AssertEquals ("test#30", 0, bytes [28]);
\r
393 AssertEquals ("test#31", 0, bytes [29]);
\r
394 AssertEquals ("test#32", 0, bytes [30]);
\r
395 AssertEquals ("test#33", 128, bytes [31]);
\r
396 AssertEquals ("test#34", 0, bytes [32]);
\r
397 AssertEquals ("test#35", 0, bytes [33]);
\r
398 AssertEquals ("test#36", 0, bytes [34]);
\r
399 AssertEquals ("test#37", 0, bytes [35]);
\r
400 AssertEquals ("test#38", 0, bytes [36]);
\r
401 AssertEquals ("test#39", 0, bytes [37]);
\r
402 AssertEquals ("test#40", 0, bytes [38]);
\r
403 AssertEquals ("test#41", 0, bytes [39]);
\r
404 AssertEquals ("test#42", 0, bytes [40]);
\r
405 AssertEquals ("test#43", 0, bytes [41]);
\r
406 AssertEquals ("test#44", 0, bytes [42]);
\r
407 AssertEquals ("test#45", 0, bytes [43]);
\r
408 AssertEquals ("test#46", 0, bytes [44]);
\r
409 AssertEquals ("test#47", 0, bytes [45]);
\r
410 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 AssertEquals ("test#01", 256, bytes.Length);
\r
425 AssertEquals ("test#02", 199, bytes [0]);
\r
426 AssertEquals ("test#03", 236, bytes [1]);
\r
427 AssertEquals ("test#04", 101, bytes [2]);
\r
428 AssertEquals ("test#05", 80, bytes [3]);
\r
429 AssertEquals ("test#06", 10, bytes [4]);
\r
430 AssertEquals ("test#07", 245, bytes [5]);
\r
431 AssertEquals ("test#08", 33, bytes [6]);
\r
432 AssertEquals ("test#09", 183, bytes [7]);
\r
433 AssertEquals ("test#10", 0, bytes [8]);
\r
434 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 AssertEquals ("test#01", 256, bytes.Length);
\r
449 AssertEquals ("test#02", 49, bytes [0]);
\r
450 AssertEquals ("test#03", 69, bytes [1]);
\r
451 AssertEquals ("test#04", 15, bytes [2]);
\r
452 AssertEquals ("test#05", 157, bytes [3]);
\r
453 AssertEquals ("test#06", 211, bytes [4]);
\r
454 AssertEquals ("test#07", 55, bytes [5]);
\r
455 AssertEquals ("test#08", 188, bytes [6]);
\r
456 AssertEquals ("test#09", 84, bytes [7]);
\r
457 AssertEquals ("test#10", 76, bytes [8]);
\r
458 AssertEquals ("test#11", 59, bytes [9]);
\r
459 AssertEquals ("test#12", 59, bytes [10]);
\r
460 AssertEquals ("test#13", 60, bytes [11]);
\r
461 AssertEquals ("test#14", 4, bytes [12]);
\r
462 AssertEquals ("test#15", 196, bytes [13]);
\r
463 AssertEquals ("test#16", 90, bytes [14]);
\r
464 AssertEquals ("test#17", 165, bytes [15]);
\r
465 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 AssertEquals ("test#01", 256, bytes.Length);
\r
484 AssertEquals ("test#02", 12, bytes [0]);
\r
485 AssertEquals ("test#03", 45, bytes [1]);
\r
486 AssertEquals ("test#04", 64, bytes [2]);
\r
487 AssertEquals ("test#05", 77, bytes [3]);
\r
488 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 AssertEquals ("test#01", 256, bytes.Length);
\r
503 AssertEquals ("test#02", 3, bytes [0]);
\r
504 AssertEquals ("test#03", 97, bytes [1]);
\r
505 AssertEquals ("test#04", 98, bytes [2]);
\r
506 AssertEquals ("test#05", 99, bytes [3]);
\r
507 AssertEquals ("test#06", 4, bytes [4]);
\r
508 AssertEquals ("test#07", 68, bytes [5]);
\r
509 AssertEquals ("test#08", 101, bytes [6]);
\r
510 AssertEquals ("test#09", 70, bytes [7]);
\r
511 AssertEquals ("test#10", 10, bytes [8]);
\r
512 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