PageRenderTime 44ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/Libs_1.8_NuGet/CodeTitans.UnitTests/Core/StringReaderTests.cs

#
C# | 203 lines | 153 code | 29 blank | 21 comment | 0 complexity | 04a3fabfab95d5bb5d5d47cf41d50917 MD5 | raw file
  1. #region License
  2. /*
  3. Copyright (c) 2010, Paweł Hofman (CodeTitans)
  4. All Rights Reserved.
  5. Licensed under the Apache License version 2.0.
  6. For more information please visit:
  7. http://codetitans.codeplex.com/license
  8. or
  9. http://www.apache.org/licenses/
  10. For latest source code, documentation, samples
  11. and more information please visit:
  12. http://codetitans.codeplex.com/
  13. */
  14. #endregion
  15. using System.IO;
  16. using System.Text;
  17. using CodeTitans.Helpers;
  18. #if NUNIT
  19. using NUnit.Framework;
  20. using TestClassAttribute=NUnit.Framework.TestFixtureAttribute;
  21. using TestMethodAttribute=NUnit.Framework.TestAttribute;
  22. using TestInitializeAttribute=NUnit.Framework.SetUpAttribute;
  23. using TestCleanupAttribute=NUnit.Framework.TearDownAttribute;
  24. #else
  25. using Microsoft.VisualStudio.TestTools.UnitTesting;
  26. #endif
  27. namespace CodeTitans.UnitTests.Core
  28. {
  29. /// <summary>
  30. /// Extra tests for reading strings.
  31. /// </summary>
  32. [TestClass]
  33. public class StringReaderTests
  34. {
  35. [TestMethod]
  36. public void CreateStreamReader()
  37. {
  38. var reader = StringHelper.CreateReader(CreateStreamReader("abc"));
  39. VerifyInitialState(reader);
  40. }
  41. [TestMethod]
  42. public void CreateTextReader()
  43. {
  44. var reader = StringHelper.CreateReader("abc\r\ndef\r\n");
  45. VerifyInitialState(reader);
  46. }
  47. public static TextReader CreateStreamReader(string initialText)
  48. {
  49. var stream = new MemoryStream(Encoding.UTF8.GetBytes(initialText ?? string.Empty));
  50. return new StreamReader(stream, Encoding.UTF8);
  51. }
  52. private static void VerifyInitialState(IStringReader reader)
  53. {
  54. Assert.IsNotNull(reader);
  55. Assert.AreEqual(char.MinValue, reader.CurrentChar);
  56. Assert.IsFalse(reader.IsEof);
  57. Assert.IsFalse(reader.IsEmpty);
  58. Assert.AreEqual(0, reader.Line);
  59. Assert.AreEqual(-1, reader.LineOffset);
  60. }
  61. [TestMethod]
  62. public void ReadWholeTextAndVerifyStates()
  63. {
  64. var reader = StringHelper.CreateReader("a\r\nb\r\n");
  65. VerifyReadingSimpleText(reader);
  66. }
  67. [TestMethod]
  68. public void ReadWholeStreamAndVerifyStates()
  69. {
  70. var reader = StringHelper.CreateReader(CreateStreamReader("a\r\nb\r\n"));
  71. VerifyReadingSimpleText(reader);
  72. }
  73. private static void VerifyReadingSimpleText(IStringReader reader)
  74. {
  75. Assert.IsNotNull(reader);
  76. // read first line:
  77. var c = reader.ReadNext();
  78. Assert.AreEqual('a', c);
  79. Assert.AreEqual('a', reader.CurrentChar);
  80. Assert.AreEqual(0, reader.Line);
  81. Assert.AreEqual(0, reader.LineOffset);
  82. Assert.IsFalse(reader.IsEmpty);
  83. c = reader.ReadNext();
  84. Assert.AreEqual('\r', c);
  85. Assert.AreEqual(0, reader.Line);
  86. Assert.AreEqual(1, reader.LineOffset);
  87. Assert.IsFalse(reader.IsEmpty);
  88. c = reader.ReadNext();
  89. Assert.AreEqual('\n', c);
  90. Assert.AreEqual('\n', reader.CurrentChar);
  91. Assert.AreEqual(0, reader.Line);
  92. Assert.AreEqual(2, reader.LineOffset);
  93. Assert.IsFalse(reader.IsEmpty);
  94. c = reader.ReadNext();
  95. Assert.AreEqual('b', c);
  96. Assert.AreEqual('b', reader.CurrentChar);
  97. Assert.AreEqual(1, reader.Line);
  98. Assert.AreEqual(0, reader.LineOffset);
  99. Assert.IsFalse(reader.IsEmpty);
  100. c = reader.ReadNext();
  101. Assert.AreEqual('\r', c);
  102. Assert.AreEqual('\r', reader.CurrentChar);
  103. Assert.AreEqual(1, reader.Line);
  104. Assert.AreEqual(1, reader.LineOffset);
  105. Assert.IsFalse(reader.IsEmpty);
  106. c = reader.ReadNext();
  107. Assert.AreEqual('\n', c);
  108. Assert.AreEqual('\n', reader.CurrentChar);
  109. Assert.AreEqual(1, reader.Line);
  110. Assert.AreEqual(2, reader.LineOffset);
  111. Assert.IsFalse(reader.IsEof);
  112. Assert.IsFalse(reader.IsEmpty);
  113. c = reader.ReadNext();
  114. Assert.AreEqual('\0', c);
  115. Assert.AreEqual('\0', reader.CurrentChar);
  116. Assert.AreEqual(2, reader.Line);
  117. Assert.AreEqual(-1, reader.LineOffset);
  118. Assert.IsTrue(reader.IsEof);
  119. Assert.IsFalse(reader.IsEmpty);
  120. }
  121. [TestMethod]
  122. public void ReadEmptyTextByLines()
  123. {
  124. var reader = StringHelper.CreateReader((string) null);
  125. VerifyEmptyReadingByLines(reader);
  126. }
  127. [TestMethod]
  128. public void ReadEmptyStreamByLines()
  129. {
  130. var reader = StringHelper.CreateReader(CreateStreamReader(null));
  131. VerifyEmptyReadingByLines(reader);
  132. }
  133. private static void VerifyEmptyReadingByLines(IStringReader reader)
  134. {
  135. Assert.IsNotNull(reader);
  136. Assert.IsTrue(reader.IsEmpty);
  137. Assert.AreEqual(null, reader.ReadLine());
  138. Assert.AreEqual(0, reader.Line);
  139. Assert.AreEqual(-1, reader.LineOffset);
  140. Assert.AreEqual(char.MinValue, reader.CurrentChar);
  141. }
  142. [TestMethod]
  143. public void ReadTextByLines()
  144. {
  145. var reader = StringHelper.CreateReader("\n\r\n");
  146. VerifyReadingByLines(reader);
  147. }
  148. [TestMethod]
  149. public void ReadStreamByLines()
  150. {
  151. var reader = StringHelper.CreateReader(CreateStreamReader("\n\r\n"));
  152. VerifyReadingByLines(reader);
  153. }
  154. private static void VerifyReadingByLines(IStringReader reader)
  155. {
  156. var line = reader.ReadLine();
  157. Assert.IsNotNull(reader);
  158. Assert.AreEqual(string.Empty, line);
  159. Assert.AreEqual('\n', reader.CurrentChar);
  160. Assert.AreEqual(0, reader.Line);
  161. Assert.AreEqual(0, reader.LineOffset);
  162. line = reader.ReadLine();
  163. Assert.AreEqual(string.Empty, line);
  164. Assert.AreEqual('\n', reader.CurrentChar);
  165. Assert.AreEqual(1, reader.Line);
  166. Assert.AreEqual(1, reader.LineOffset);
  167. }
  168. }
  169. }