diff options
author | Alexander Köplinger <alex.koeplinger@outlook.com> | 2017-10-16 16:20:18 +0300 |
---|---|---|
committer | Alexander Köplinger <alex.koeplinger@outlook.com> | 2017-10-17 15:12:24 +0300 |
commit | c399c787c8395bc0c525bc8fc0d07cdb0515e039 (patch) | |
tree | 79d9f182029ff63d0c012668df3b4beb6d5151af /mcs | |
parent | 25ad948e0215226d59b8174a6345c3d2dcadb403 (diff) |
[I18N] Add more encoding tests
There was very little test coverage of the I18N encodings before.
This adds a bunch of tests based on Latin1EncodingTest.cs since
latin1 is quite similar to these encodings.
A few of the added tests fail in some encodings due to what looks
like bugs in the implementation, disabled those temporarily, see FIXME's.
(filed https://bugzilla.xamarin.com/show_bug.cgi?id=60216 for tracking)
Diffstat (limited to 'mcs')
-rw-r--r-- | mcs/class/I18N/CJK/I18N.CJK_test.dll.sources | 2 | ||||
-rw-r--r-- | mcs/class/I18N/CJK/Test/I18N.CJK.EncodingTest.cs | 55 | ||||
-rw-r--r-- | mcs/class/I18N/EncodingTestBase.cs | 569 | ||||
-rw-r--r-- | mcs/class/I18N/MidEast/I18N.MidEast_test.dll.sources | 2 | ||||
-rw-r--r-- | mcs/class/I18N/MidEast/Test/I18N.MidEast.EncodingTest.cs | 53 | ||||
-rw-r--r-- | mcs/class/I18N/Other/I18N.Other_test.dll.sources | 2 | ||||
-rw-r--r-- | mcs/class/I18N/Other/Makefile | 2 | ||||
-rw-r--r-- | mcs/class/I18N/Other/Test/I18N.Other.EncodingTest.cs | 56 | ||||
-rw-r--r-- | mcs/class/I18N/Rare/I18N.Rare_test.dll.sources | 2 | ||||
-rw-r--r-- | mcs/class/I18N/Rare/Makefile | 2 | ||||
-rw-r--r-- | mcs/class/I18N/Rare/Test/I18N.Rare.EncodingTest.cs | 85 | ||||
-rw-r--r-- | mcs/class/I18N/West/I18N.West_test.dll.sources | 2 | ||||
-rw-r--r-- | mcs/class/I18N/West/Test/I18N.West.EncodingTest.cs | 61 |
13 files changed, 891 insertions, 2 deletions
diff --git a/mcs/class/I18N/CJK/I18N.CJK_test.dll.sources b/mcs/class/I18N/CJK/I18N.CJK_test.dll.sources index 85f5419a987..2a1c4fdc4c6 100644 --- a/mcs/class/I18N/CJK/I18N.CJK_test.dll.sources +++ b/mcs/class/I18N/CJK/I18N.CJK_test.dll.sources @@ -1,2 +1,4 @@ +../../EncodingTestBase.cs +I18N.CJK.EncodingTest.cs I18N.CJK.Test.cs diff --git a/mcs/class/I18N/CJK/Test/I18N.CJK.EncodingTest.cs b/mcs/class/I18N/CJK/Test/I18N.CJK.EncodingTest.cs new file mode 100644 index 00000000000..c3efe49aa9f --- /dev/null +++ b/mcs/class/I18N/CJK/Test/I18N.CJK.EncodingTest.cs @@ -0,0 +1,55 @@ +// +// I18N.CJK.EncodingTest.cs +// +// Author: +// Alexander Köplinger (alexander.koeplinger@xamarin.com) +// +// Copyright (C) 2017 Xamarin, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Text; + +using NUnit.Framework; +using NUnit.Framework.Constraints; + +using MonoTests.I18N; + +namespace MonoTests.I18N.CJK +{ + [TestFixture] + public class EncodingTest : EncodingTestBase + { + static CodePageTestInfo[] codepageTestInfos = new CodePageTestInfo[] + { + new CodePageTestInfo { CodePage = 932, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 129, FFReplacementChar = 63, A0Char = '\u003f', A8Char = '\uff68', SupplementChar = 135, SkipGetBytes7Test = true, SkipEncoderFallback2Test = true }, // FIXME: SkipGetBytes7Test, SkipEncoderFallback2Test + new CodePageTestInfo { CodePage = 936, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 161, FFReplacementChar = 63, A0Char = '\u71c4', A8Char = '\u0036', SupplementChar = 222, CharsWritten = 2, OneChar = '\u0037', SkipEncoderFallback2Test = true }, // FIXME: CharsWritten==1 on .NET, SkipEncoderFallback2Test + new CodePageTestInfo { CodePage = 949, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 161, FFReplacementChar = 63, A0Char = '\u003f', A8Char = '\u0036', SupplementChar = 196, CharsWritten = 2, OneChar = '\u0037', SkipEncoderFallback2Test = true }, // FIXME: CharsWritten==1 on .NET, SkipEncoderFallback2Test + new CodePageTestInfo { CodePage = 950, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 161, FFReplacementChar = 63, A0Char = '\u003f', A8Char = '\u0036', SupplementChar = 219, CharsWritten = 3, SkipEncoderFallback2Test = true }, // FIXME: CharsWritten==1 on .NET, SkipEncoderFallback2Test + new CodePageTestInfo { CodePage = 51932, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 161, FFReplacementChar = 63, A0Char = '\u30fb', A8Char = '\u30fb', SupplementChar = 231, CharsWritten = 4, SkipEncoderFallbackTest = true, SkipEncoderFallback2Test = true }, // FIXME: CharsWritten==3 on .NET, SkipEncoderFallbackTest, SkipEncoderFallback2Test + new CodePageTestInfo { CodePage = 54936, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 161, FFReplacementChar = 63, A0Char = '\u0038', A8Char = '\u0036', SupplementChar = 222, CharsWritten = 1, OneChar = '\u0037', SkipGetBytes7Test = true, SkipEncoderFallbackTest = true, SkipEncoderFallback2Test = true }, // FIXME: CharsWritten==1 on .NET, SkipGetBytes7Test, SkipEncoderFallbackTest, SkipEncoderFallback2Test + new CodePageTestInfo { CodePage = 50220, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\uff68', SkipGetBytes7Test = true, SkipEncoderFallbackTest = true, SkipEncoderFallback2Test = true }, // FIXME: SkipGetBytes7Test, SkipEncoderFallbackTest, SkipEncoderFallback2Test + new CodePageTestInfo { CodePage = 50221, IsBrowserDisplay = false, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\uff68', SkipGetBytes7Test = true, SkipEncoderFallbackTest = true, SkipEncoderFallback2Test = true }, // FIXME: SkipGetBytes7Test, SkipEncoderFallbackTest, SkipEncoderFallback2Test + new CodePageTestInfo { CodePage = 50222, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\uff68', SkipGetBytes7Test = true, SkipEncoderFallbackTest = true, SkipEncoderFallback2Test = true } // FIXME: SkipGetBytes7Test, SkipEncoderFallbackTest, SkipEncoderFallback2Test + }; + } +} diff --git a/mcs/class/I18N/EncodingTestBase.cs b/mcs/class/I18N/EncodingTestBase.cs new file mode 100644 index 00000000000..f1c75615d61 --- /dev/null +++ b/mcs/class/I18N/EncodingTestBase.cs @@ -0,0 +1,569 @@ +// +// EncodingTestBase.cs +// +// Author: +// Alexander Köplinger (alexander.koeplinger@xamarin.com) +// +// Copyright (C) 2017 Xamarin, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Collections.Generic; +using System.Text; + +using NUnit.Framework; +using NUnit.Framework.Constraints; + +namespace MonoTests.I18N +{ + public class CodePageTestInfo + { + public int CodePage; + public bool IsBrowserDisplay; + public bool IsBrowserSave; + public bool IsMailNewsDisplay; + public bool IsMailNewsSave; + public byte SuperscriptFiveReplacementChar; + public byte InfinityReplacementChar; + public byte FFReplacementChar; + public char A0Char; + public char? OneChar; + public char A8Char; + public int? CharsWritten; + public byte? SupplementChar; + public bool SkipGetBytes7Test; + public bool SkipEncoderFallbackTest; + public bool SkipEncoderFallback2Test; + public override string ToString () => "Codepage " + Convert.ToString (CodePage); + } + + // + // NOTE: when adding/updating tests here consider updating + // the following files as well since they have similar tests: + // + // - mcs/class/corlib/Test/System.Text/ASCIIEncodingTest.cs + // - mcs/class/corlib/Test/System.Text/Latin1EncodingTest.cs + // + public abstract class EncodingTestBase + { + private char[] testchars; + private byte[] testbytes; + + [SetUp] + public void SetUp () + { + testchars = new char[4]; + testchars[0] = 'T'; + testchars[1] = 'e'; + testchars[2] = 's'; + testchars[3] = 't'; + testbytes = new byte[4]; + testbytes[0] = (byte) 'T'; + testbytes[1] = (byte) 'e'; + testbytes[2] = (byte) 's'; + testbytes[3] = (byte) 't'; + } + + [Test] + [TestCaseSource ("codepageTestInfos")] + public void IsBrowserDisplay (CodePageTestInfo cpInfo) + { + Assert.AreEqual (cpInfo.IsBrowserDisplay, Encoding.GetEncoding (cpInfo.CodePage).IsBrowserDisplay); + } + + [Test] + [TestCaseSource ("codepageTestInfos")] + public void IsBrowserSave (CodePageTestInfo cpInfo) + { + Assert.AreEqual (cpInfo.IsBrowserSave, Encoding.GetEncoding (cpInfo.CodePage).IsBrowserSave); + } + + [Test] + [TestCaseSource ("codepageTestInfos")] + public void IsMailNewsDisplay (CodePageTestInfo cpInfo) + { + Assert.AreEqual (cpInfo.IsMailNewsDisplay, Encoding.GetEncoding (cpInfo.CodePage).IsMailNewsDisplay); + } + + [Test] + [TestCaseSource ("codepageTestInfos")] + public void IsMailNewsSave (CodePageTestInfo cpInfo) + { + Assert.AreEqual (cpInfo.IsMailNewsSave, Encoding.GetEncoding (cpInfo.CodePage).IsMailNewsSave); + } + + [Test] // Test GetBytes(char[]) + [TestCaseSource ("codepageTestInfos")] + public void TestGetBytes1 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + byte[] bytes = test_encoding.GetBytes(testchars); + for (int i = 0; i < testchars.Length; i++) + Assert.AreEqual (testchars[i], (char) bytes[i]); + } + + [Test] // Test GetBytes(char[], int, int) + [TestCaseSource ("codepageTestInfos")] + public void TestGetBytes2 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + byte[] bytes = test_encoding.GetBytes(testchars, 1, 1); + Assert.AreEqual (1, bytes.Length, "#1"); + Assert.AreEqual (testchars [1], (char) bytes [0], "#2"); + } + + [Test] // Test non-Latin1 char in char[] + [TestCaseSource ("codepageTestInfos")] + public void TestGetBytes3 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + testchars[2] = (char) 0x100; + byte[] bytes = test_encoding.GetBytes(testchars); + Assert.AreEqual ('T', (char) bytes [0], "#1"); + Assert.AreEqual ('e', (char) bytes [1], "#2"); + Assert.AreEqual (cpInfo.FFReplacementChar, (char) bytes [2], "#3"); + Assert.AreEqual ('t', (char) bytes [3], "#4"); + } + + [Test] // Test GetBytes(char[], int, int, byte[], int) + [TestCaseSource ("codepageTestInfos")] + public void TestGetBytes4 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + byte[] bytes = new Byte[1]; + int cnt = test_encoding.GetBytes(testchars, 1, 1, bytes, 0); + Assert.AreEqual (1, cnt, "#1"); + Assert.AreEqual (testchars [1], (char) bytes [0], "#2"); + } + + [Test] // Test GetBytes(string, int, int, byte[], int) + [TestCaseSource ("codepageTestInfos")] + public void TestGetBytes5 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + byte[] bytes = new Byte[1]; + int cnt = test_encoding.GetBytes("Test", 1, 1, bytes, 0); + Assert.AreEqual ('e', (char) bytes [0], "#1"); + } + + [Test] // Test GetBytes(string) + [TestCaseSource ("codepageTestInfos")] + public void TestGetBytes6 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + byte[] bytes = test_encoding.GetBytes("Test"); + for (int i = 0; i < testchars.Length; i++) + Assert.AreEqual (testchars [i], (char) bytes [i]); + } + + [Test] // Test GetBytes(string) + [TestCaseSource ("codepageTestInfos")] + public void TestGetBytes7 (CodePageTestInfo cpInfo) + { + if (cpInfo.SkipGetBytes7Test) + Assert.Ignore ("Codepage indicates this test should be skipped."); + + var test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + + var expected = new byte [] { 0x3F, 0x20, cpInfo.SuperscriptFiveReplacementChar, 0x20, cpInfo.InfinityReplacementChar }; + if (cpInfo.SupplementChar.HasValue) { + var expectedNew = new byte [expected.Length + 1]; + expected.CopyTo (expectedNew, 0); + expectedNew [expected.Length] = cpInfo.SupplementChar.Value; + expected = expectedNew; + } + var actual = test_encoding.GetBytes("\u24c8 \u2075 \u221e"); // normal replacement + Assert.AreEqual (expected, actual, "#1"); + + expected = new byte [] { 0x3F, 0x3F }; + actual = test_encoding.GetBytes("\ud83d\ude0a"); // surrogate pair replacement + Assert.AreEqual (expected, actual, "#2"); + + expected = new byte [] { 0x3F, 0x3F, 0x20 }; + actual = test_encoding.GetBytes("\ud83d\ude0a "); // surrogate pair replacement + Assert.AreEqual (expected, actual, "#3"); + + expected = new byte [] { 0x20, 0x20, 0x3F, 0x3F, 0x20, 0x20 }; + actual = test_encoding.GetBytes(" \ud83d\ude0a "); // surrogate pair replacement + Assert.AreEqual (expected, actual, "#4"); + + expected = new byte [] { 0x20, 0x20, 0x3F, 0x3F, 0x20, 0x20 }; + actual = test_encoding.GetBytes(" \ud834\udd1e "); // surrogate pair replacement + Assert.AreEqual (expected, actual, "#5"); + + expected = new byte [] { 0x41, 0x42, 0x43, 0x00, 0x41, 0x42, 0x43 }; + actual = test_encoding.GetBytes("ABC\0ABC"); // embedded zero byte not replaced + Assert.AreEqual (expected, actual, "#6"); + + expected = new byte [] { 0x20, 0x20, 0x3F, 0x20, 0x20 }; + actual = test_encoding.GetBytes(" \ud834 "); // invalid surrogate pair replacement + Assert.AreEqual (expected, actual, "#7"); + } + + [Test] // Test GetChars(byte[]) + [TestCaseSource ("codepageTestInfos")] + public void TestGetChars1 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + char[] chars = test_encoding.GetChars(testbytes); + for (int i = 0; i < testbytes.Length; i++) + Assert.AreEqual (testbytes[i], (byte) chars[i]); + } + + [Test] // Test GetChars(byte[], int, int) + [TestCaseSource ("codepageTestInfos")] + public void TestGetChars2 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + char[] chars = test_encoding.GetChars(testbytes, 1, 1); + Assert.AreEqual (1, chars.Length, "#1"); + Assert.AreEqual (testbytes [1], (byte) chars [0], "#2"); + } + + [Test] // Test GetChars(byte[], int, int, char[], int) + [TestCaseSource ("codepageTestInfos")] + public void TestGetChars4 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + char[] chars = new char[1]; + int cnt = test_encoding.GetChars(testbytes, 1, 1, chars, 0); + Assert.AreEqual (1, cnt, "#1"); + Assert.AreEqual (testbytes [1], (byte) chars [0], "#2"); + } + + [Test] // Test GetString(char[]) + [TestCaseSource ("codepageTestInfos")] + public void TestGetString1 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + string str = test_encoding.GetString(testbytes); + Assert.AreEqual ("Test", str); + } + + [Test] // Test GetString(char[], int, int) + [TestCaseSource ("codepageTestInfos")] + public void TestGetString2 (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + string str = test_encoding.GetString(testbytes, 1, 2); + Assert.AreEqual ("es", str); + } + + [Test] // Test Decoder + [TestCaseSource ("codepageTestInfos")] + public void TestDecoder (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + char[] chars = new char[1]; + int cnt = test_encoding.GetDecoder().GetChars(testbytes, 1, 1, chars, 0); + Assert.AreEqual (1, cnt, "#1"); + Assert.AreEqual (testbytes [1], (byte) chars [0], "#2"); + } + + [Test] // Test Decoder + [TestCaseSource ("codepageTestInfos")] + public void TestEncoder (CodePageTestInfo cpInfo) + { + Encoding test_encoding = Encoding.GetEncoding (cpInfo.CodePage); + byte[] bytes = new Byte[1]; + int cnt = test_encoding.GetEncoder().GetBytes(testchars, 1, 1, bytes, 0, false); + Assert.AreEqual (1, cnt, "#1"); + Assert.AreEqual (testchars [1], (char) bytes [0], "#2"); + } + + [Test] + [TestCaseSource ("codepageTestInfos")] + public void TestZero (CodePageTestInfo cpInfo) + { + Encoding encoding = Encoding.GetEncoding (cpInfo.CodePage); + Assert.AreEqual (string.Empty, encoding.GetString (new byte [0]), "#1"); + Assert.AreEqual (string.Empty, encoding.GetString (new byte [0], 0, 0), "#2"); + } + + [Test] + [ExpectedException (typeof (EncoderFallbackException))] + [TestCaseSource ("codepageTestInfos")] + public void EncoderFallback (CodePageTestInfo cpInfo) + { + if (cpInfo.SkipEncoderFallbackTest) + Assert.Ignore ("Codepage indicates this test should be skipped."); + + Encoding e = Encoding.GetEncoding (cpInfo.CodePage).Clone () as Encoding; + e.EncoderFallback = new EncoderExceptionFallback (); + e.GetBytes ("\u24c8"); + } + + [Test] + [TestCaseSource ("codepageTestInfos")] + public void EncoderFallback2 (CodePageTestInfo cpInfo) + { + if (cpInfo.SkipEncoderFallback2Test) + Assert.Ignore ("Codepage indicates this test should be skipped."); + + Encoding e = Encoding.GetEncoding (cpInfo.CodePage).Clone () as Encoding; + e.EncoderFallback = new BackslashEncoderReplaceFallback (); + + byte[] bytes = e.GetBytes ("a\xac\u1234\u20ac\u8000"); + var expected = new byte[] { 0x61, 0xAC, 0x5C, 0x75, 0x31, 0x32, 0x33, 0x34, 0x5C, 0x75, 0x32, 0x30, 0x61, 0x63, 0x5C, 0x75, 0x38, 0x30, 0x30, 0x30 }; + // FIXME: some codepages do have U+00AC (logical not sign) or U+20AC (euro sign), we need to adapt the tests + // Assert.AreEqual (expected, bytes); + + bytes = e.GetBytes ("1\u04d92"); + expected = new byte[] { 0x31, 0x5C, 0x75, 0x30, 0x34, 0x64, 0x39, 0x32 }; + Assert.AreEqual (expected, bytes); + + e.EncoderFallback = new EncoderExceptionOnWrongIndexFallback ('\u04d9', 1); + bytes = e.GetBytes ("1\u04d92"); + expected = new byte[] { 0x31, 0x21, 0x32 }; + Assert.AreEqual (expected, bytes); + + e.EncoderFallback = new EncoderExceptionOnWrongIndexFallback ('\u04d9', 0); + bytes = e.GetBytes ("\u04d921"); + expected = new byte[] { 0x21, 0x32, 0x31 }; + Assert.AreEqual (expected, bytes); + } + + [Test] + // [ExpectedException (typeof (ArgumentException))] + [TestCaseSource ("codepageTestInfos")] + public void DecoderFallback2 (CodePageTestInfo cpInfo) + { + var bytes = new byte[] { + 0x30, 0xa0, 0x31, 0xa8 + }; + var enc = (Encoding)Encoding.GetEncoding (cpInfo.CodePage).Clone (); + enc.DecoderFallback = new TestFallbackDecoder (); + + var chars = new char [7]; + var ret = enc.GetChars (bytes, 0, bytes.Length, chars, 0); + } + + [Test] + [TestCaseSource ("codepageTestInfos")] + public void DecoderFallback3 (CodePageTestInfo cpInfo) + { + var bytes = new byte[] { + 0x30, 0xa0, 0x31, 0xa8 + }; + var enc = (Encoding)Encoding.GetEncoding (cpInfo.CodePage).Clone (); + enc.DecoderFallback = new TestFallbackDecoder (); + + var chars = new char[] { '9', '8', '7', '6', '5' }; + var ret = enc.GetChars (bytes, 0, bytes.Length, chars, 0); + + Assert.That (ret, Is.EqualTo (cpInfo.CharsWritten ?? 4), "ret"); + Assert.That (chars [0], Is.EqualTo ('0'), "chars[0]"); + Assert.That (chars [1], Is.EqualTo (cpInfo.A0Char), "chars[1]"); + Assert.That (chars [2], Is.EqualTo ((cpInfo).OneChar ?? '1'), "chars[2]"); + Assert.That (chars [3], Is.EqualTo ((char)cpInfo.A8Char), "chars[3]"); + Assert.That (chars [4], Is.EqualTo ('5'), "chars[4]"); + } + + class TestFallbackDecoder : DecoderFallback { + const int count = 2; + + public override int MaxCharCount { + get { return count; } + } + + public override DecoderFallbackBuffer CreateFallbackBuffer () + { + return new Buffer (); + } + + class Buffer : DecoderFallbackBuffer { + char[] queue; + int index; + + public override int Remaining { + get { + return queue.Length - index; + } + } + + public override char GetNextChar () + { + return index < queue.Length ? queue [index++] : '\0'; + } + + public override bool Fallback (byte[] bytes, int unused) + { + queue = new char[bytes.Length * count]; + index = 0; + for (int i = 0; i < bytes.Length; i++) { + for (int j = 0; j < count; j++) + queue [index++] = (char)(bytes [i]+j); + } + return true; + } + + public override bool MovePrevious () + { + throw new NotImplementedException (); + } + + public override void Reset () + { + base.Reset (); + } + } + } + + class BackslashEncoderReplaceFallback : EncoderFallback + { + class BackslashReplaceFallbackBuffer : EncoderFallbackBuffer + { + List<char> _buffer = new List<char> (); + int _index; + + public override bool Fallback (char charUnknownHigh, char charUnknownLow, int index) + { + throw new NotImplementedException (); + return false; + } + + public override bool Fallback (char charUnknown, int index) + { + _buffer.Add('\\'); + int val = (int)charUnknown; + if (val > 0xFF) { + _buffer.Add ('u'); + AddCharacter (val >> 8); + AddCharacter (val & 0xFF); + } else { + _buffer.Add ('x'); + AddCharacter (charUnknown); + } + return true; + } + + private void AddCharacter (int val) + { + AddOneDigit (((val) & 0xF0) >> 4); + AddOneDigit (val & 0x0F); + } + + private void AddOneDigit (int val) + { + if (val > 9) { + _buffer.Add ((char)('a' + val - 0x0A)); + } else { + _buffer.Add ((char)('0' + val)); + } + } + + public override char GetNextChar () + { + if (_index == _buffer.Count) + return Char.MinValue; + + return _buffer[_index++]; + } + + public override bool MovePrevious () + { + if (_index > 0){ + _index--; + return true; + } + return false; + } + + public override int Remaining + { + get { return _buffer.Count - _index; } + } + } + + public override EncoderFallbackBuffer CreateFallbackBuffer () + { + return new BackslashReplaceFallbackBuffer (); + } + + public override int MaxCharCount + { + get { throw new NotImplementedException (); } + } + } + + class EncoderExceptionOnWrongIndexFallback : EncoderFallback + { + char _expectedCharUnknown; + int _expectedIndex; + + public EncoderExceptionOnWrongIndexFallback (char expectedCharUnknown, int expectedIndex) + { + _expectedCharUnknown = expectedCharUnknown; + _expectedIndex = expectedIndex; + } + + public override EncoderFallbackBuffer CreateFallbackBuffer () + { + return new EncoderExceptionOnWrongIndexFallbackBuffer (_expectedCharUnknown, _expectedIndex); + } + + public override int MaxCharCount => 1; + + class EncoderExceptionOnWrongIndexFallbackBuffer : EncoderFallbackBuffer + { + char _expectedCharUnknown; + int _expectedIndex; + bool read; + + public EncoderExceptionOnWrongIndexFallbackBuffer (char expectedCharUnknown, int expectedIndex) + { + _expectedCharUnknown = expectedCharUnknown; + _expectedIndex = expectedIndex; + } + + public override int Remaining => read ? 0 : 1; + + public override bool Fallback (char charUnknown, int index) + { + Assert.AreEqual (_expectedCharUnknown, charUnknown); + Assert.AreEqual (_expectedIndex, index); + return true; + } + + public override bool Fallback (char charUnknownHigh, char charUnknownLow, int index) + { + throw new NotImplementedException (); + return true; + } + + public override char GetNextChar () + { + if (!read) { + read = true; + return '!'; + } + return '\0'; + } + + public override bool MovePrevious () + { + return false; + } + } + } + } +}
\ No newline at end of file diff --git a/mcs/class/I18N/MidEast/I18N.MidEast_test.dll.sources b/mcs/class/I18N/MidEast/I18N.MidEast_test.dll.sources index de080953706..3dc561486e0 100644 --- a/mcs/class/I18N/MidEast/I18N.MidEast_test.dll.sources +++ b/mcs/class/I18N/MidEast/I18N.MidEast_test.dll.sources @@ -1 +1,3 @@ +../../EncodingTestBase.cs +I18N.MidEast.EncodingTest.cs I18N.MidEast.Test.cs diff --git a/mcs/class/I18N/MidEast/Test/I18N.MidEast.EncodingTest.cs b/mcs/class/I18N/MidEast/Test/I18N.MidEast.EncodingTest.cs new file mode 100644 index 00000000000..143743778dd --- /dev/null +++ b/mcs/class/I18N/MidEast/Test/I18N.MidEast.EncodingTest.cs @@ -0,0 +1,53 @@ +// +// I18N.MidEast.EncodingTest.cs +// +// Author: +// Alexander Köplinger (alexander.koeplinger@xamarin.com) +// +// Copyright (C) 2017 Xamarin, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Text; + +using NUnit.Framework; +using NUnit.Framework.Constraints; + +using MonoTests.I18N; + +namespace MonoTests.I18N.MidEast +{ + [TestFixture] + public class EncodingTest : EncodingTestBase + { + static CodePageTestInfo[] codepageTestInfos = new CodePageTestInfo[] + { + new CodePageTestInfo { CodePage = 1254, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 1255, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 1256, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 28596, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 65, A0Char = '\u00a0', A8Char = '\uf7ce' }, + new CodePageTestInfo { CodePage = 28598, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 28599, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 38598, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' } + }; + } +} diff --git a/mcs/class/I18N/Other/I18N.Other_test.dll.sources b/mcs/class/I18N/Other/I18N.Other_test.dll.sources new file mode 100644 index 00000000000..c2d2d7ccea2 --- /dev/null +++ b/mcs/class/I18N/Other/I18N.Other_test.dll.sources @@ -0,0 +1,2 @@ +../../EncodingTestBase.cs +I18N.Other.EncodingTest.cs diff --git a/mcs/class/I18N/Other/Makefile b/mcs/class/I18N/Other/Makefile index 3107ad6aa8a..a3a33addba8 100644 --- a/mcs/class/I18N/Other/Makefile +++ b/mcs/class/I18N/Other/Makefile @@ -6,7 +6,7 @@ LIBRARY = I18N.Other.dll LIB_REFS = I18N KEYFILE = ../../mono.pub LOCAL_MCS_FLAGS = /unsafe -NO_TEST = yes +TEST_LIB_REFS = I18N EXTRA_DISTFILES = $(wildcard *.ucm) diff --git a/mcs/class/I18N/Other/Test/I18N.Other.EncodingTest.cs b/mcs/class/I18N/Other/Test/I18N.Other.EncodingTest.cs new file mode 100644 index 00000000000..b2579358cf7 --- /dev/null +++ b/mcs/class/I18N/Other/Test/I18N.Other.EncodingTest.cs @@ -0,0 +1,56 @@ +// +// I18N.Other.EncodingTest.cs +// +// Author: +// Alexander Köplinger (alexander.koeplinger@xamarin.com) +// +// Copyright (C) 2017 Xamarin, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Text; + +using NUnit.Framework; +using NUnit.Framework.Constraints; + +using MonoTests.I18N; + +namespace MonoTests.I18N.Other +{ + [TestFixture] + public class EncodingTest : EncodingTestBase + { + static CodePageTestInfo[] codepageTestInfos = new CodePageTestInfo[] + { + new CodePageTestInfo { CodePage = 874, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u0e48', A8Char = '\u0e08' }, + new CodePageTestInfo { CodePage = 1251, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u0401' }, + new CodePageTestInfo { CodePage = 1257, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 194, A0Char = '\u00a0', A8Char = '\u00d8' }, + new CodePageTestInfo { CodePage = 1258, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 20866, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u2550', A8Char = '\u2557' }, + new CodePageTestInfo { CodePage = 21866, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u2550', A8Char = '\u2557' }, + new CodePageTestInfo { CodePage = 28594, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 192, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 28595, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u0408' }, + new CodePageTestInfo { CodePage = 57002, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u0920', A8Char = '\u0928', SkipEncoderFallback2Test = true }, // FIXME: SkipEncoderFallback2Test + }; + } +} + diff --git a/mcs/class/I18N/Rare/I18N.Rare_test.dll.sources b/mcs/class/I18N/Rare/I18N.Rare_test.dll.sources new file mode 100644 index 00000000000..2a58d9447ef --- /dev/null +++ b/mcs/class/I18N/Rare/I18N.Rare_test.dll.sources @@ -0,0 +1,2 @@ +../../EncodingTestBase.cs +I18N.Rare.EncodingTest.cs diff --git a/mcs/class/I18N/Rare/Makefile b/mcs/class/I18N/Rare/Makefile index acbb6351c2b..a2863e797ce 100644 --- a/mcs/class/I18N/Rare/Makefile +++ b/mcs/class/I18N/Rare/Makefile @@ -6,7 +6,7 @@ LIBRARY = I18N.Rare.dll LIB_REFS = I18N KEYFILE = ../../mono.pub LOCAL_MCS_FLAGS = /unsafe -NO_TEST = yes +TEST_LIB_REFS = I18N EXTRA_DISTFILES = $(wildcard *.ucm) diff --git a/mcs/class/I18N/Rare/Test/I18N.Rare.EncodingTest.cs b/mcs/class/I18N/Rare/Test/I18N.Rare.EncodingTest.cs new file mode 100644 index 00000000000..a6485346f1b --- /dev/null +++ b/mcs/class/I18N/Rare/Test/I18N.Rare.EncodingTest.cs @@ -0,0 +1,85 @@ +// +// I18N.Rare.EncodingTest.cs +// +// Author: +// Alexander Köplinger (alexander.koeplinger@xamarin.com) +// +// Copyright (C) 2017 Xamarin, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Text; + +using NUnit.Framework; +using NUnit.Framework.Constraints; + +using MonoTests.I18N; + +namespace MonoTests.I18N.Rare +{ + [TestFixture] + public class EncodingTest : EncodingTestBase + { + static CodePageTestInfo[] codepageTestInfos = new CodePageTestInfo[] + { + // FIXME: a lot of the tests fail because of different expectations of the test string (i.e. likely not a product bug), needs some rework of the tests + // new CodePageTestInfo { CodePage = 37, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 500, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 708, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 852, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 855, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 857, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 858, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 862, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 864, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 866, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 869, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 870, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 875, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1026, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1047, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1140, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1141, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1142, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1143, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1144, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1145, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1146, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1147, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1148, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 1149, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20273, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20277, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20278, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20280, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20284, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20285, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20290, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20297, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20420, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20424, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 20871, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + // new CodePageTestInfo { CodePage = 21025, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + }; + } +} + diff --git a/mcs/class/I18N/West/I18N.West_test.dll.sources b/mcs/class/I18N/West/I18N.West_test.dll.sources index b5fadfc4b95..bf39542632b 100644 --- a/mcs/class/I18N/West/I18N.West_test.dll.sources +++ b/mcs/class/I18N/West/I18N.West_test.dll.sources @@ -1 +1,3 @@ +../../EncodingTestBase.cs +I18N.West.EncodingTest.cs I18N.West.Test.cs diff --git a/mcs/class/I18N/West/Test/I18N.West.EncodingTest.cs b/mcs/class/I18N/West/Test/I18N.West.EncodingTest.cs new file mode 100644 index 00000000000..2ebf01fe409 --- /dev/null +++ b/mcs/class/I18N/West/Test/I18N.West.EncodingTest.cs @@ -0,0 +1,61 @@ +// +// I18N.West.EncodingTest.cs +// +// Author: +// Alexander Köplinger (alexander.koeplinger@xamarin.com) +// +// Copyright (C) 2017 Xamarin, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Text; + +using NUnit.Framework; +using NUnit.Framework.Constraints; + +using MonoTests.I18N; + +namespace MonoTests.I18N.West +{ + [TestFixture] + public class EncodingTest : EncodingTestBase + { + static CodePageTestInfo[] codepageTestInfos = new CodePageTestInfo[] + { + new CodePageTestInfo { CodePage = 437, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 53, InfinityReplacementChar = 236, FFReplacementChar = 65, A0Char = '\u00e1', A8Char = '\u00bf' }, + new CodePageTestInfo { CodePage = 850, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00e1', A8Char = '\u00bf' }, + new CodePageTestInfo { CodePage = 860, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 236, FFReplacementChar = 63, A0Char = '\u00e1', A8Char = '\u00bf' }, + new CodePageTestInfo { CodePage = 861, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 236, FFReplacementChar = 63, A0Char = '\u00e1', A8Char = '\u00bf' }, + new CodePageTestInfo { CodePage = 863, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 236, FFReplacementChar = 63, A0Char = '\u00a6', A8Char = '\u00ce' }, + new CodePageTestInfo { CodePage = 865, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 236, FFReplacementChar = 63, A0Char = '\u00e1', A8Char = '\u00bf' }, + new CodePageTestInfo { CodePage = 1250, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 1252, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 1253, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 10000, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 176, FFReplacementChar = 63, A0Char = '\u2020', A8Char = '\u00ae' }, + new CodePageTestInfo { CodePage = 10079, IsBrowserDisplay = false, IsBrowserSave = false, IsMailNewsDisplay = false, IsMailNewsSave = false, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 176, FFReplacementChar = 63, A0Char = '\u00dd', A8Char = '\u00ae' }, + new CodePageTestInfo { CodePage = 28592, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 28593, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 28597, IsBrowserDisplay = true, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u00a8' }, + new CodePageTestInfo { CodePage = 28605, IsBrowserDisplay = false, IsBrowserSave = true, IsMailNewsDisplay = true, IsMailNewsSave = true, SuperscriptFiveReplacementChar = 63, InfinityReplacementChar = 63, FFReplacementChar = 63, A0Char = '\u00a0', A8Char = '\u0161' } + }; + } +} |