UnicodeEncodingTest.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. //
  2. // UnicodeEncodingTest.cs - NUnit Test Cases for System.Text.UnicodeEncoding
  3. //
  4. // Author:
  5. // Patrick Kalkman [email protected]
  6. //
  7. // (C) 2003 Patrick Kalkman
  8. //
  9. using NUnit.Framework;
  10. using System;
  11. using System.Text;
  12. namespace MonoTests.System.Text
  13. {
  14. [TestFixture]
  15. public class UnicodeEncodingTest
  16. {
  17. [Test]
  18. public void IsBrowserDisplay ()
  19. {
  20. UnicodeEncoding enc = new UnicodeEncoding ();
  21. Assert.IsFalse (enc.IsBrowserDisplay);
  22. }
  23. [Test]
  24. public void IsBrowserSave ()
  25. {
  26. UnicodeEncoding enc = new UnicodeEncoding ();
  27. Assert.IsTrue (enc.IsBrowserSave);
  28. }
  29. [Test]
  30. public void IsMailNewsDisplay ()
  31. {
  32. UnicodeEncoding enc = new UnicodeEncoding ();
  33. Assert.IsFalse (enc.IsMailNewsDisplay);
  34. }
  35. [Test]
  36. public void IsMailNewsSave ()
  37. {
  38. UnicodeEncoding enc = new UnicodeEncoding ();
  39. Assert.IsFalse (enc.IsMailNewsSave);
  40. }
  41. [Test]
  42. public void TestEncodingGetBytes1()
  43. {
  44. //pi and sigma in unicode
  45. string Unicode = "\u03a0\u03a3";
  46. byte[] UniBytes;
  47. UnicodeEncoding UnicodeEnc = new UnicodeEncoding (); //little-endian
  48. UniBytes = UnicodeEnc.GetBytes (Unicode);
  49. Assertion.AssertEquals ("Uni #1", 0xA0, UniBytes [0]);
  50. Assertion.AssertEquals ("Uni #2", 0x03, UniBytes [1]);
  51. Assertion.AssertEquals ("Uni #3", 0xA3, UniBytes [2]);
  52. Assertion.AssertEquals ("Uni #4", 0x03, UniBytes [3]);
  53. }
  54. [Test]
  55. public void TestEncodingGetBytes2()
  56. {
  57. //pi and sigma in unicode
  58. string Unicode = "\u03a0\u03a3";
  59. byte[] UniBytes;
  60. UnicodeEncoding UnicodeEnc = new UnicodeEncoding (true, true); //big-endian
  61. UniBytes = UnicodeEnc.GetBytes (Unicode);
  62. Assertion.AssertEquals ("Uni #1", 0x03, UniBytes [0]);
  63. Assertion.AssertEquals ("Uni #2", 0xA0, UniBytes [1]);
  64. Assertion.AssertEquals ("Uni #3", 0x03, UniBytes [2]);
  65. Assertion.AssertEquals ("Uni #4", 0xA3, UniBytes [3]);
  66. }
  67. [Test]
  68. public void TestEncodingGetBytes3()
  69. {
  70. //pi and sigma in unicode
  71. string Unicode = "\u03a0\u03a3";
  72. byte[] UniBytes = new byte [4];
  73. UnicodeEncoding UnicodeEnc = new UnicodeEncoding (); //little-endian
  74. int Cnt = UnicodeEnc.GetBytes (Unicode.ToCharArray(), 0, Unicode.Length, UniBytes, 0);
  75. Assertion.AssertEquals ("Uni #1", 4, Cnt);
  76. Assertion.AssertEquals ("Uni #2", 0xA0, UniBytes [0]);
  77. Assertion.AssertEquals ("Uni #3", 0x03, UniBytes [1]);
  78. Assertion.AssertEquals ("Uni #4", 0xA3, UniBytes [2]);
  79. Assertion.AssertEquals ("Uni #5", 0x03, UniBytes [3]);
  80. }
  81. [Test]
  82. public void TestEncodingDecodingGetBytes1()
  83. {
  84. //pi and sigma in unicode
  85. string Unicode = "\u03a0\u03a3";
  86. UnicodeEncoding UnicodeEnc = new UnicodeEncoding (); //little-endian
  87. //Encode the unicode string.
  88. byte[] UniBytes = UnicodeEnc.GetBytes (Unicode);
  89. //Decode the bytes to a unicode char array.
  90. char[] UniChars = UnicodeEnc.GetChars (UniBytes);
  91. string Result = new string(UniChars);
  92. Assertion.AssertEquals ("Uni #1", Unicode, Result);
  93. }
  94. [Test]
  95. public void TestEncodingDecodingGetBytes2()
  96. {
  97. //pi and sigma in unicode
  98. string Unicode = "\u03a0\u03a3";
  99. UnicodeEncoding UnicodeEnc = new UnicodeEncoding (true, true); //big-endian
  100. //Encode the unicode string.
  101. byte[] UniBytes = UnicodeEnc.GetBytes (Unicode);
  102. //Decode the bytes to a unicode char array.
  103. char[] UniChars = UnicodeEnc.GetChars (UniBytes);
  104. string Result = new string(UniChars);
  105. Assertion.AssertEquals ("Uni #1", Unicode, Result);
  106. }
  107. [Test]
  108. public void TestEncodingGetCharCount ()
  109. {
  110. byte[] b = new byte[] {255, 254, 115, 0, 104, 0, 105, 0};
  111. UnicodeEncoding encoding = new UnicodeEncoding ();
  112. Assertion.AssertEquals ("GetCharCount #1", 3,
  113. encoding.GetCharCount (b, 2, b.Length - 2));
  114. }
  115. [Test]
  116. public void TestPreamble1()
  117. {
  118. //litle-endian with byte order mark.
  119. UnicodeEncoding UnicodeEnc = new UnicodeEncoding (false, true);
  120. byte[] PreAmble = UnicodeEnc.GetPreamble();
  121. Assertion.AssertEquals ("Uni #1", 0xFF, PreAmble [0]);
  122. Assertion.AssertEquals ("Uni #2", 0xFE, PreAmble [1]);
  123. }
  124. [Test]
  125. public void TestPreamble2()
  126. {
  127. //big-endian with byte order mark.
  128. UnicodeEncoding UnicodeEnc = new UnicodeEncoding (true, true);
  129. byte[] PreAmble = UnicodeEnc.GetPreamble();
  130. Assertion.AssertEquals ("Uni #1", 0xFE, PreAmble [0]);
  131. Assertion.AssertEquals ("Uni #2", 0xFF, PreAmble [1]);
  132. }
  133. [Test]
  134. public void TestPreamble3()
  135. {
  136. //little-endian without byte order mark.
  137. UnicodeEncoding UnicodeEnc = new UnicodeEncoding (false, false);
  138. byte[] PreAmble = UnicodeEnc.GetPreamble();
  139. Assertion.AssertEquals ("Uni #1", 0, PreAmble.Length);
  140. }
  141. [Test]
  142. #if NET_2_0
  143. [Category ("NotWorking")]
  144. #endif
  145. public void TestMaxCharCount()
  146. {
  147. UnicodeEncoding UnicodeEnc = new UnicodeEncoding ();
  148. #if NET_2_0
  149. // where is this extra 1 coming from?
  150. Assertion.AssertEquals ("UTF #1", 26, UnicodeEnc.GetMaxCharCount(50));
  151. Assertion.AssertEquals ("UTF #2", 27, UnicodeEnc.GetMaxCharCount(51));
  152. #else
  153. Assertion.AssertEquals ("UTF #1", 25, UnicodeEnc.GetMaxCharCount(50));
  154. #endif
  155. }
  156. [Test]
  157. #if NET_2_0
  158. [Category ("NotWorking")]
  159. #endif
  160. public void TestMaxByteCount()
  161. {
  162. UnicodeEncoding UnicodeEnc = new UnicodeEncoding ();
  163. #if NET_2_0
  164. // is this extra 2 BOM?
  165. Assertion.AssertEquals ("UTF #1", 102, UnicodeEnc.GetMaxByteCount(50));
  166. #else
  167. Assertion.AssertEquals ("UTF #1", 100, UnicodeEnc.GetMaxByteCount(50));
  168. #endif
  169. }
  170. [Test]
  171. public void ZeroLengthArrays ()
  172. {
  173. UnicodeEncoding encoding = new UnicodeEncoding ();
  174. encoding.GetCharCount (new byte [0]);
  175. encoding.GetChars (new byte [0]);
  176. encoding.GetCharCount (new byte [0], 0, 0);
  177. encoding.GetChars (new byte [0], 0, 0);
  178. encoding.GetChars (new byte [0], 0, 0, new char [0], 0);
  179. encoding.GetByteCount (new char [0]);
  180. encoding.GetBytes (new char [0]);
  181. encoding.GetByteCount (new char [0], 0, 0);
  182. encoding.GetBytes (new char [0], 0, 0);
  183. encoding.GetBytes (new char [0], 0, 0, new byte [0], 0);
  184. encoding.GetByteCount ("");
  185. encoding.GetBytes ("");
  186. }
  187. [Test]
  188. public void ByteOrderMark ()
  189. {
  190. string littleEndianString = "\ufeff\u0042\u004f\u004d";
  191. string bigEndianString = "\ufffe\u4200\u4f00\u4d00";
  192. byte [] littleEndianBytes = new byte [] {0xff, 0xfe, 0x42, 0x00, 0x4f, 0x00, 0x4d, 0x00};
  193. byte [] bigEndianBytes = new byte [] {0xfe, 0xff, 0x00, 0x42, 0x00, 0x4f, 0x00, 0x4d};
  194. UnicodeEncoding encoding;
  195. encoding = new UnicodeEncoding (false, true);
  196. Assertion.AssertEquals ("BOM #1", encoding.GetBytes (littleEndianString), littleEndianBytes);
  197. Assertion.AssertEquals ("BOM #2", encoding.GetBytes (bigEndianString), bigEndianBytes);
  198. Assertion.AssertEquals ("BOM #3", encoding.GetString (littleEndianBytes), littleEndianString);
  199. Assertion.AssertEquals ("BOM #4", encoding.GetString (bigEndianBytes), bigEndianString);
  200. encoding = new UnicodeEncoding (true, true);
  201. Assertion.AssertEquals ("BOM #5", encoding.GetBytes (littleEndianString), bigEndianBytes);
  202. Assertion.AssertEquals ("BOM #6", encoding.GetBytes (bigEndianString), littleEndianBytes);
  203. Assertion.AssertEquals ("BOM #7", encoding.GetString (littleEndianBytes), bigEndianString);
  204. Assertion.AssertEquals ("BOM #8", encoding.GetString (bigEndianBytes), littleEndianString);
  205. }
  206. }
  207. }