[corlib] Fix UnicodeEncoding GetMaxByteCount and GetMaxCharCount to return the same...
authorRodrigo Kumpera <kumpera@gmail.com>
Wed, 1 Oct 2014 19:10:37 +0000 (15:10 -0400)
committerRodrigo Kumpera <kumpera@gmail.com>
Wed, 1 Oct 2014 19:11:20 +0000 (15:11 -0400)
mcs/class/corlib/System.Text/UnicodeEncoding.cs
mcs/class/corlib/Test/System.Text/UnicodeEncodingTest.cs

index edb57e69ca22a8c8fbcd998e08ed54dd4bbd1e56..48077a2452b3bfbb64ca3658268b1680397e352d 100644 (file)
@@ -345,7 +345,7 @@ public class UnicodeEncoding : Encoding
                if (charCount < 0) {
                        throw new ArgumentOutOfRangeException ("charCount", _("ArgRange_NonNegative"));
                }
-               return charCount * 2;
+               return charCount * 2 + 2;
        }
 
        // Get the maximum number of characters needed to decode a
@@ -356,7 +356,7 @@ public class UnicodeEncoding : Encoding
                        throw new ArgumentOutOfRangeException
                                ("byteCount", _("ArgRange_NonNegative"));
                }
-               return byteCount / 2;
+               return (byteCount + 1) / 2 + 1;
        }
 
        // Get a Unicode-specific decoder that is attached to this instance.
index 9938bcef1ae1c92f007b804f1a6de9b82dfb2b52..e780524afe159689a756d40445428ab7361b38d2 100644 (file)
@@ -164,34 +164,18 @@ namespace MonoTests.System.Text
                 }
                 
                 [Test]
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
                 public void TestMaxCharCount()
                 {
                         UnicodeEncoding UnicodeEnc = new UnicodeEncoding ();
-#if NET_2_0
-                        // where is this extra 1 coming from?
                         Assert.AreEqual (26, UnicodeEnc.GetMaxCharCount(50), "UTF #1");
                         Assert.AreEqual (27, UnicodeEnc.GetMaxCharCount(51), "UTF #2");
-#else
-                        Assert.AreEqual (25, UnicodeEnc.GetMaxCharCount(50), "UTF #1");
-#endif
                 }
         
                 [Test]
-#if NET_2_0
-               [Category ("NotWorking")]
-#endif
                 public void TestMaxByteCount()
                 {
                         UnicodeEncoding UnicodeEnc = new UnicodeEncoding ();
-#if NET_2_0
-                        // is this extra 2 BOM?
                         Assert.AreEqual (102, UnicodeEnc.GetMaxByteCount(50), "UTF #1");
-#else
-                        Assert.AreEqual (100, UnicodeEnc.GetMaxByteCount(50), "UTF #1");
-#endif
                 }
 
                [Test]
@@ -257,5 +241,27 @@ namespace MonoTests.System.Text
                        Assert.AreEqual (2, s.Length, "Length");
                        Assert.AreEqual (65533, (int) s [1], "1");
                }
+
+               [Test]
+               public void GetMaxByteCountIncludesBOM ()
+               {
+                       Assert.AreEqual (2, Encoding.Unicode.GetMaxByteCount (0), "#1");
+                       Assert.AreEqual (4, Encoding.Unicode.GetMaxByteCount (1), "#2");
+                       Assert.AreEqual (6, Encoding.Unicode.GetMaxByteCount (2), "#3");
+                       Assert.AreEqual (10, Encoding.Unicode.GetMaxByteCount (4), "#4");
+                       Assert.AreEqual (20, Encoding.Unicode.GetMaxByteCount (9), "#5");
+                       Assert.AreEqual (22, Encoding.Unicode.GetMaxByteCount (10), "#6");
+               }
+
+               [Test]
+               public void GetMaxCharCountRoundsCorrectly ()
+               {
+                       Assert.AreEqual (1, Encoding.Unicode.GetMaxCharCount (0), "#1");
+                       Assert.AreEqual (2, Encoding.Unicode.GetMaxCharCount (1), "#2");
+                       Assert.AreEqual (2, Encoding.Unicode.GetMaxCharCount (2), "#3");
+                       Assert.AreEqual (3, Encoding.Unicode.GetMaxCharCount (4), "#4");
+                       Assert.AreEqual (6, Encoding.Unicode.GetMaxCharCount (9), "#5");
+                       Assert.AreEqual (6, Encoding.Unicode.GetMaxCharCount (10), "#6");
+               }
        }
 }