DecoderReplacementFallbackBufferTest.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //
  2. // DecoderReplacementFallbackBuffer.cs
  3. //
  4. // Author:
  5. // Atsushi Enomoto <[email protected]>
  6. //
  7. // Copyright (C) 2005 Novell, Inc. http://www.novell.com
  8. //
  9. #if NET_2_0
  10. using System;
  11. using System.IO;
  12. using System.Text;
  13. using NUnit.Framework;
  14. using Buffer = System.Text.DecoderReplacementFallbackBuffer;
  15. namespace MonoTests.System.Text
  16. {
  17. [TestFixture]
  18. public class DecoderReplacementFallbackBufferTest
  19. {
  20. private Buffer NewInstance ()
  21. {
  22. return new Buffer (new DecoderReplacementFallback ());
  23. }
  24. [Test]
  25. public void FallbackEmptyDefault ()
  26. {
  27. Buffer b = NewInstance ();
  28. Assert.IsTrue (b.Fallback (new byte [] {}, 0), "#0");
  29. Assert.IsFalse (b.MovePrevious (), "#1");
  30. Assert.AreEqual (1, b.Remaining, "#2");
  31. Assert.AreEqual ('?', b.GetNextChar (), "#3");
  32. Assert.AreEqual (0, b.Remaining, "#4");
  33. // the string is already consumed.
  34. Assert.AreEqual (char.MinValue, b.GetNextChar (), "#5");
  35. }
  36. [Test]
  37. public void FallbackDefaultEncodingUTF8 ()
  38. {
  39. Buffer b = Encoding.UTF8.DecoderFallback.CreateFallbackBuffer () as Buffer;
  40. Assert.IsTrue (b.Fallback (new byte [] {}, 0), "#1");
  41. Assert.IsFalse (b.MovePrevious (), "#2");
  42. Assert.AreEqual (1, b.Remaining, "#3");
  43. Assert.AreEqual ('\uFFFD', b.GetNextChar (), "#4");
  44. }
  45. [Test]
  46. public void FallbackEmptyForEncodingUTF8 ()
  47. {
  48. Buffer b = new DecoderReplacementFallbackBuffer (new DecoderReplacementFallback (String.Empty));
  49. Assert.IsFalse (b.Fallback (new byte [] {}, 0), "#1");
  50. Assert.IsFalse (b.MovePrevious (), "#2");
  51. Assert.AreEqual (0, b.Remaining, "#3");
  52. // the string does not exist.
  53. Assert.AreEqual (char.MinValue, b.GetNextChar (), "#4");
  54. }
  55. [Test]
  56. public void FallbackSequential ()
  57. {
  58. Buffer b = NewInstance ();
  59. b.Fallback (new byte [] {}, 0);
  60. b.GetNextChar ();
  61. b.Fallback (new byte [] {}, 0);
  62. }
  63. [Test]
  64. [ExpectedException (typeof (ArgumentException))]
  65. public void FallbackRecursiveError ()
  66. {
  67. Buffer b = NewInstance ();
  68. b.Fallback (new byte [] {}, 0);
  69. b.Fallback (new byte [] {}, 0);
  70. }
  71. [Test]
  72. [Category ("NotWorking")]
  73. public void Iterate ()
  74. {
  75. Assert.AreEqual ('\0', Encoding.UTF8.DecoderFallback
  76. .CreateFallbackBuffer ().GetNextChar (), "#1");
  77. Buffer b = NewInstance ();
  78. // Assert.AreEqual (1, b.Remaining, "#2");
  79. // Assert.AreEqual ('?', b.GetNextChar (), "#3");
  80. Assert.AreEqual (0, b.Remaining, "#4");
  81. Assert.AreEqual ('\0', b.GetNextChar (), "#5");
  82. // Assert.IsTrue (b.MovePrevious (), "#6");
  83. // Assert.AreEqual (1, b.Remaining, "#7");
  84. Assert.IsFalse (b.MovePrevious (), "#8");
  85. // Assert.AreEqual ('?', b.GetNextChar (), "#9");
  86. }
  87. [Test]
  88. public void Reset ()
  89. {
  90. DecoderReplacementFallback f = new DecoderReplacementFallback ("X");
  91. DecoderReplacementFallbackBuffer b = new DecoderReplacementFallbackBuffer (f);
  92. b.Fallback (new byte [0], 0);
  93. Assert.AreEqual (1, b.Remaining, "#1");
  94. b.Reset ();
  95. Assert.AreEqual (0, b.Remaining, "#2");
  96. b.Fallback (new byte [0], 0); // do not raise an error
  97. b.Reset ();
  98. Assert.AreEqual (0, (int) b.GetNextChar (), "#3");
  99. }
  100. }
  101. }
  102. #endif