2009-06-26 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mcs / class / corlib / Test / System.Text / EncoderReplacementFallbackTest.cs
index f18ca4923148d37eb4f813d4020c291bffd9ff55..c03edc4d0b20a6625296810ea901151ca9083980 100644 (file)
@@ -33,13 +33,14 @@ namespace MonoTests.System.Text
 
                        f = Encoding.UTF8.EncoderFallback as EncoderReplacementFallback;
                        Assert.IsNotNull (f, "#5");
-                       Assert.AreEqual (String.Empty, f.DefaultString, "#6");
-                       Assert.AreEqual (0, f.MaxCharCount, "#7");
+                       Assert.AreEqual ("\uFFFD", f.DefaultString, "#6");
+                       Assert.AreEqual (1, f.MaxCharCount, "#7");
 
-                       f = new MyEncoding ().EncoderFallback as EncoderReplacementFallback;
-                       Assert.IsNotNull (f, "#8");
-                       Assert.AreEqual (String.Empty, f.DefaultString, "#9");
-                       Assert.AreEqual (0, f.MaxCharCount, "#10");
+                       // after beta2 this test became invalid.
+                       //f = new MyEncoding ().EncoderFallback as EncoderReplacementFallback;
+                       //Assert.IsNotNull (f, "#8");
+                       //Assert.AreEqual (String.Empty, f.DefaultString, "#9");
+                       //Assert.AreEqual (0, f.MaxCharCount, "#10");
 
                        f = EncoderFallback.ReplacementFallback as EncoderReplacementFallback;
                        Assert.AreEqual ("?", f.DefaultString, "#11");
@@ -55,32 +56,41 @@ namespace MonoTests.System.Text
                }
 
                [Test]
-               [ExpectedException (typeof (InvalidOperationException))]
                public void DontChangeReadOnlyCodePageEncoderFallback ()
                {
-                       Encoding.GetEncoding (932).EncoderFallback =
-                               new EncoderReplacementFallback ();
+                       Encoding encoding = Encoding.GetEncoding (Encoding.Default.CodePage);
+                       try {
+                               encoding.EncoderFallback = new EncoderReplacementFallback ();
+                               Assert.Fail ("#1");
+                       } catch (InvalidOperationException ex) {
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                       }
                }
 
                [Test]
-               // Don't throw an exception
-               public void SetEncoderFallback ()
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void CustomEncodingSetEncoderFallback ()
                {
                        new MyEncoding ().EncoderFallback =
                                new EncoderReplacementFallback ();
-                       new MyEncoding (1).EncoderFallback =
-                               new EncoderReplacementFallback ();
-                       Encoding.Default.GetEncoder ().Fallback =
-                               new EncoderReplacementFallback ();
                }
 
                [Test]
-               [ExpectedException (typeof (ArgumentNullException))]
+               [ExpectedException (typeof (InvalidOperationException))]
                public void EncodingSetNullEncoderFallback ()
                {
-                       new MyEncoding ().EncoderFallback = null;
+                       Encoding.Default.EncoderFallback = null;
                }
 
+               [Test]
+               // Don't throw an exception
+               public void SetEncoderFallback ()
+               {
+                       Encoding.Default.GetEncoder ().Fallback =
+                               new EncoderReplacementFallback ();
+               }
 
                [Test]
                [ExpectedException (typeof (ArgumentNullException))]
@@ -88,6 +98,16 @@ namespace MonoTests.System.Text
                {
                        Encoding.Default.GetEncoder ().Fallback = null;
                }
+
+               [Test]
+               public void Latin1Replacement ()
+                       // coz Latin1 is easy single byte encoding.
+               {
+                       Encoding enc = Encoding.GetEncoding (28591); // Latin1
+                       byte [] reference = new byte [] {0x58, 0x58, 0x3F, 0x3F, 0x3F, 0x5A, 0x5A};
+                       byte [] bytes = enc.GetBytes ("XX\u3007\u4E00\u9780ZZ");
+                       Assert.AreEqual (reference, bytes, "#1");
+               }
        }
 }