//
// <c> 2002 Mike Kestner
-using NUnit.Framework;
-using System.Text;
using System;
+using System.Text;
+using NUnit.Framework;
+using NUnit.Framework.Constraints;
-namespace MonoTests.System.Text {
-
- public class ASCIIEncodingTest : TestCase {
+#if !MOBILE
+using NUnit.Framework.SyntaxHelpers;
+#endif
+namespace MonoTests.System.Text
+{
+ [TestFixture]
+ public class ASCIIEncodingTest
+ {
private char[] testchars;
private byte[] testbytes;
- protected override void SetUp ()
+ [SetUp]
+ public void SetUp ()
{
testchars = new char[4];
testchars[0] = 'T';
testbytes[3] = (byte) 't';
}
- // Test GetBytes(char[])
+ [Test]
+ public void IsBrowserDisplay ()
+ {
+ Assert.IsFalse (Encoding.ASCII.IsBrowserDisplay);
+ }
+
+ [Test]
+ public void IsBrowserSave ()
+ {
+ Assert.IsFalse (Encoding.ASCII.IsBrowserSave);
+ }
+
+ [Test]
+ public void IsMailNewsDisplay ()
+ {
+ Assert.IsTrue (Encoding.ASCII.IsMailNewsDisplay);
+ }
+
+ [Test]
+ public void IsMailNewsSave ()
+ {
+ Assert.IsTrue (Encoding.ASCII.IsMailNewsSave);
+ }
+
+ [Test] // Test GetBytes(char[])
public void TestGetBytes1 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
byte[] bytes = ascii_encoding.GetBytes(testchars);
for (int i = 0; i < testchars.Length; i++)
- AssertEquals (testchars[i], (char) bytes[i]);
- }
+ Assert.AreEqual (testchars[i], (char) bytes[i]);
+ }
- // Test GetBytes(char[], int, int)
+ [Test] // Test GetBytes(char[], int, int)
public void TestGetBytes2 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
byte[] bytes = ascii_encoding.GetBytes(testchars, 1, 1);
- AssertEquals (1, bytes.Length);
- AssertEquals (testchars[1], (char) bytes[0]);
- }
+ Assert.AreEqual (1, bytes.Length, "#1");
+ Assert.AreEqual (testchars [1], (char) bytes [0], "#2");
+ }
- // Test non-ASCII char in char[]
+ [Test] // Test non-ASCII char in char[]
public void TestGetBytes3 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
testchars[2] = (char) 0x80;
byte[] bytes = ascii_encoding.GetBytes(testchars);
- AssertEquals ('T', (char) bytes[0]);
- AssertEquals ('e', (char) bytes[1]);
- AssertEquals ('?', (char) bytes[2]);
- AssertEquals ('t', (char) bytes[3]);
- }
+ Assert.AreEqual ('T', (char) bytes [0], "#1");
+ Assert.AreEqual ('e', (char) bytes [1], "#2");
+ Assert.AreEqual ('?', (char) bytes [2], "#3");
+ Assert.AreEqual ('t', (char) bytes [3], "#4");
+ }
- // Test GetBytes(char[], int, int, byte[], int)
+ [Test] // Test GetBytes(char[], int, int, byte[], int)
public void TestGetBytes4 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
byte[] bytes = new Byte[1];
int cnt = ascii_encoding.GetBytes(testchars, 1, 1, bytes, 0);
- AssertEquals (1, cnt);
- AssertEquals (testchars[1], (char) bytes[0]);
- }
+ Assert.AreEqual (1, cnt, "#1");
+ Assert.AreEqual (testchars [1], (char) bytes [0], "#2");
+ }
- // Test GetBytes(string, int, int, byte[], int)
+ [Test] // Test GetBytes(string, int, int, byte[], int)
public void TestGetBytes5 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
byte[] bytes = new Byte[1];
int cnt = ascii_encoding.GetBytes("Test", 1, 1, bytes, 0);
- AssertEquals ('e', (char) bytes[0]);
- }
+ Assert.AreEqual ('e', (char) bytes [0], "#1");
+ }
- // Test GetBytes(string)
+ [Test] // Test GetBytes(string)
public void TestGetBytes6 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
byte[] bytes = ascii_encoding.GetBytes("Test");
for (int i = 0; i < testchars.Length; i++)
- AssertEquals (testchars[i], (char) bytes[i]);
- }
+ Assert.AreEqual (testchars [i], (char) bytes [i]);
+ }
+
+ [Test] // Test GetBytes(string)
+ public void TestGetBytes7 ()
+ {
+ var latin1_encoding = Encoding.GetEncoding ("latin1");
+
+ var expected = new byte [] { 0x3F, 0x20, 0x3F, 0x20, 0x3F };
+ var actual = latin1_encoding.GetBytes("\u24c8 \u2075 \u221e"); // normal replacement
+ Assert.AreEqual (expected, actual, "#1");
- // Test GetChars(byte[])
+ expected = new byte [] { 0x3F, 0x3F };
+ actual = latin1_encoding.GetBytes("\ud83d\ude0a"); // surrogate pair replacement
+ Assert.AreEqual (expected, actual, "#2");
+
+ expected = new byte [] { 0x3F, 0x3F, 0x20 };
+ actual = latin1_encoding.GetBytes("\ud83d\ude0a "); // surrogate pair replacement
+ Assert.AreEqual (expected, actual, "#3");
+
+ expected = new byte [] { 0x20, 0x20, 0x3F, 0x3F, 0x20, 0x20 };
+ actual = latin1_encoding.GetBytes(" \ud83d\ude0a "); // surrogate pair replacement
+ Assert.AreEqual (expected, actual, "#4");
+
+ expected = new byte [] { 0x20, 0x20, 0x3F, 0x3F, 0x20, 0x20 };
+ actual = latin1_encoding.GetBytes(" \ud834\udd1e "); // surrogate pair replacement
+ Assert.AreEqual (expected, actual, "#5");
+
+ expected = new byte [] { 0x41, 0x42, 0x43, 0x00, 0x41, 0x42, 0x43 };
+ actual = latin1_encoding.GetBytes("ABC\0ABC"); // embedded zero byte not replaced
+ Assert.AreEqual (expected, actual, "#6");
+
+ expected = new byte [] { 0x20, 0x20, 0x3F, 0x20, 0x20 };
+ actual = latin1_encoding.GetBytes(" \ud834 "); // invalid surrogate pair replacement
+ Assert.AreEqual (expected, actual, "#7");
+ }
+
+ [Test] // Test GetChars(byte[])
public void TestGetChars1 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
char[] chars = ascii_encoding.GetChars(testbytes);
for (int i = 0; i < testbytes.Length; i++)
- AssertEquals (testbytes[i], (byte) chars[i]);
- }
+ Assert.AreEqual (testbytes[i], (byte) chars[i]);
+ }
- // Test GetChars(byte[], int, int)
+ [Test] // Test GetChars(byte[], int, int)
public void TestGetChars2 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
char[] chars = ascii_encoding.GetChars(testbytes, 1, 1);
- AssertEquals (1, chars.Length);
- AssertEquals (testbytes[1], (byte) chars[0]);
- }
+ Assert.AreEqual (1, chars.Length, "#1");
+ Assert.AreEqual (testbytes [1], (byte) chars [0], "#2");
+ }
- // Test non-ASCII char in byte[]
+ [Test] // Test non-ASCII char in byte[]
public void TestGetChars3 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
testbytes[2] = 0x80;
char[] chars = ascii_encoding.GetChars(testbytes);
- AssertEquals ('T', chars[0]);
- AssertEquals ('e', chars[1]);
- AssertEquals ('?', chars[2]);
- AssertEquals ('t', chars[3]);
- }
+ Assert.AreEqual ('T', chars [0], "#1");
+ Assert.AreEqual ('e', chars [1], "#2");
+ Assert.AreEqual ('?', chars [2], "#3");
+ Assert.AreEqual ('t', chars [3], "#4");
+ }
- // Test GetChars(byte[], int, int, char[], int)
+ [Test] // Test GetChars(byte[], int, int, char[], int)
public void TestGetChars4 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
char[] chars = new char[1];
int cnt = ascii_encoding.GetChars(testbytes, 1, 1, chars, 0);
- AssertEquals (1, cnt);
- AssertEquals (testbytes[1], (byte) chars[0]);
- }
+ Assert.AreEqual (1, cnt, "#1");
+ Assert.AreEqual (testbytes [1], (byte) chars [0], "#2");
+ }
- // Test GetString(char[])
+ [Test] // Test GetString(char[])
public void TestGetString1 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
string str = ascii_encoding.GetString(testbytes);
- AssertEquals ("Test", str);
- }
+ Assert.AreEqual ("Test", str);
+ }
- // Test GetString(char[], int, int)
+ [Test] // Test GetString(char[], int, int)
public void TestGetString2 ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
string str = ascii_encoding.GetString(testbytes, 1, 2);
- AssertEquals ("es", str);
- }
+ Assert.AreEqual ("es", str);
+ }
- // Test invalid byte handling
+ [Test] // Test invalid byte handling
public void TestGetString3 ()
{
Encoding encoding = Encoding.ASCII;
byte [] bytes = new byte [] {0x61, 0xE1, 0xE2};
string s = encoding.GetString (bytes, 0, 3);
-#if NET_2_0
- AssertEquals ("a??", s);
-#else
- AssertEquals ("aab", s);
-#endif
+ Assert.AreEqual ("a??", s);
}
- // Test Decoder
+ [Test] // Test Decoder
public void TestDecoder ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
char[] chars = new char[1];
int cnt = ascii_encoding.GetDecoder().GetChars(testbytes, 1, 1, chars, 0);
- AssertEquals (1, cnt);
- AssertEquals (testbytes[1], (byte) chars[0]);
+ Assert.AreEqual (1, cnt, "#1");
+ Assert.AreEqual (testbytes [1], (byte) chars [0], "#2");
}
- // Test Decoder
+ [Test] // Test Decoder
public void TestEncoder ()
{
- Encoding ascii_encoding = Encoding.ASCII;
+ Encoding ascii_encoding = Encoding.ASCII;
byte[] bytes = new Byte[1];
int cnt = ascii_encoding.GetEncoder().GetBytes(testchars, 1, 1, bytes, 0, false);
- AssertEquals (1, cnt);
- AssertEquals (testchars[1], (char) bytes[0]);
+ Assert.AreEqual (1, cnt, "#1");
+ Assert.AreEqual (testchars [1], (char) bytes [0], "#2");
}
+ [Test]
public void TestZero ()
{
Encoding encoding = Encoding.ASCII;
- AssertEquals ("#01", encoding.GetString (new byte [0]), "");
- AssertEquals ("#02", encoding.GetString (new byte [0], 0, 0), "");
+ 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))]
+ public void EncoderFallback ()
+ {
+ Encoding e = Encoding.ASCII.Clone () as Encoding;
+ e.EncoderFallback = new EncoderExceptionFallback ();
+ e.GetBytes ("\u24c8");
}
-#if NET_2_0
[Test]
[ExpectedException (typeof (DecoderFallbackException))]
public void DecoderFallback ()
e.DecoderFallback = new DecoderExceptionFallback ();
e.GetChars (new byte [] {0x80});
}
-#endif
- }
+ [Test]
+ // [ExpectedException (typeof (ArgumentException))]
+ public void DecoderFallback2 ()
+ {
+ var bytes = new byte[] {
+ 0x30, 0xa0, 0x31, 0xa8
+ };
+ var enc = (ASCIIEncoding)Encoding.ASCII.Clone ();
+ enc.DecoderFallback = new TestFallbackDecoder ();
+
+ var chars = new char [7];
+ var ret = enc.GetChars (bytes, 0, bytes.Length, chars, 0);
+ Console.WriteLine (ret);
+
+ for (int i = 0; i < chars.Length; i++) {
+ Console.Write ("{0:x2} ", (int)chars [i]);
+ }
+ Console.WriteLine ();
+ }
+
+ [Test]
+ public void DecoderFallback3 ()
+ {
+ var bytes = new byte[] {
+ 0x30, 0xa0, 0x31, 0xa8
+ };
+ var enc = (ASCIIEncoding)Encoding.ASCII.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 (2), "ret");
+ Assert.That (chars [0], Is.EqualTo ('0'), "chars[0]");
+ Assert.That (chars [1], Is.EqualTo ('1'), "chars[1]");
+ Assert.That (chars [2], Is.EqualTo ('7'), "chars[2]");
+ Assert.That (chars [3], Is.EqualTo ('6'), "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 ();
+ }
+ }
+ }
+
+
+ }
}