Merge pull request #1222 from LogosBible/uri-trycreate
[mono.git] / mcs / class / I18N / CJK / Test / I18N.CJK.Test.cs
index dc093c8b0f061bdea2df81fa7ff5fbd957279863..12a9d47bb622417260d6ce808e5e0b9ea7a38aa1 100644 (file)
@@ -17,11 +17,13 @@ namespace MonoTests.I18N.CJK
        [TestFixture]
        public class TestCJK
        {
+               private global::I18N.Common.Manager Manager = global::I18N.Common.Manager.PrimaryManager;
+
                void AssertEncode (string utf8file, string decfile, int codepage)
                {
                        string decoded = null;
                        byte [] encoded = null;
-                       using (StreamReader sr = new StreamReader (utf8file,
+                       using (StreamReader sr = new StreamReader (utf8file, 
                                Encoding.UTF8)) {
                                decoded = sr.ReadToEnd ();
                        }
@@ -29,7 +31,7 @@ namespace MonoTests.I18N.CJK
                                encoded = new byte [fs.Length];
                                fs.Read (encoded, 0, (int) fs.Length);
                        }
-                       Encoding enc = Encoding.GetEncoding (codepage);
+                       Encoding enc = Manager.GetEncoding (codepage);
                        byte [] actual;
 
                        // simple string case
@@ -61,7 +63,7 @@ namespace MonoTests.I18N.CJK
                                encoded = new byte [fs.Length];
                                fs.Read (encoded, 0, (int) fs.Length);
                        }
-                       Encoding enc = Encoding.GetEncoding (codepage);
+                       Encoding enc = Manager.GetEncoding (codepage);
                        char [] actual;
 
                        Assert.AreEqual (decoded.Length,
@@ -82,12 +84,31 @@ namespace MonoTests.I18N.CJK
                        AssertEncode ("Test/texts/chinese-utf8.txt", "Test/texts/chinese-936.txt", 936);
                }
 
+               [Test]
+               public void CP936_Encode3 ()
+               {
+                       AssertEncode("Test/texts/chinese3-utf8.txt", "Test/texts/chinese3-936.txt", 936);
+               }
+
                [Test]
                public void CP936_Decode ()
                {
                        AssertDecode ("Test/texts/chinese-utf8.txt", "Test/texts/chinese-936.txt", 936);
                }
 
+               [Test]
+               public void Bug_1531()
+               {
+                       string str = @"wqk=";
+                       byte[] utf8 = Convert.FromBase64String(str);
+                       char[] data = Encoding.UTF8.GetChars(utf8);
+
+                       var encoding = Manager.GetEncoding("GB2312");
+                       var result = encoding.GetBytes(data);
+
+                       Assert.AreEqual(new byte[] { 63 }, result);
+               }
+
                // BIG5
 
                [Test]
@@ -96,6 +117,12 @@ namespace MonoTests.I18N.CJK
                        AssertEncode ("Test/texts/chinese2-utf8.txt", "Test/texts/chinese2-950.txt", 950);
                }
 
+               [Test]
+               public void CP950_Encode4 ()
+               {
+                       AssertEncode("Test/texts/chinese4-utf8.txt", "Test/texts/chinese4-950.txt", 950);
+               }
+
                [Test]
                public void CP950_Decode ()
                {
@@ -156,6 +183,12 @@ namespace MonoTests.I18N.CJK
                        AssertEncode ("Test/texts/japanese2-utf8.txt", "Test/texts/japanese2-50220.txt", 50220);
                }
 
+               [Test]
+               public void CP50220_Encode_3 ()
+               {
+                       AssertEncode("Test/texts/japanese3-utf8.txt", "Test/texts/japanese3-50220.txt", 50220);
+               }
+
                [Test]
                public void CP50220_Decode ()
                {
@@ -168,6 +201,12 @@ namespace MonoTests.I18N.CJK
                        AssertEncode ("Test/texts/japanese-utf8.txt", "Test/texts/japanese-50221.txt", 50221);
                }
 
+               [Test]
+               public void CP50221_Encode_3()
+               {
+                       AssertEncode("Test/texts/japanese3-utf8.txt", "Test/texts/japanese3-50221.txt", 50221);
+               }
+
                [Test]
                public void CP50221_Decode ()
                {
@@ -175,27 +214,38 @@ namespace MonoTests.I18N.CJK
                }
 
                [Test]
-#if !NET_2_0
-               [Category ("NotDotNet")] // MS is buggy here
-#endif
                public void CP50222_Encode ()
                {
                        AssertEncode ("Test/texts/japanese-utf8.txt", "Test/texts/japanese-50222.txt", 50222);
                }
 
                [Test]
-#if !NET_2_0
-               [Category ("NotDotNet")] // MS is buggy here
-#endif
                public void CP50222_Decode ()
                {
                        AssertDecode ("Test/texts/japanese-utf8.txt", "Test/texts/japanese-50222.txt", 50222);
                }
 
                [Test]
-#if !NET_2_0
-               [Category ("NotDotNet")] // MS bug
-#endif
+               public void CP50220BrokenESC ()
+               {
+                       Assert.AreEqual ("\u001B$0", Manager.GetEncoding (50220).GetString (new byte [] {0x1B, 0x24, 0x30}), "#1");
+               }
+
+               [Test]
+               public void CP50220BrokenESC2 ()
+               {
+                       // it does not really invoke fallback ...
+                       Assert.AreEqual ("\u001B$0", Encoding.GetEncoding (50220, new EncoderReplacementFallback (), new DecoderReplacementFallback ("")).GetString (new byte [] {0x1B, 0x24, 0x30}), "#1");
+               }
+
+               [Test]
+               public void CP50220BrokenESC3 ()
+               {
+                       // neither ...
+                       Assert.AreEqual ("\u001B$0", Encoding.GetEncoding (50220, new EncoderExceptionFallback (), new DecoderExceptionFallback ()).GetString (new byte [] {0x1B, 0x24, 0x30}), "#2");
+               }
+
+               [Test]
                public void Bug77723 ()
                {
                        GetBytesAllSingleChars (51932);
@@ -215,14 +265,14 @@ namespace MonoTests.I18N.CJK
 
                void GetBytesAllSingleChars (int enc)
                {
-                       Encoding e = Encoding.GetEncoding (enc);
+                       Encoding e = Manager.GetEncoding (enc);
                        for (int i = 0; i < 0x10000; i++)
                                e.GetBytes (new char [] { (char)i });
                }
 
                void GetCharsAllBytePairs (int enc)
                {
-                       Encoding e = Encoding.GetEncoding (enc);
+                       Encoding e = Manager.GetEncoding (enc);
                        byte [] bytes = new byte [2];
                        for (int i0 = 0; i0 < 0x100; i0++) {
                                bytes [0] = (byte) i0;
@@ -264,12 +314,9 @@ namespace MonoTests.I18N.CJK
                }
 
                [Test]
-#if !NET_2_0
-               [Category ("NotDotNet")] // MS bug
-#endif
                public void Encoder54936Refresh ()
                {
-                       Encoding e = Encoding.GetEncoding ("gb18030");
+                       Encoding e = Manager.GetEncoding ("gb18030");
                        Encoder d = e.GetEncoder ();
                        byte [] bytes;
 
@@ -289,11 +336,17 @@ namespace MonoTests.I18N.CJK
                                bytes, "#6");
                }
 
-#if NET_2_0
+               [Test]
+               public void Bug491799 ()
+               {
+                       Assert.AreEqual (new byte [] {0xEE, 0xFC},
+                                          Manager.GetEncoding (932).GetBytes ("\uFF02"));
+               }
+
                [Test]
                public void Decoder932Refresh ()
                {
-                       Encoding e = Encoding.GetEncoding (932);
+                       Encoding e = Manager.GetEncoding (932);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -313,7 +366,7 @@ namespace MonoTests.I18N.CJK
                [Test]
                public void Decoder51932Refresh ()
                {
-                       Encoding e = Encoding.GetEncoding (51932);
+                       Encoding e = Manager.GetEncoding (51932);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -341,7 +394,7 @@ namespace MonoTests.I18N.CJK
                [Test]
                public void Decoder936Refresh ()
                {
-                       Encoding e = Encoding.GetEncoding (936);
+                       Encoding e = Manager.GetEncoding (936);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -364,7 +417,7 @@ namespace MonoTests.I18N.CJK
                [Test]
                public void Decoder949Refresh ()
                {
-                       Encoding e = Encoding.GetEncoding (949);
+                       Encoding e = Manager.GetEncoding (949);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -387,7 +440,7 @@ namespace MonoTests.I18N.CJK
                [Test]
                public void Decoder950Refresh ()
                {
-                       Encoding e = Encoding.GetEncoding (950);
+                       Encoding e = Manager.GetEncoding (950);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -406,13 +459,12 @@ namespace MonoTests.I18N.CJK
                        Assert.AreEqual (1, d.GetChars (new byte [] {0xF9}, 0, 1, chars, 0, true), "#5");
                        Assert.AreEqual (new char [] {'?'}, chars, "#6");
                }
-#endif
 
 
                [Test]
                public void Decoder51932NoRefresh ()
                {
-                       Encoding e = Encoding.GetEncoding (51932);
+                       Encoding e = Manager.GetEncoding (51932);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -435,7 +487,7 @@ namespace MonoTests.I18N.CJK
                [Test]
                public void Decoder936NoRefresh ()
                {
-                       Encoding e = Encoding.GetEncoding (936);
+                       Encoding e = Manager.GetEncoding (936);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -458,7 +510,7 @@ namespace MonoTests.I18N.CJK
                [Test]
                public void Decoder949NoRefresh ()
                {
-                       Encoding e = Encoding.GetEncoding (949);
+                       Encoding e = Manager.GetEncoding (949);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -481,7 +533,7 @@ namespace MonoTests.I18N.CJK
                [Test]
                public void Decoder950NoRefresh ()
                {
-                       Encoding e = Encoding.GetEncoding (950);
+                       Encoding e = Manager.GetEncoding (950);
                        Decoder d = e.GetDecoder ();
                        char [] chars;
 
@@ -500,6 +552,23 @@ namespace MonoTests.I18N.CJK
                        Assert.AreEqual (0, d.GetChars (new byte [] {0xF9}, 0, 1, chars, 0), "#5");
                        Assert.AreEqual (new char [] {'\0'}, chars, "#6");
                }
+
+               [Test]
+               public void HandleObsoletedESCJ () // bug #398273
+               {
+                       byte [] b = new byte [] {0x64, 0x6f, 0x6e, 0x1b, 0x24, 0x42, 0x21, 0x47, 0x1b, 0x28, 0x4a, 0x74};
+                       string s = Manager.GetEncoding ("ISO-2022-JP").GetString (b);
+                       Assert.AreEqual ("don\u2019t", s);
+
+               }
+               
+               [Test]
+               public void Bug14591 ()
+               {
+                       var expected = "\u4f50\u85e4\u8c4a";
+                       var text = Encoding.GetEncoding ("iso-2022-jp").GetString (Convert.FromBase64String ("GyRAOjRGI0stGyhK"));
+                       Assert.AreEqual (expected, text, "#1");
+               }
                #endregion
 
                #region Korean