New test.
[mono.git] / mcs / class / corlib / Test / System.Text / EncoderReplacementFallbackTest.cs
1 //
2 // EncoderReplacementFallback.cs
3 //
4 // Author:
5 //      Atsushi Enomoto  <atsushi@ximian.com>
6 //
7 // Copyright (C) 2005 Novell, Inc.  http://www.novell.com
8 //
9
10 #if NET_2_0
11
12 using System;
13 using System.IO;
14 using System.Text;
15 using NUnit.Framework;
16
17 namespace MonoTests.System.Text
18 {
19         [TestFixture]
20         public class EncoderReplacementFallbackTest
21         {
22                 [Test]
23                 public void Defaults ()
24                 {
25                         EncoderReplacementFallback f =
26                                 new EncoderReplacementFallback ();
27                         Assert.AreEqual ("?", f.DefaultString, "#1");
28                         Assert.AreEqual (1, f.MaxCharCount, "#2");
29
30                         f = new EncoderReplacementFallback (String.Empty);
31                         Assert.AreEqual (String.Empty, f.DefaultString, "#3");
32                         Assert.AreEqual (0, f.MaxCharCount, "#4");
33
34                         f = Encoding.UTF8.EncoderFallback as EncoderReplacementFallback;
35                         Assert.IsNotNull (f, "#5");
36                         Assert.AreEqual (String.Empty, f.DefaultString, "#6");
37                         Assert.AreEqual (0, f.MaxCharCount, "#7");
38
39                         // after beta2 this test became invalid.
40                         //f = new MyEncoding ().EncoderFallback as EncoderReplacementFallback;
41                         //Assert.IsNotNull (f, "#8");
42                         //Assert.AreEqual (String.Empty, f.DefaultString, "#9");
43                         //Assert.AreEqual (0, f.MaxCharCount, "#10");
44
45                         f = EncoderFallback.ReplacementFallback as EncoderReplacementFallback;
46                         Assert.AreEqual ("?", f.DefaultString, "#11");
47                         Assert.AreEqual (1, f.MaxCharCount, "#12");
48                 }
49
50                 [Test]
51                 [ExpectedException (typeof (InvalidOperationException))]
52                 public void DontChangeReadOnlyUTF8EncoderFallback ()
53                 {
54                         Encoding.UTF8.EncoderFallback =
55                                 new EncoderReplacementFallback ();
56                 }
57
58                 [Test]
59                 [ExpectedException (typeof (InvalidOperationException))]
60                 public void DontChangeReadOnlyCodePageEncoderFallback ()
61                 {
62                         Encoding.GetEncoding (932).EncoderFallback =
63                                 new EncoderReplacementFallback ();
64                 }
65
66                 [Test]
67                 [ExpectedException (typeof (InvalidOperationException))]
68                 public void CustomEncodingSetEncoderFallback ()
69                 {
70                         new MyEncoding ().EncoderFallback =
71                                 new EncoderReplacementFallback ();
72                 }
73
74                 [Test]
75                 [ExpectedException (typeof (InvalidOperationException))]
76                 public void EncodingSetNullEncoderFallback ()
77                 {
78                         Encoding.Default.EncoderFallback = null;
79                 }
80
81                 [Test]
82                 // Don't throw an exception
83                 public void SetEncoderFallback ()
84                 {
85                         Encoding.Default.GetEncoder ().Fallback =
86                                 new EncoderReplacementFallback ();
87                 }
88
89                 [Test]
90                 [ExpectedException (typeof (ArgumentNullException))]
91                 public void EncoderSetNullFallback ()
92                 {
93                         Encoding.Default.GetEncoder ().Fallback = null;
94                 }
95
96                 [Test]
97                 public void Latin1Replacement ()
98                         // coz Latin1 is easy single byte encoding.
99                 {
100                         Encoding enc = Encoding.GetEncoding (28591); // Latin1
101                         byte [] reference = new byte [] {0x58, 0x58, 0x3F, 0x3F, 0x3F, 0x5A, 0x5A};
102                         byte [] bytes = enc.GetBytes ("XX\u3007\u4E00\u9780ZZ");
103                         Assert.AreEqual (reference, bytes, "#1");
104                 }
105         }
106 }
107
108 #endif
109