RtfTest.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. //
  2. // Copyright (c) 2007 Novell, Inc.
  3. //
  4. // Authors:
  5. // Jackson Harper ([email protected])
  6. //
  7. using System;
  8. using System.IO;
  9. using System.Text;
  10. using System.Windows.Forms;
  11. using System.Windows.Forms.RTF;
  12. using NUnit.Framework;
  13. namespace MonoTests.System.Windows.Forms
  14. {
  15. [TestFixture]
  16. public class RtfTest
  17. {
  18. // class that converts chunks of RTF into HTML
  19. internal class RtfToHtml {
  20. private RTF parser;
  21. private StringBuilder text_buffer;
  22. public RtfToHtml (RTF parser)
  23. {
  24. this.parser = parser;
  25. parser.ClassCallback [TokenClass.Text] = new ClassDelegate (HandleText);
  26. parser.ClassCallback [TokenClass.Control] = new ClassDelegate (HandleControl);
  27. text_buffer = new StringBuilder ();
  28. }
  29. public void Run ()
  30. {
  31. parser.Read ();
  32. }
  33. public string GetText ()
  34. {
  35. return text_buffer.ToString ();
  36. }
  37. private void HandleText (RTF rtf)
  38. {
  39. text_buffer.Append (rtf.EncodedText);
  40. }
  41. private void HandleControl (RTF rtf)
  42. {
  43. switch (rtf.Major) {
  44. case Major.CharAttr:
  45. switch (rtf.Minor) {
  46. case Minor.Bold:
  47. text_buffer.Append (rtf.Param == RTF.NoParam ? "<b>" : "</b>");
  48. break;
  49. case Minor.Italic:
  50. text_buffer.Append (rtf.Param == RTF.NoParam ? "<i>" : "</i>");
  51. break;
  52. case Minor.StrikeThru:
  53. text_buffer.Append (rtf.Param == RTF.NoParam ? "<s>" : "</s>");
  54. break;
  55. }
  56. break;
  57. case Major.SpecialChar:
  58. switch (rtf.Minor) {
  59. case Minor.Par:
  60. text_buffer.Append ("<p>");
  61. break;
  62. }
  63. break;
  64. }
  65. }
  66. }
  67. [Test]
  68. public void TestEmptyDoc ()
  69. {
  70. RTF parser = new RTF (TextStream ("{\\rtf1}"));
  71. RtfToHtml r = new RtfToHtml (parser);
  72. r.Run ();
  73. Assert.AreEqual (String.Empty, r.GetText (), "emptydoc-1");
  74. }
  75. [Test]
  76. public void TestSimpleDoc1 ()
  77. {
  78. Assert.AreEqual ("text", ParsedText ("{\\rtf1 text}"), "simpledoc1-1");
  79. Assert.AreEqual ("text", ParsedText ("{\\rtf1\ntext}"), "simpledoc1-2");
  80. Assert.AreEqual ("text", ParsedText ("\\rtf1\ntext\n}"), "simpledoc1-3");
  81. Assert.AreEqual ("text", ParsedText ("\\rtf1\n text}"), "simpledoc1-4");
  82. Assert.AreEqual ("text ", ParsedText ("\\rtf1\n text \n}"), "simpledoc1-5");
  83. Assert.AreEqual ("text ", ParsedText ("\\rtf1\r\n text \r\n}"), "simpledoc1-6");
  84. Assert.AreEqual ("text ", ParsedText ("\\rtf1\n\n\n text \n\n\n}"), "simpledoc1-7");
  85. }
  86. [Test]
  87. public void TestSimpleParagraphs ()
  88. {
  89. Assert.AreEqual ("<p>", ParsedText ("\\rtf1\\par}"), "simplepar-1");
  90. Assert.AreEqual ("<p><p>", ParsedText ("\\rtf1\\par\\par}"), "simplepar-2");
  91. Assert.AreEqual (String.Empty, ParsedText ("\\rtf1 \\partext}"), "simplepar-3");
  92. Assert.AreEqual ("<p>text", ParsedText ("\\rtf1 \\par text}"), "simplepar-4");
  93. Assert.AreEqual ("<p>text<p>", ParsedText ("\\rtf1 \\par text\\par}"), "simplepar-5");
  94. }
  95. [Test]
  96. public void TestSimpleBold ()
  97. {
  98. Assert.AreEqual ("<b>text", ParsedText ("{\\rtf1 {\\b text}}"), "simplebold-1");
  99. Assert.AreEqual ("<b>text</b>", ParsedText ("{\\rtf1 \\b text\\b0}"), "simplebold-2");
  100. Assert.AreEqual ("<b>text</b>", ParsedText ("{\\rtf1 \\b text\\b0}"), "simplebold-3");
  101. Assert.AreEqual ("<b>text </b>", ParsedText ("{\\rtf1 \\b text \\b0}"), "simplebold-4");
  102. Assert.AreEqual ("<b><b>text", ParsedText ("{\\rtf1 \\b\\b text}"), "simplebold-5");
  103. Assert.AreEqual ("<b><b>text</b></b>", ParsedText ("{\\rtf1 \\b\\b text\\b0\\b0}"), "simplebold-6");
  104. }
  105. [Test]
  106. public void TestSimpleItalic ()
  107. {
  108. Assert.AreEqual ("<i>text", ParsedText ("{\\rtf1 {\\i text}}"), "simpleitalic-1");
  109. Assert.AreEqual ("<i>text</i>", ParsedText ("{\\rtf1 \\i text\\i0}"), "simpleitalic-2");
  110. Assert.AreEqual ("<i>text</i>", ParsedText ("{\\rtf1 \\i text\\i0}"), "simpleitalic-3");
  111. Assert.AreEqual ("<i>text </i>", ParsedText ("{\\rtf1 \\i text \\i0}"), "simpleitalic-4");
  112. Assert.AreEqual ("<i><i>text", ParsedText ("{\\rtf1 \\i\\i text}"), "simpleitalic-5");
  113. Assert.AreEqual ("<i><i>text</i></i>", ParsedText ("{\\rtf1 \\i\\i text\\i0\\i0}"), "simpleitalic-6");
  114. }
  115. [Test]
  116. public void TestSimpleStrikeThru ()
  117. {
  118. Assert.AreEqual ("<s>text", ParsedText ("{\\rtf1 {\\strike text}}"), "simplestrike-1");
  119. Assert.AreEqual ("<s>text</s>", ParsedText ("{\\rtf1 \\strike text\\strike0}"), "simplestrike-2");
  120. Assert.AreEqual ("<s>text</s>", ParsedText ("{\\rtf1 \\strike text\\strike0}"), "simplestrike-3");
  121. Assert.AreEqual ("<s>text </s>", ParsedText ("{\\rtf1 \\strike text \\strike0}"), "simplestrike-4");
  122. Assert.AreEqual ("<s><s>text", ParsedText ("{\\rtf1 \\strike\\strike text}"), "simplestrike-5");
  123. Assert.AreEqual ("<s><s>text</s></s>", ParsedText ("{\\rtf1 \\strike\\strike text\\strike0\\strike0}"), "simplestrike-6");
  124. }
  125. private string ParsedText (string text)
  126. {
  127. RTF parser = new RTF (TextStream (text));
  128. RtfToHtml r = new RtfToHtml (parser);
  129. r.Run ();
  130. return r.GetText ();
  131. }
  132. private MemoryStream TextStream (string text)
  133. {
  134. MemoryStream res = new MemoryStream ();
  135. StreamWriter writer = new StreamWriter (res);
  136. writer.Write (text);
  137. writer.Flush ();
  138. res.Seek (0, SeekOrigin.Begin);
  139. return res;
  140. }
  141. }
  142. }