Merge pull request #730 from LogosBible/locale-changes
[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 ("\uFFFD", f.DefaultString, "#6");
37                         Assert.AreEqual (1, 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                 public void DontChangeReadOnlyCodePageEncoderFallback ()
60                 {
61                         Encoding encoding = Encoding.GetEncoding (Encoding.Default.CodePage);
62                         try {
63                                 encoding.EncoderFallback = new EncoderReplacementFallback ();
64                                 Assert.Fail ("#1");
65                         } catch (InvalidOperationException ex) {
66                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
67                                 Assert.IsNull (ex.InnerException, "#3");
68                                 Assert.IsNotNull (ex.Message, "#4");
69                         }
70                 }
71
72                 [Test]
73                 [ExpectedException (typeof (InvalidOperationException))]
74                 public void CustomEncodingSetEncoderFallback ()
75                 {
76                         new MyEncoding ().EncoderFallback =
77                                 new EncoderReplacementFallback ();
78                 }
79
80                 [Test]
81                 [ExpectedException (typeof (InvalidOperationException))]
82                 public void EncodingSetNullEncoderFallback ()
83                 {
84                         Encoding.Default.EncoderFallback = null;
85                 }
86
87                 [Test]
88                 // Don't throw an exception
89                 public void SetEncoderFallback ()
90                 {
91                         Encoding.Default.GetEncoder ().Fallback =
92                                 new EncoderReplacementFallback ();
93                 }
94
95                 [Test]
96                 [ExpectedException (typeof (ArgumentNullException))]
97                 public void EncoderSetNullFallback ()
98                 {
99                         Encoding.Default.GetEncoder ().Fallback = null;
100                 }
101
102                 [Test]
103                 public void Latin1Replacement ()
104                         // coz Latin1 is easy single byte encoding.
105                 {
106                         Encoding enc = Encoding.GetEncoding (28591); // Latin1
107                         byte [] reference = new byte [] {0x58, 0x58, 0x3F, 0x3F, 0x3F, 0x5A, 0x5A};
108                         byte [] bytes = enc.GetBytes ("XX\u3007\u4E00\u9780ZZ");
109                         Assert.AreEqual (reference, bytes, "#1");
110                 }
111         }
112 }
113
114 #endif
115