// // Copyright (c) 2007 Novell, Inc. // // Authors: // Jackson Harper (jackson@ximian.com) // using System; using System.IO; using System.Text; using System.Windows.Forms; using System.Windows.Forms.RTF; using NUnit.Framework; namespace MonoTests.System.Windows.Forms { [TestFixture] public class RtfTest { // class that converts chunks of RTF into HTML internal class RtfToHtml { private RTF parser; private StringBuilder text_buffer; public RtfToHtml (RTF parser) { this.parser = parser; parser.ClassCallback [TokenClass.Text] = new ClassDelegate (HandleText); parser.ClassCallback [TokenClass.Control] = new ClassDelegate (HandleControl); text_buffer = new StringBuilder (); } public void Run () { parser.Read (); } public string GetText () { return text_buffer.ToString (); } private void HandleText (RTF rtf) { text_buffer.Append (rtf.EncodedText); } private void HandleControl (RTF rtf) { switch (rtf.Major) { case Major.CharAttr: switch (rtf.Minor) { case Minor.Bold: text_buffer.Append (rtf.Param == RTF.NoParam ? "" : ""); break; case Minor.Italic: text_buffer.Append (rtf.Param == RTF.NoParam ? "" : ""); break; case Minor.StrikeThru: text_buffer.Append (rtf.Param == RTF.NoParam ? "" : ""); break; } break; case Major.SpecialChar: switch (rtf.Minor) { case Minor.Par: text_buffer.Append ("

"); break; } break; } } } [Test] public void TestEmptyDoc () { RTF parser = new RTF (TextStream ("{\\rtf1}")); RtfToHtml r = new RtfToHtml (parser); r.Run (); Assert.AreEqual (String.Empty, r.GetText (), "emptydoc-1"); } [Test] public void TestSimpleDoc1 () { Assert.AreEqual ("text", ParsedText ("{\\rtf1 text}"), "simpledoc1-1"); Assert.AreEqual ("text", ParsedText ("{\\rtf1\ntext}"), "simpledoc1-2"); Assert.AreEqual ("text", ParsedText ("\\rtf1\ntext\n}"), "simpledoc1-3"); Assert.AreEqual ("text", ParsedText ("\\rtf1\n text}"), "simpledoc1-4"); Assert.AreEqual ("text ", ParsedText ("\\rtf1\n text \n}"), "simpledoc1-5"); Assert.AreEqual ("text ", ParsedText ("\\rtf1\r\n text \r\n}"), "simpledoc1-6"); Assert.AreEqual ("text ", ParsedText ("\\rtf1\n\n\n text \n\n\n}"), "simpledoc1-7"); } [Test] public void TestSimpleParagraphs () { Assert.AreEqual ("

", ParsedText ("\\rtf1\\par}"), "simplepar-1"); Assert.AreEqual ("

", ParsedText ("\\rtf1\\par\\par}"), "simplepar-2"); Assert.AreEqual (String.Empty, ParsedText ("\\rtf1 \\partext}"), "simplepar-3"); Assert.AreEqual ("

text", ParsedText ("\\rtf1 \\par text}"), "simplepar-4"); Assert.AreEqual ("

text

", ParsedText ("\\rtf1 \\par text\\par}"), "simplepar-5"); } [Test] public void TestSimpleBold () { Assert.AreEqual ("text", ParsedText ("{\\rtf1 {\\b text}}"), "simplebold-1"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\b text\\b0}"), "simplebold-2"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\b text\\b0}"), "simplebold-3"); Assert.AreEqual ("text ", ParsedText ("{\\rtf1 \\b text \\b0}"), "simplebold-4"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\b\\b text}"), "simplebold-5"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\b\\b text\\b0\\b0}"), "simplebold-6"); } [Test] public void TestSimpleItalic () { Assert.AreEqual ("text", ParsedText ("{\\rtf1 {\\i text}}"), "simpleitalic-1"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\i text\\i0}"), "simpleitalic-2"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\i text\\i0}"), "simpleitalic-3"); Assert.AreEqual ("text ", ParsedText ("{\\rtf1 \\i text \\i0}"), "simpleitalic-4"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\i\\i text}"), "simpleitalic-5"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\i\\i text\\i0\\i0}"), "simpleitalic-6"); } [Test] public void TestSimpleStrikeThru () { Assert.AreEqual ("text", ParsedText ("{\\rtf1 {\\strike text}}"), "simplestrike-1"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\strike text\\strike0}"), "simplestrike-2"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\strike text\\strike0}"), "simplestrike-3"); Assert.AreEqual ("text ", ParsedText ("{\\rtf1 \\strike text \\strike0}"), "simplestrike-4"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\strike\\strike text}"), "simplestrike-5"); Assert.AreEqual ("text", ParsedText ("{\\rtf1 \\strike\\strike text\\strike0\\strike0}"), "simplestrike-6"); } private string ParsedText (string text) { RTF parser = new RTF (TextStream (text)); RtfToHtml r = new RtfToHtml (parser); r.Run (); return r.GetText (); } private MemoryStream TextStream (string text) { MemoryStream res = new MemoryStream (); StreamWriter writer = new StreamWriter (res); writer.Write (text); writer.Flush (); res.Seek (0, SeekOrigin.Begin); return res; } } }