fixed tests
[mono.git] / mcs / class / corlib / Test / System.IO / BinaryWriterTest.cs
1 //
2 // System.IO.StringWriter
3 //
4 // Authors: 
5 //      Ville Palo (vi64pa@kolumbus.fi)
6 //
7 // (C) 2003 Ville Palo
8 //
9
10 using NUnit.Framework;
11 using System.IO;
12 using System.Text;
13 using System;
14
15 namespace MonoTests.System.IO {
16
17 [TestFixture]
18 public class BinaryWriterTest : Assertion {
19         
20         
21         string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
22         
23         [SetUp]
24         protected void SetUp() {
25                 if (Directory.Exists (TempFolder))
26                         Directory.Delete (TempFolder, true);
27                 Directory.CreateDirectory (TempFolder);
28         }
29
30         [TearDown]
31         public void TearDown()
32         {
33                 if (Directory.Exists (TempFolder))
34                         Directory.Delete (TempFolder, true);
35         }
36
37         [Test]
38         public void Ctor ()
39         {
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);
45                 
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);                     
50                 
51         }
52
53         /// <summary>
54         /// Throws an exception if stream is null
55         /// </summary>
56         [Test]
57         [ExpectedException(typeof(ArgumentNullException))]
58         public void CtorNullExceptionStream () 
59         {
60                 BinaryWriter reader = new BinaryWriter (null);
61         }
62
63         /// <summary>
64         /// Throws an exception if encoding is null
65         /// </summary>
66         [Test]
67         [ExpectedException(typeof(ArgumentNullException))]
68         public void CtorNullExceptionStreamEncoding () 
69         {
70                 MemoryStream stream = new MemoryStream ();
71                 BinaryWriter reader = new BinaryWriter (stream, null);
72         }
73         
74         /// <summary>
75         /// Throws an exception if stream is closed
76         /// </summary>
77         [Test]
78         [ExpectedException(typeof(ArgumentException))]
79         public void CtorExceptionStreamClosed () 
80         {
81                 MemoryStream stream = new MemoryStream ();
82                 stream.Close ();                
83                 BinaryWriter writer = new BinaryWriter (stream);
84         }
85         
86         /// <summary>
87         /// Throws an exception if stream does not support writing
88         /// </summary>
89         [Test]
90         [ExpectedException(typeof(ArgumentException))]
91         public void CtorArgumentExceptionStreamCannotWrite ()
92         {
93                 string path = TempFolder + "/BinaryWriterTest.1";
94                 DeleteFile (path);
95                 FileStream stream = null;
96                 BinaryWriter reader = null;
97                         
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);
107                 }
108         }
109
110         [Test]
111         public void Encoding ()
112         {
113                 MemoryStream stream = new MemoryStream ();
114                 BinaryWriter writer = new BinaryWriter (stream);
115                 writer.Write ("t*st");
116                 
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]);
124                 
125                 stream = new MemoryStream ();
126                 writer = new BinaryWriter (stream, new UnicodeEncoding ());
127                 writer.Write ("t*st");
128                 
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]);
139
140                 stream = new MemoryStream ();
141                 writer = new BinaryWriter (stream, new UTF7Encoding ());
142                 writer.Write ("t*st");
143                 
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]);                
156
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]);
167         }
168         
169         [Test]
170         [ExpectedException(typeof(ObjectDisposedException))]
171         public void Close1 ()
172         {
173                 MemoryStream stream = new MemoryStream ();
174                 BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
175                 writer.Close ();
176                 writer.Write ("Test");  
177         }
178
179         [Test]
180         public void Close2 ()
181         {
182                 MemoryStream stream = new MemoryStream ();
183                 BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
184                 writer.Close ();
185                 writer.Flush ();
186                 stream.Flush ();
187         }
188
189         [Test]
190         [ExpectedException(typeof(ObjectDisposedException))]
191         public void Close3 ()
192         {
193                 MemoryStream stream = new MemoryStream ();
194                 BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
195                 writer.Close ();
196                 writer.Seek (1, SeekOrigin.Begin);
197         }
198         
199         [Test]
200         public void Close4 ()
201         {
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);             
208         }
209         
210         [Test]
211         public void Seek ()
212         {
213                 MemoryStream stream = new MemoryStream ();
214                 BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
215                 
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 ("-");
225                 
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]);                               
242         }
243         
244         [Test]
245         [ExpectedException(typeof(IOException))]
246         public void SeekException ()
247         {
248                 MemoryStream stream = new MemoryStream ();
249                 BinaryWriter writer = new BinaryWriter (stream);
250                 
251                 writer.Write ("Test");
252                 writer.Seek (-12, SeekOrigin.Begin);            
253         }
254         
255         [Test]
256         public void WriteCharArray ()
257         {
258                 MemoryStream stream = new MemoryStream ();
259                 BinaryWriter writer = new BinaryWriter (stream);
260                 
261                 writer.Write (new char [] {'m', 'o', 'n', 'o', ':', ':'});
262                 writer.Write (new char [] {':', ':', 'O', 'N', 'O', 'M'});
263
264                 byte [] bytes = stream.GetBuffer ();
265                 
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]);                
281         }
282         
283         [Test]
284         public void WriteByteArray ()
285         {
286                 MemoryStream stream = new MemoryStream ();
287                 BinaryWriter writer = new BinaryWriter (stream);                
288                 
289                 writer.Write (new byte [] {1, 2, 3, 4, 5, 6});
290                 writer.Write (new byte [] {6, 5, 4, 3, 2, 1});
291
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]);                
308                 
309         }
310
311         [Test]
312         public void WriteInt ()
313         {
314                 short s = 64;
315                 int i = 64646464;
316                 long l = 9999999999999;
317                 
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]);
326                 
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]);
337
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]);
348         }
349         
350         [Test]
351         public void WriteDecimal ()
352         {
353                 MemoryStream stream = new MemoryStream ();
354                 BinaryWriter writer = new BinaryWriter (stream);
355         
356                 decimal d1 = 19932143214312.32M;
357                 decimal d2 = -8995034512332157M;
358                 
359                 writer.Write (d1);
360                 writer.Write (d2);
361                 byte [] bytes = stream.GetBuffer ();
362                 
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]);                
411         }
412         
413         [Test]
414 #if TARGET_JVM
415     [Category("NotWorking")]
416 #endif
417         public void WriteFloat ()
418         {
419                 MemoryStream stream = new MemoryStream ();
420                 BinaryWriter writer = new BinaryWriter (stream);
421                 float f1 = 1.543E+10F;
422                 float f2 = -9.6534E-6f;
423                 writer.Write (f1);
424                 writer.Write (f2);
425                 
426                 byte [] bytes = stream.GetBuffer ();
427                 AssertEquals ("test#01", 256, bytes.Length);
428                 AssertEquals ("test#02", 199, bytes [0]);
429                 AssertEquals ("test#03", 236, bytes [1]);
430                 AssertEquals ("test#04", 101, bytes [2]);
431                 AssertEquals ("test#05", 80, bytes [3]);
432                 AssertEquals ("test#06", 10, bytes [4]);
433                 AssertEquals ("test#07", 245, bytes [5]);
434                 AssertEquals ("test#08", 33, bytes [6]);
435                 AssertEquals ("test#09", 183, bytes [7]);
436                 AssertEquals ("test#10", 0, bytes [8]);
437                 AssertEquals ("test#11", 0, bytes [9]);         
438         }
439
440         [Test]
441         public void WriteDouble ()
442         {
443                 MemoryStream stream = new MemoryStream ();
444                 BinaryWriter writer = new BinaryWriter (stream);
445                 double d1 = 1.543E+100;
446                 double d2 = -9.6534E-129;
447                 writer.Write (d1);
448                 writer.Write (d2);
449                 
450                 byte [] bytes = stream.GetBuffer ();
451                 AssertEquals ("test#01", 256, bytes.Length);
452                 AssertEquals ("test#02", 49, bytes [0]);
453                 AssertEquals ("test#03", 69, bytes [1]);
454                 AssertEquals ("test#04", 15, bytes [2]);
455                 AssertEquals ("test#05", 157, bytes [3]);
456                 AssertEquals ("test#06", 211, bytes [4]);
457                 AssertEquals ("test#07", 55, bytes [5]);
458                 AssertEquals ("test#08", 188, bytes [6]);
459                 AssertEquals ("test#09", 84, bytes [7]);
460                 AssertEquals ("test#10", 76, bytes [8]);
461                 AssertEquals ("test#11", 59, bytes [9]);
462                 AssertEquals ("test#12", 59, bytes [10]);
463                 AssertEquals ("test#13", 60, bytes [11]);
464                 AssertEquals ("test#14", 4, bytes [12]);
465                 AssertEquals ("test#15", 196, bytes [13]);
466                 AssertEquals ("test#16", 90, bytes [14]);
467                 AssertEquals ("test#17", 165, bytes [15]);
468                 AssertEquals ("test#18", 0, bytes [16]);
469         }
470         
471         [Test]
472         public void WriteByteAndChar ()
473         {
474                 byte b1 = 12;
475                 byte b2 = 64;
476                 char c1 = '-';
477                 char c2 = 'M';
478                 MemoryStream stream = new MemoryStream ();
479                 BinaryWriter writer = new BinaryWriter (stream);
480                 writer.Write (b1);
481                 writer.Write (c1);
482                 writer.Write (b2);
483                 writer.Write (c2);
484                 
485                 byte [] bytes = stream.GetBuffer ();
486                 AssertEquals ("test#01", 256, bytes.Length);
487                 AssertEquals ("test#02", 12, bytes [0]);
488                 AssertEquals ("test#03", 45, bytes [1]);
489                 AssertEquals ("test#04", 64, bytes [2]);
490                 AssertEquals ("test#05", 77, bytes [3]);
491                 AssertEquals ("test#06", 0, bytes [4]);
492         }
493         
494         [Test]
495         public void WriteString ()
496         {
497                 MemoryStream stream = new MemoryStream ();
498                 BinaryWriter writer = new BinaryWriter (stream);
499                 string s1 = "abc";
500                 string s2 = "DeF\n";
501                 writer.Write (s1);
502                 writer.Write (s2);
503
504                 byte [] bytes = stream.GetBuffer ();
505                 AssertEquals ("test#01", 256, bytes.Length);
506                 AssertEquals ("test#02", 3, bytes [0]);
507                 AssertEquals ("test#03", 97, bytes [1]);
508                 AssertEquals ("test#04", 98, bytes [2]);
509                 AssertEquals ("test#05", 99, bytes [3]);
510                 AssertEquals ("test#06", 4, bytes [4]);
511                 AssertEquals ("test#07", 68, bytes [5]);
512                 AssertEquals ("test#08", 101, bytes [6]);
513                 AssertEquals ("test#09", 70, bytes [7]);
514                 AssertEquals ("test#10", 10, bytes [8]);
515                 AssertEquals ("test#11", 0, bytes [9]);         
516         }
517
518         private void DeleteFile (string path)
519         {
520                 if (File.Exists (path))
521                         File.Delete (path);
522         }
523 }
524
525 }
526