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