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