Make the tests build again.
[grantlee:grantlee.git] / tests / plainmarkupbuildertest.cpp
1 /*
2     This file is part of KDE.
3
4     Copyright (c) 2008 Stephen Kelly <steveire@gmail.com>
5
6     This library is free software; you can redistribute it and/or modify it
7     under the terms of the GNU Library General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or (at your
9     option) any later version.
10
11     This library is distributed in the hope that it will be useful, but WITHOUT
12     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
14     License for more details.
15
16     You should have received a copy of the GNU Library General Public License
17     along with this library; see the file COPYING.LIB.  If not, write to the
18     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19     02110-1301, USA.
20 */
21
22 #include <QtTest>
23 #include <QtCore>
24 #include <qtest_kde.h>
25 #include <qtestevent.h>
26 #include <QRegExp>
27 #include <QTextCursor>
28 #include <QTextDocument>
29 #include <QTextEdit>
30
31 #include "markupdirector.h"
32 #include "plaintextmarkupbuilder.h"
33 #include "texthtmlbuilder.h"
34
35 using namespace Grantlee;
36
37 class TestPlainMarkupOutput: public QObject
38 {
39     Q_OBJECT
40 private slots:
41
42 // Test paragraph contents:
43     void testSingleFormat();
44     void testDoubleFormat();
45     void testDoubleStartDifferentFinish();
46     void testDoubleStartDifferentFinishReverseOrder();
47     void testDifferentStartDoubleFinish();
48     void testDifferentStartDoubleFinishReverseOrder();
49     void testOverlap();
50     void testAnchor();
51     void testAnchorWithFormattedContent();
52     void testAdjacentAnchors();
53     void testNestedFormatting();
54     void testSpan();
55     void testDoubleSpan();
56     void testSpanNesting();
57     void testEdgeCaseLeft();
58     void testEdgeCaseRight();
59     void testImage();
60     void testImageResized();
61     void testEachFormatTagSingly();
62     void testHorizontalRule();
63     void testNewlines();
64     void testEmptyParagraphs();
65     void testNewlinesThroughQTextEdit();
66     void testBrInsideParagraph();
67
68 };
69
70 void TestPlainMarkupOutput::testSingleFormat()
71 {
72     QTextDocument *doc = new QTextDocument();
73
74     // One format
75     doc->setHtml("This <b>text</b> is bold.");
76
77     PlainTextMarkupOutputter outputter;
78     outputter.processDocument( doc );
79     QString result = outputter.getResult();
80
81     QRegExp regex(QString("^This \\*text\\* is bold.\\n$"));
82
83     QVERIFY(regex.exactMatch(result));
84
85 }
86
87 void TestPlainMarkupOutput::testDoubleFormat()
88 {
89     QTextDocument *doc = new QTextDocument();
90
91     // One format
92     doc->setHtml("Some <b><i>formatted</i></b> text.");
93
94     PlainTextMarkupOutputter outputter;
95     outputter.processDocument( doc );
96     QString result = outputter.getResult();
97
98     QRegExp regex(QString("^Some (\\*/|/\\*)formatted(\\*/|/\\*) text.\\n$"));
99
100     QVERIFY(regex.exactMatch(result));
101
102 }
103
104 void TestPlainMarkupOutput::testAnchor()
105 {
106     QTextDocument *doc = new QTextDocument();
107     doc->setHtml("A <a href=\"http://www.kde.org\">link</a> to KDE.");
108
109     PlainTextMarkupOutputter outputter;
110     outputter.processDocument( doc );
111     QString result = outputter.getResult();
112
113     QRegExp regex(QString("^A link\\[1\\] to KDE.\\n\\n---- References ----\\n\\[1\\] http://www.kde.org\\n$"));
114
115     regex.exactMatch(result);
116
117
118     QVERIFY(regex.exactMatch(result));
119
120
121 }
122
123 void TestPlainMarkupOutput::testAnchorWithFormattedContent()
124 {
125     QTextDocument *doc = new QTextDocument();
126     doc->setHtml("A <a href=\"http://www.kde.org\"><b>formatted</b> link</a> to KDE.");
127
128     PlainTextMarkupOutputter outputter;
129     outputter.processDocument( doc );
130     QString result = outputter.getResult();
131
132
133     QRegExp regex(QString("^A \\*formatted\\* link\\[1\\] to KDE.\\n\\n---- References ----\\n\\[1\\] http://www.kde.org\\n$"));
134
135     QVERIFY(regex.exactMatch(result));
136
137 }
138
139 void TestPlainMarkupOutput::testAdjacentAnchors()
140 {
141     QTextDocument *doc = new QTextDocument();
142     doc->setHtml("Two <a href=\"http://www.kde.org\">links</a><a href=\"http://www.google.com\">next</a> to eachother.");
143
144     PlainTextMarkupOutputter outputter;
145     outputter.processDocument( doc );
146     QString result = outputter.getResult();
147
148     QRegExp regex(QString("^Two links\\[1\\]next\\[2\\] to eachother.\\n\\n---- References ----\\n\\[1\\] http://www.kde.org\\n\\[2\\] http://www.google.com\\n$"));
149
150     QVERIFY(regex.exactMatch(result));
151 }
152
153 void TestPlainMarkupOutput::testNestedFormatting()
154 {
155     QTextDocument *doc = new QTextDocument();
156     doc->setHtml("This <b>text is <i>italic</i> and</b> bold.");
157
158     PlainTextMarkupOutputter outputter;
159     outputter.processDocument( doc );
160     QString result = outputter.getResult();
161
162     QRegExp regex(QString("^This \\*text is /italic/ and\\* bold.\\n$"));
163
164     QVERIFY(regex.exactMatch(result));
165 }
166
167 void TestPlainMarkupOutput::testSpan()
168 {
169     QTextDocument *doc = new QTextDocument();
170     doc->setHtml("Some <span style=\"color:#ff0000;\">formatted</span> text.");
171
172     PlainTextMarkupOutputter outputter;
173     outputter.processDocument( doc );
174     QString result = outputter.getResult();
175
176     QRegExp regex = QRegExp("^Some formatted text.\\n$");
177
178     QVERIFY(regex.exactMatch(result));
179 }
180
181 void TestPlainMarkupOutput::testDoubleSpan()
182 {
183     QTextDocument *doc = new QTextDocument();
184     doc->setHtml("Some <span style=\"color:#ff0000;background-color:#00ff00;\">formatted</span> text.");
185
186     PlainTextMarkupOutputter outputter;
187     outputter.processDocument( doc );
188     QString result = outputter.getResult();
189
190
191     QRegExp regex = QRegExp("^Some formatted text.\\n$");
192
193     QVERIFY(regex.exactMatch(result));
194
195 }
196
197 void TestPlainMarkupOutput::testSpanNesting()
198 {
199     QTextDocument *doc = new QTextDocument();
200     doc->setHtml("Paragraph <span style=\"background-color:#00ff00;\">with some <span style=\"color:#ff0000;\">formatted</span> nested</span> text.");
201
202     PlainTextMarkupOutputter outputter;
203     outputter.processDocument( doc );
204     QString result = outputter.getResult();
205
206     QRegExp regex = QRegExp("^Paragraph with some formatted nested text.\\n$");
207
208     QVERIFY(regex.exactMatch(result));
209 }
210
211 void TestPlainMarkupOutput::testDoubleStartDifferentFinish()
212 {
213     QTextDocument *doc = new QTextDocument();
214     doc->setHtml("Paragraph <i><b>with</b> some formatted</i> text.");
215
216
217     PlainTextMarkupOutputter outputter;
218     outputter.processDocument( doc );
219     QString result = outputter.getResult();
220
221     QRegExp regex = QRegExp("^Paragraph /\\*with\\* some formatted/ text.\\n$");
222
223     QVERIFY(regex.exactMatch(result));
224 }
225
226 void TestPlainMarkupOutput::testDoubleStartDifferentFinishReverseOrder()
227 {
228     QTextDocument *doc = new QTextDocument();
229     doc->setHtml("Paragraph <b><i>with</i> some formatted</b> text.");
230
231     PlainTextMarkupOutputter outputter;
232     outputter.processDocument( doc );
233     QString result = outputter.getResult();
234
235     QRegExp regex = QRegExp("^Paragraph \\*/with/ some formatted\\* text.\\n$");
236
237     QVERIFY(regex.exactMatch(result));
238
239 }
240
241 void TestPlainMarkupOutput::testDifferentStartDoubleFinish()
242 {
243     QTextDocument *doc = new QTextDocument();
244     doc->setHtml("Paragraph <i>with some <b>formatted<b></i> text.");
245
246     PlainTextMarkupOutputter outputter;
247     outputter.processDocument( doc );
248     QString result = outputter.getResult();
249
250     QRegExp regex = QRegExp("^Paragraph /with some \\*formatted\\*/ text.\\n$");
251
252     QVERIFY(regex.exactMatch(result));
253 }
254
255 void TestPlainMarkupOutput::testDifferentStartDoubleFinishReverseOrder()
256 {
257     QTextDocument *doc = new QTextDocument();
258     doc->setHtml("Paragraph <b>with some <i>formatted</i></b> text.");
259
260     PlainTextMarkupOutputter outputter;
261     outputter.processDocument( doc );
262     QString result = outputter.getResult();
263
264     QRegExp regex = QRegExp("^Paragraph \\*with some /formatted/\\* text.\\n$");
265
266     QVERIFY(regex.exactMatch(result));
267
268 }
269
270 void TestPlainMarkupOutput::testOverlap()
271 {
272     QTextDocument *doc = new QTextDocument();
273     doc->setHtml("Paragraph <b>with <i>some</i></b><i> formatted</i> text.");
274
275     PlainTextMarkupOutputter outputter;
276     outputter.processDocument( doc );
277     QString result = outputter.getResult();
278
279     QRegExp regex = QRegExp("^Paragraph \\*with /some/\\*/ formatted/ text.\\n$");
280
281     QVERIFY(regex.exactMatch(result));
282
283 }
284
285 void TestPlainMarkupOutput::testEdgeCaseLeft()
286 {
287     QTextDocument *doc = new QTextDocument();
288     doc->setHtml("Paragraph <b>with some formatted text.</b>");
289
290     PlainTextMarkupOutputter outputter;
291     outputter.processDocument( doc );
292     QString result = outputter.getResult();
293
294     QRegExp regex = QRegExp("^Paragraph \\*with some formatted text.\\*\\n$");
295
296     QVERIFY(regex.exactMatch(result));
297 }
298
299 void TestPlainMarkupOutput::testEdgeCaseRight()
300 {
301     QTextDocument *doc = new QTextDocument();
302     doc->setHtml("<b>Paragraph with some formatted</b> text.");
303
304     PlainTextMarkupOutputter outputter;
305     outputter.processDocument( doc );
306     QString result = outputter.getResult();
307
308     QRegExp regex = QRegExp("^\\*Paragraph with some formatted\\* text.\\n$");
309
310     QVERIFY(regex.exactMatch(result));
311 }
312
313 void TestPlainMarkupOutput::testImage()
314 {
315     QTextDocument *doc = new QTextDocument();
316     doc->setHtml("Paragraph with an inline <img src=\"http://kde.org/img/kde41.png\" /> image.");
317
318     PlainTextMarkupOutputter outputter;
319     outputter.processDocument( doc );
320     QString result = outputter.getResult();
321
322     QRegExp regex = QRegExp("^Paragraph with an inline \\[1\\] image.\\n\\n---- References ----\\n\\[1\\] http://kde.org/img/kde41.png\\n$");
323
324     QVERIFY(regex.exactMatch(result));
325 }
326
327 void TestPlainMarkupOutput::testImageResized()
328 {
329     QString result;
330     QRegExp regex;
331     QTextDocument *doc = new QTextDocument();
332
333     PlainTextMarkupOutputter outputter;
334
335     // width
336     doc->setHtml("Paragraph with an inline <img src=\"http://kde.org/img/kde41.png\" width=\"10\" /> image.");
337
338     outputter.processDocument( doc );
339     result = outputter.getResult();
340
341     regex = QRegExp("^Paragraph with an inline \\[1\\] image.\\n\\n---- References ----\\n\\[1\\] http://kde.org/img/kde41.png\\n$");
342     QVERIFY(regex.exactMatch(result));
343
344     // height
345     doc->setHtml("Paragraph with an inline <img src=\"http://kde.org/img/kde41.png\" height=\"10\" /> image.");
346
347     outputter.processDocument( doc );
348     result = outputter.getResult();
349
350     regex = QRegExp("^Paragraph with an inline \\[1\\] image.\\n\\n---- References ----\\n\\[1\\] http://kde.org/img/kde41.png\\n$");
351     QVERIFY(regex.exactMatch(result));
352
353     // height and width
354     doc->setHtml("Paragraph with an inline <img src=\"http://kde.org/img/kde41.png\" height=\"10\" width=\"10\" /> image.");
355
356     outputter.processDocument( doc );
357     result = outputter.getResult();
358
359     regex = QRegExp("^Paragraph with an inline \\[1\\] image.\\n\\n---- References ----\\n\\[1\\] http://kde.org/img/kde41.png\\n$");
360
361     QVERIFY(regex.exactMatch(result));
362 }
363
364 void TestPlainMarkupOutput::testEachFormatTagSingly()
365 {
366     QString result;
367     QRegExp regex;
368     QTextDocument *doc = new QTextDocument();
369
370     PlainTextMarkupOutputter outputter;
371
372     // Test bold
373     doc->setHtml("Some <b>formatted</b> text.");
374     outputter.processDocument( doc );
375     result = outputter.getResult();
376
377     regex = QRegExp("^Some \\*formatted\\* text.\\n$");
378     QVERIFY(regex.exactMatch(result));
379
380
381     // Test Italic
382     doc->setHtml("Some <i>formatted</i> text.");
383     outputter.processDocument( doc );
384     result = outputter.getResult();
385
386     regex = QRegExp("^Some /formatted/ text.\\n$");
387     QVERIFY(regex.exactMatch(result));
388
389     // Test Underline
390     doc->setHtml("Some <u>formatted</u> text.");
391     outputter.processDocument( doc );
392     result = outputter.getResult();
393
394     regex = QRegExp("^Some _formatted_ text.\\n$");
395     QVERIFY(regex.exactMatch(result));
396
397     // Test Strikeout
398     doc->setHtml("Some <s>formatted</s> text.");
399     outputter.processDocument( doc );
400     result = outputter.getResult();
401
402     regex = QRegExp("^Some -formatted- text.\\n$");
403     QVERIFY(regex.exactMatch(result));
404
405     // Test Superscript
406     doc->setHtml("Some <sup>formatted</sup> text.");
407     outputter.processDocument( doc );
408     result = outputter.getResult();
409
410     regex = QRegExp("^Some \\^\\{formatted\\} text.\\n$");
411     QVERIFY(regex.exactMatch(result));
412
413     // Test Subscript
414     doc->setHtml("Some <sub>formatted</sub> text.");
415     outputter.processDocument( doc );
416     result = outputter.getResult();
417
418     regex = QRegExp("^Some _\\{formatted\\} text.\\n$");
419     QVERIFY(regex.exactMatch(result));
420
421     // Test Foreground
422     doc->setHtml("Some <span style=\"color:#ff0000;\">formatted</span> text.");
423     outputter.processDocument( doc );
424     result = outputter.getResult();
425
426     regex = QRegExp("^Some formatted text.\\n$");
427     QVERIFY(regex.exactMatch(result));
428
429
430     // Test Background
431     doc->setHtml("Some <span style=\"background-color:#ff0000;\">formatted</span> text.");
432     outputter.processDocument( doc );
433     result = outputter.getResult();
434
435     regex = QRegExp("^Some formatted text.\\n$");
436     QVERIFY(regex.exactMatch(result));
437
438     // Test Font Family
439     doc->setHtml("Some <span style=\"font-family:courier;\">formatted</span> text.");
440     outputter.processDocument( doc );
441     result = outputter.getResult();
442
443     regex = QRegExp("^Some formatted text.\\n$");
444     QVERIFY(regex.exactMatch(result));
445
446     // Test Font Size
447     doc->setHtml("Some <span style=\"font-size:20pt;\">formatted</span> text.");
448     outputter.processDocument( doc );
449     result = outputter.getResult();
450
451     regex = QRegExp("^Some formatted text.\\n$");
452     QVERIFY(regex.exactMatch(result));
453
454 }
455
456 void TestPlainMarkupOutput::testHorizontalRule()
457 {
458     QTextDocument *doc = new QTextDocument();
459     doc->setHtml("<p style=\"margin-top:0;margin-bottom:0;\">Foo</p><hr /><p style=\"margin-top:0;margin-bottom:0;\">Bar</p>");
460
461     PlainTextMarkupOutputter outputter;
462     outputter.processDocument(doc);
463     QString result = outputter.getResult();
464
465
466     QRegExp regex = QRegExp("^Foo\\n--------------------\\nBar\\n$");
467
468     QVERIFY(regex.exactMatch(result));
469 }
470
471 void TestPlainMarkupOutput::testNewlines()
472 {
473     QTextDocument *doc = new QTextDocument();
474     doc->setHtml("<p>Foo</p>\n<br /><br />\n<p>Bar</p>");
475
476     PlainTextMarkupOutputter outputter;
477     outputter.processDocument(doc);
478     QString result = outputter.getResult();
479
480     QRegExp regex = QRegExp("^Foo\\n\\n\\nBar\\n$");
481
482     QVERIFY(regex.exactMatch(result));
483 }
484
485 void TestPlainMarkupOutput::testEmptyParagraphs()
486 {
487     QTextDocument *doc = new QTextDocument();
488     doc->setHtml("<p>Foo</p>\n<br /><br />\n<p>Bar</p>");
489
490     PlainTextMarkupOutputter outputter;
491     outputter.processDocument(doc);
492     QString result = outputter.getResult();
493
494     QRegExp regex = QRegExp("^Foo\\n\\n\\nBar\\n$");
495
496     QVERIFY(regex.exactMatch(result));
497 }
498
499 void TestPlainMarkupOutput::testNewlinesThroughQTextEdit()
500 {
501     QTextEdit *te = new QTextEdit();
502     QTextCursor cursor = te->textCursor();
503     cursor.movePosition(QTextCursor::Start);
504     cursor.insertText("Foo");
505     cursor.insertText("\n");
506     cursor.insertText("\n");
507     cursor.insertText("\n");
508     cursor.insertText("Bar");
509
510     PlainTextMarkupOutputter outputter;
511     outputter.processDocument( te->document() );
512     QString result = outputter.getResult();
513
514     QRegExp regex = QRegExp("^Foo\\n\\n\\nBar\\n$");
515
516     QVERIFY(regex.exactMatch(result));
517 }
518
519 void TestPlainMarkupOutput:: testBrInsideParagraph()
520 {
521
522     QTextDocument *doc = new QTextDocument();
523     doc->setHtml("<p>Foo<br /><br /><br />Bar</p>");
524
525     PlainTextMarkupOutputter outputter;
526     outputter.processDocument(doc);
527     QString result = outputter.getResult();
528
529     // Two paragraphs separated by two line breaks
530
531     QRegExp regex = QRegExp("^Foo\\n\\n\\nBar\\n$");
532
533     QVERIFY(regex.exactMatch(result));
534 }
535
536
537 QTEST_MAIN(TestPlainMarkupOutput)
538 #include "plainmarkupbuildertest.moc"