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