0
|
1 |
/****************************************************************************
|
|
2 |
**
|
|
3 |
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
4 |
** All rights reserved.
|
|
5 |
** Contact: Nokia Corporation (qt-info@nokia.com)
|
|
6 |
**
|
|
7 |
** This file is part of the test suite of the Qt Toolkit.
|
|
8 |
**
|
|
9 |
** $QT_BEGIN_LICENSE:LGPL$
|
|
10 |
** No Commercial Usage
|
|
11 |
** This file contains pre-release code and may not be distributed.
|
|
12 |
** You may use this file in accordance with the terms and conditions
|
|
13 |
** contained in the Technology Preview License Agreement accompanying
|
|
14 |
** this package.
|
|
15 |
**
|
|
16 |
** GNU Lesser General Public License Usage
|
|
17 |
** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
18 |
** General Public License version 2.1 as published by the Free Software
|
|
19 |
** Foundation and appearing in the file LICENSE.LGPL included in the
|
|
20 |
** packaging of this file. Please review the following information to
|
|
21 |
** ensure the GNU Lesser General Public License version 2.1 requirements
|
|
22 |
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
23 |
**
|
|
24 |
** In addition, as a special exception, Nokia gives you certain additional
|
|
25 |
** rights. These rights are described in the Nokia Qt LGPL Exception
|
|
26 |
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
27 |
**
|
|
28 |
** If you have questions regarding the use of this file, please contact
|
|
29 |
** Nokia at qt-info@nokia.com.
|
|
30 |
**
|
|
31 |
**
|
|
32 |
**
|
|
33 |
**
|
|
34 |
**
|
|
35 |
**
|
|
36 |
**
|
|
37 |
**
|
|
38 |
** $QT_END_LICENSE$
|
|
39 |
**
|
|
40 |
****************************************************************************/
|
|
41 |
|
|
42 |
|
|
43 |
#include <QtTest/QtTest>
|
|
44 |
|
|
45 |
#include <limits.h>
|
|
46 |
|
|
47 |
#include <q3textedit.h>
|
|
48 |
#include <q3textedit.h>
|
|
49 |
#include <qapplication.h>
|
|
50 |
#include <qclipboard.h>
|
|
51 |
#include <qimage.h>
|
|
52 |
#include <private/q3richtext_p.h>
|
|
53 |
|
|
54 |
#ifdef Q_WS_MAC
|
|
55 |
#include <Carbon/Carbon.h>
|
|
56 |
#endif
|
|
57 |
|
|
58 |
//TESTED_CLASS=
|
|
59 |
//TESTED_FILES=
|
|
60 |
|
|
61 |
class tst_Q3TextEdit : public QObject
|
|
62 |
{
|
|
63 |
Q_OBJECT
|
|
64 |
public:
|
|
65 |
tst_Q3TextEdit();
|
|
66 |
virtual ~tst_Q3TextEdit();
|
|
67 |
|
|
68 |
|
|
69 |
public slots:
|
|
70 |
void initTestCase();
|
|
71 |
void cleanupTestCase();
|
|
72 |
private slots:
|
|
73 |
void getSetCheck();
|
|
74 |
void redoAvailableEmitted( bool );
|
|
75 |
void undoAvailableEmitted( bool );
|
|
76 |
void copyAvailableEmitted( bool );
|
|
77 |
|
|
78 |
void cursorPosition_data();
|
|
79 |
void cursorPosition();
|
|
80 |
void doKeyboardAction_data();
|
|
81 |
void doKeyboardAction();
|
|
82 |
void text();
|
|
83 |
void text_data();
|
|
84 |
|
|
85 |
void insert();
|
|
86 |
|
|
87 |
void keyClicks_data();
|
|
88 |
void keyClicks();
|
|
89 |
|
|
90 |
//problem specific tests
|
|
91 |
void copyPaste();
|
|
92 |
void copyPaste_data();
|
|
93 |
|
|
94 |
void setReadOnly();
|
|
95 |
|
|
96 |
void find_data();
|
|
97 |
void find();
|
|
98 |
void findSC();
|
|
99 |
void cut();
|
|
100 |
|
|
101 |
void clear();
|
|
102 |
void selectAll();
|
|
103 |
void getSelection_data();
|
|
104 |
void getSelection();
|
|
105 |
|
|
106 |
void setCurrentFont();
|
|
107 |
|
|
108 |
void undoRedo();
|
|
109 |
|
|
110 |
void length_data();
|
|
111 |
void length();
|
|
112 |
void findBackwards();
|
|
113 |
void anchorTest();
|
|
114 |
|
|
115 |
private:
|
|
116 |
bool nativeClipboardWorking();
|
|
117 |
Q3TextEdit *textEdit;
|
|
118 |
bool redoA, undoA, copyA;
|
|
119 |
|
|
120 |
};
|
|
121 |
|
|
122 |
bool tst_Q3TextEdit::nativeClipboardWorking()
|
|
123 |
{
|
|
124 |
#ifdef Q_WS_MAC
|
|
125 |
PasteboardRef pasteboard;
|
|
126 |
OSStatus status = PasteboardCreate(0, &pasteboard);
|
|
127 |
if (status == noErr)
|
|
128 |
CFRelease(pasteboard);
|
|
129 |
return status == noErr;
|
|
130 |
#endif
|
|
131 |
return true;
|
|
132 |
}
|
|
133 |
|
|
134 |
|
|
135 |
|
|
136 |
class My3TextEdit : public Q3TextEdit
|
|
137 |
{
|
|
138 |
public:
|
|
139 |
My3TextEdit() : Q3TextEdit() {}
|
|
140 |
void setDocument(Q3TextDocument *doc) { Q3TextEdit::setDocument(doc); }
|
|
141 |
Q3TextDocument *document() { return Q3TextEdit::document(); }
|
|
142 |
};
|
|
143 |
|
|
144 |
// Testing get/set functions
|
|
145 |
void tst_Q3TextEdit::getSetCheck()
|
|
146 |
{
|
|
147 |
My3TextEdit obj1;
|
|
148 |
// int Q3TextEdit::maxLogLines()
|
|
149 |
// void Q3TextEdit::setMaxLogLines(int)
|
|
150 |
obj1.setMaxLogLines(0);
|
|
151 |
QCOMPARE(obj1.maxLogLines(), 0);
|
|
152 |
obj1.setMaxLogLines(INT_MIN);
|
|
153 |
QCOMPARE(obj1.maxLogLines(), -1);
|
|
154 |
obj1.setMaxLogLines(INT_MAX);
|
|
155 |
QCOMPARE(obj1.maxLogLines(), INT_MAX);
|
|
156 |
|
|
157 |
// Q3TextDocument * Q3TextEdit::document()
|
|
158 |
// void Q3TextEdit::setDocument(Q3TextDocument *)
|
|
159 |
Q3TextDocument *var2 = new Q3TextDocument(0);
|
|
160 |
obj1.setDocument(var2);
|
|
161 |
QCOMPARE(obj1.document(), var2);
|
|
162 |
// Should've done as QTextEdit, and created a new document, if you setDocument(0).
|
|
163 |
// Unfortunately it doesn't, and we cannot change it.
|
|
164 |
obj1.setDocument((Q3TextDocument *)0);
|
|
165 |
QCOMPARE(obj1.document(), var2);
|
|
166 |
// delete var2; // No delete, since Q3TextEdit takes ownership
|
|
167 |
}
|
|
168 |
|
|
169 |
typedef QList<int> IntList;
|
|
170 |
Q_DECLARE_METATYPE(IntList)
|
|
171 |
Q_DECLARE_METATYPE(Q3TextEdit::KeyboardAction)
|
|
172 |
|
|
173 |
static const char *const bullet_xpm[] =
|
|
174 |
{
|
|
175 |
"11 11 5 1",
|
|
176 |
". c None",
|
|
177 |
"b c #3100c5",
|
|
178 |
"# c #313062",
|
|
179 |
"c c #3189ff",
|
|
180 |
"a c #6265cd",
|
|
181 |
"...........",
|
|
182 |
"...####....",
|
|
183 |
".a#bbbb#a..",
|
|
184 |
".#ccbbbb#..",
|
|
185 |
"#bccbbbbb#.",
|
|
186 |
"#bbbbbbbb#.",
|
|
187 |
"#bbbbbbcb#.",
|
|
188 |
"#bbbbbccb#.",
|
|
189 |
".#bbbccb#..",
|
|
190 |
".a#bbbb#a..",
|
|
191 |
"...####...."
|
|
192 |
};
|
|
193 |
|
|
194 |
tst_Q3TextEdit::tst_Q3TextEdit()
|
|
195 |
{
|
|
196 |
}
|
|
197 |
|
|
198 |
tst_Q3TextEdit::~tst_Q3TextEdit()
|
|
199 |
{
|
|
200 |
}
|
|
201 |
|
|
202 |
void tst_Q3TextEdit::initTestCase()
|
|
203 |
{
|
|
204 |
textEdit = new Q3TextEdit( 0, "textEdit" );
|
|
205 |
textEdit->setFixedSize( 200, 200 );
|
|
206 |
textEdit->mimeSourceFactory()->setImage( "bullet", QImage( bullet_xpm ) );
|
|
207 |
qApp->setMainWidget( textEdit );
|
|
208 |
textEdit->show();
|
|
209 |
}
|
|
210 |
|
|
211 |
void tst_Q3TextEdit::cleanupTestCase()
|
|
212 |
{
|
|
213 |
delete textEdit;
|
|
214 |
}
|
|
215 |
|
|
216 |
void tst_Q3TextEdit::doKeyboardAction()
|
|
217 |
{
|
|
218 |
QFETCH( QString, text );
|
|
219 |
QFETCH( int, paragraph );
|
|
220 |
QFETCH( int, index );
|
|
221 |
QFETCH( Q3TextEdit::KeyboardAction, action );
|
|
222 |
|
|
223 |
textEdit->setText( text );
|
|
224 |
textEdit->setCursorPosition( paragraph, index );
|
|
225 |
textEdit->doKeyboardAction( action );
|
|
226 |
QTEST( textEdit->text(), "final" );
|
|
227 |
}
|
|
228 |
|
|
229 |
void tst_Q3TextEdit::doKeyboardAction_data()
|
|
230 |
{
|
|
231 |
QTest::addColumn<QString>("text");
|
|
232 |
QTest::addColumn<int>("paragraph");
|
|
233 |
QTest::addColumn<int>("index");
|
|
234 |
QTest::addColumn<Q3TextEdit::KeyboardAction>("action");
|
|
235 |
QTest::addColumn<QString>("final");
|
|
236 |
|
|
237 |
QTest::newRow( "Bush1" ) <<
|
|
238 |
QString("Republicans understand the importance of bondage between mother and child. - Gov GWB")
|
|
239 |
<< 0
|
|
240 |
<< 49
|
|
241 |
<< Q3TextEdit::ActionWordDelete
|
|
242 |
<<
|
|
243 |
QString("Republicans understand the importance of bondage mother and child. - Gov GWB");
|
|
244 |
|
|
245 |
QTest::newRow( "Bush2" ) <<
|
|
246 |
QString("If we don't succeed, we run the risk of failure. ...George W. Bush, Jr.")
|
|
247 |
<< 0
|
|
248 |
<< 2
|
|
249 |
<< Q3TextEdit::ActionWordBackspace
|
|
250 |
<<
|
|
251 |
QString(" we don't succeed, we run the risk of failure. ...George W. Bush, Jr.");
|
|
252 |
|
|
253 |
QTest::newRow( "Bush3" ) <<
|
|
254 |
QString("Welcome to Mrs. Bush, and my fellow astronauts. ...Governor George W. Bush, Jr.")
|
|
255 |
<< 0
|
|
256 |
<< 35
|
|
257 |
<< Q3TextEdit::ActionWordDelete
|
|
258 |
<<
|
|
259 |
QString("Welcome to Mrs. Bush, and my fellowastronauts. ...Governor George W. Bush, Jr.");
|
|
260 |
|
|
261 |
QTest::newRow( "Bush4" ) <<
|
|
262 |
QString("Mars is essentially in the same orbit... Mars is somewhat the same distance from "
|
|
263 |
"the Sun, which is very important. We have seen pictures where there are canals, we "
|
|
264 |
"believe, and water. If there is water, that means there is oxygen. If oxygen, "
|
|
265 |
"that means we can breathe. ...Gov GW Bush, Jr., 8/11/94")
|
|
266 |
<< 0
|
|
267 |
<< 57
|
|
268 |
<< Q3TextEdit::ActionWordBackspace
|
|
269 |
<<
|
|
270 |
QString("Mars is essentially in the same orbit... Mars is the same distance from "
|
|
271 |
"the Sun, which is very important. We have seen pictures where there are canals, we "
|
|
272 |
"believe, and water. If there is water, that means there is oxygen. If oxygen, "
|
|
273 |
"that means we can breathe. ...Gov GW Bush, Jr., 8/11/94");
|
|
274 |
|
|
275 |
|
|
276 |
QTest::newRow( "Bush5" ) <<
|
|
277 |
QString("The Holocaust was an obscene period in our nation's history. I mean in this century's history. But we all lived in this century. I didn't live in this century. GW Bus, 9/15/95")
|
|
278 |
<< 0
|
|
279 |
<< 139
|
|
280 |
<< Q3TextEdit::ActionWordDelete
|
|
281 |
<<
|
|
282 |
QString("The Holocaust was an obscene period in our nation's history. I mean in this century's history. But we all lived in this century. I didn't lin this century. GW Bus, 9/15/95");
|
|
283 |
|
|
284 |
QTest::newRow( "Bush6" ) <<
|
|
285 |
QString("I believe we are on an irreversible trend toward more freedom and democracy, but that could change. GWB 5/22/98")
|
|
286 |
<< 0
|
|
287 |
<< 51
|
|
288 |
<< Q3TextEdit::ActionWordBackspace
|
|
289 |
<<
|
|
290 |
QString("I believe we are on an irreversible trend toward re freedom and democracy, but that could change. GWB 5/22/98");
|
|
291 |
|
|
292 |
QTest::newRow( "Bush7" ) <<
|
|
293 |
QString("One word sums up probably the responsibility of any Governor, and that one\n\n"
|
|
294 |
"word is 'to be prepared'. ...Governor George W. Bush, Jr., 12/6/93")
|
|
295 |
<< 1
|
|
296 |
<< 0
|
|
297 |
<< Q3TextEdit::ActionWordDelete
|
|
298 |
<<
|
|
299 |
QString("One word sums up probably the responsibility of any Governor, and that one\n"
|
|
300 |
"word is 'to be prepared'. ...Governor George W. Bush, Jr., 12/6/93");
|
|
301 |
|
|
302 |
QTest::newRow( "Bush8" ) <<
|
|
303 |
QString("Verbosity leads to unclear, inarticulate things.\n\n"
|
|
304 |
"...Governor George W. Bush, Jr., 11/30/96")
|
|
305 |
<< 1
|
|
306 |
<< 0
|
|
307 |
<< Q3TextEdit::ActionWordBackspace
|
|
308 |
<<
|
|
309 |
QString("Verbosity leads to unclear, inarticulate things.\n"
|
|
310 |
"...Governor George W. Bush, Jr., 11/30/96");
|
|
311 |
|
|
312 |
QTest::newRow( "Bush9" ) <<
|
|
313 |
QString("The future will be better tomorrow. ...Governor George W. Bush, Jr.")
|
|
314 |
<< 0
|
|
315 |
<< 29
|
|
316 |
<< Q3TextEdit::ActionWordDelete
|
|
317 |
<<
|
|
318 |
QString("The future will be better tomGovernor George W. Bush, Jr.");
|
|
319 |
|
|
320 |
QTest::newRow( "Bush10" ) <<
|
|
321 |
QString("The future will be better tomorrow. ...Governor George W. Bush, Jr.")
|
|
322 |
<< 0
|
|
323 |
<< 36
|
|
324 |
<< Q3TextEdit::ActionWordBackspace
|
|
325 |
<<
|
|
326 |
QString("The future will be better ...Governor George W. Bush, Jr.");
|
|
327 |
|
|
328 |
QTest::newRow( "Bush11" ) <<
|
|
329 |
QString("The future will be better tomorrow. ...Governor George W. Bush, Jr.")
|
|
330 |
<< 0
|
|
331 |
<< 37
|
|
332 |
<< Q3TextEdit::ActionWordDelete
|
|
333 |
<<
|
|
334 |
QString("The future will be better tomorrow. .Governor George W. Bush, Jr.");
|
|
335 |
|
|
336 |
QTest::newRow( "Bush12" ) <<
|
|
337 |
QString("The future will be better tomorrow. ...Governor George W. Bush, Jr.")
|
|
338 |
<< 0
|
|
339 |
<< 37
|
|
340 |
<< Q3TextEdit::ActionWordBackspace
|
|
341 |
<<
|
|
342 |
QString("The future will be better ..Governor George W. Bush, Jr.");
|
|
343 |
}
|
|
344 |
|
|
345 |
void tst_Q3TextEdit::cursorPosition_data()
|
|
346 |
{
|
|
347 |
QTest::addColumn<QString>("text");
|
|
348 |
QTest::addColumn<int>("paragraph");
|
|
349 |
QTest::addColumn<int>("index");
|
|
350 |
QTest::newRow( "curpos1" )
|
|
351 |
<< QString("where to find the icon in the application and the\n"
|
|
352 |
"application name. Also describe to him what the new icon should\n"
|
|
353 |
"convey. John will create the icon and send you an email asking if it\n"
|
|
354 |
"fits your wildest dreams. Iterations are expected to occur.") << 2 << 8;
|
|
355 |
}
|
|
356 |
|
|
357 |
void tst_Q3TextEdit::cursorPosition()
|
|
358 |
{
|
|
359 |
if (!nativeClipboardWorking())
|
|
360 |
QSKIP("Native clipboard and cron-started unit tests do not work", SkipAll);
|
|
361 |
|
|
362 |
QFETCH( QString, text );
|
|
363 |
QFETCH( int, paragraph );
|
|
364 |
QFETCH( int, index );
|
|
365 |
|
|
366 |
int para, in;
|
|
367 |
QApplication::clipboard()->setText( text, QClipboard::Clipboard );
|
|
368 |
|
|
369 |
textEdit->clear();
|
|
370 |
textEdit->paste();
|
|
371 |
textEdit->undo();
|
|
372 |
textEdit->paste();
|
|
373 |
textEdit->setCursorPosition( paragraph, index );
|
|
374 |
textEdit->moveCursor( Q3TextEdit::MoveWordForward, TRUE );
|
|
375 |
textEdit->removeSelectedText();
|
|
376 |
textEdit->getCursorPosition( ¶, &in );
|
|
377 |
QCOMPARE( para, paragraph );
|
|
378 |
QCOMPARE( in, index );
|
|
379 |
}
|
|
380 |
|
|
381 |
|
|
382 |
void tst_Q3TextEdit::text()
|
|
383 |
{
|
|
384 |
QFETCH( int, format );
|
|
385 |
QFETCH( QString, text );
|
|
386 |
QFETCH( QString, expectedText );
|
|
387 |
|
|
388 |
textEdit->clear();
|
|
389 |
textEdit->setTextFormat( (Qt::TextFormat) format );
|
|
390 |
QCOMPARE( textEdit->text(), QString("") );
|
|
391 |
textEdit->setText( text );
|
|
392 |
|
|
393 |
QCOMPARE( textEdit->text(), expectedText );
|
|
394 |
}
|
|
395 |
|
|
396 |
void tst_Q3TextEdit::text_data()
|
|
397 |
{
|
|
398 |
QTest::addColumn<int>("format");
|
|
399 |
QTest::addColumn<QString>("text");
|
|
400 |
QTest::addColumn<QString>("expectedText");
|
|
401 |
|
|
402 |
QTest::newRow( "PlainText and nbsp" ) << int(Qt::PlainText)
|
|
403 |
<< QString( "Hello" ) + QChar(0xa0) + "World"
|
|
404 |
<< QString( "Hello" ) + QChar(0xa0) + "World";
|
|
405 |
QTest::newRow( "Empty PlainText" ) << int(Qt::PlainText)
|
|
406 |
<< QString( "" )
|
|
407 |
<< QString( "" );
|
|
408 |
|
|
409 |
QTest::newRow( "Empty RichText" ) << int(Qt::RichText)
|
|
410 |
<< QString( "" )
|
|
411 |
<< QString( "" );
|
|
412 |
}
|
|
413 |
|
|
414 |
void tst_Q3TextEdit::copyPaste_data()
|
|
415 |
{
|
|
416 |
QTest::addColumn<QString>("text");
|
|
417 |
QTest::addColumn<QString>("expectedText");
|
|
418 |
|
|
419 |
QTest::newRow( "0" ) << QString( "Hello" ) << QString( "Hello" );
|
|
420 |
QTest::newRow( "1" ) << QString( "Hello<br>Hello" ) << QString( "Hello\nHello" );
|
|
421 |
QTest::newRow( "2" ) << QString( "<p>Hello</p><p>Hello</p>" ) << QString( "Hello\nHello" );
|
|
422 |
QTest::newRow( "3" ) << QString( "<img src=\"bullet\">Hello" ) << QString( "Hello" );
|
|
423 |
QTest::newRow( "4" ) << QString( "<code>Hello</code>" ) << QString( "Hello" );
|
|
424 |
QTest::newRow( "5" ) << QString( "<p><img src=\"bullet\"></img>Hello</p><p>Hello</p>" ) << QString( "Hello\nHello" );
|
|
425 |
QTest::newRow( "6" ) << QString( "<p><img src=\"bullet\">Hello</p><p>Hello</p>" ) << QString( "Hello\nHello" );
|
|
426 |
}
|
|
427 |
|
|
428 |
// tests copying richtext and pasting as plain text
|
|
429 |
void tst_Q3TextEdit::copyPaste()
|
|
430 |
{
|
|
431 |
if (!nativeClipboardWorking())
|
|
432 |
QSKIP("Native clipboard and cron-started unit tests do not work", SkipAll);
|
|
433 |
|
|
434 |
QFETCH( QString, text );
|
|
435 |
QFETCH( QString, expectedText );
|
|
436 |
|
|
437 |
textEdit->clear();
|
|
438 |
textEdit->setTextFormat( Qt::RichText );
|
|
439 |
|
|
440 |
textEdit->setText( text );
|
|
441 |
textEdit->selectAll();
|
|
442 |
textEdit->copy();
|
|
443 |
|
|
444 |
QString pastedText = QApplication::clipboard()->text();
|
|
445 |
QEXPECT_FAIL( "6", "funny behaviour if img tag is not closed", Abort );
|
|
446 |
QCOMPARE( pastedText, expectedText );
|
|
447 |
}
|
|
448 |
|
|
449 |
void tst_Q3TextEdit::setReadOnly()
|
|
450 |
{
|
|
451 |
// Check that text() returns the right thing when
|
|
452 |
// in read-only mode
|
|
453 |
|
|
454 |
textEdit->clear();
|
|
455 |
textEdit->setTextFormat( Qt::PlainText );
|
|
456 |
textEdit->setReadOnly( TRUE );
|
|
457 |
QCOMPARE( textEdit->text(), QString("") );
|
|
458 |
textEdit->setText("This is a test");
|
|
459 |
QCOMPARE( textEdit->text(), QString("This is a test") );
|
|
460 |
textEdit->clear();
|
|
461 |
QCOMPARE( textEdit->text(), QString("") );
|
|
462 |
textEdit->append( "Foobar test" );
|
|
463 |
QCOMPARE( textEdit->text(), QString("Foobar test") );
|
|
464 |
textEdit->clear();
|
|
465 |
QCOMPARE( textEdit->text(), QString("") );
|
|
466 |
textEdit->setText( "This is a test" );
|
|
467 |
QCOMPARE( textEdit->text(), QString("This is a test") );
|
|
468 |
textEdit->append( " foobar" );
|
|
469 |
QCOMPARE( textEdit->text(), QString("This is a test\n foobar") );
|
|
470 |
|
|
471 |
// Reset read only state
|
|
472 |
textEdit->setReadOnly( FALSE );
|
|
473 |
}
|
|
474 |
/*
|
|
475 |
typedef QValueList<int> IntList;
|
|
476 |
Q_DECLARE_METATYPE(IntList)
|
|
477 |
*/
|
|
478 |
void tst_Q3TextEdit::find_data()
|
|
479 |
{
|
|
480 |
// For the moment, this searches plain text, it should be extended to search
|
|
481 |
// rich text and log text
|
|
482 |
|
|
483 |
QTest::addColumn<QString>("text");
|
|
484 |
QTest::addColumn<QString>("searchString");
|
|
485 |
QTest::addColumn<bool>("caseSensitive");
|
|
486 |
QTest::addColumn<bool>("wholeWord");
|
|
487 |
QTest::addColumn<bool>("forward");
|
|
488 |
QTest::addColumn<IntList>("paragraph");
|
|
489 |
QTest::addColumn<IntList>("index");
|
|
490 |
|
|
491 |
{
|
|
492 |
// Check for t's non case-sensitive not whole word forward
|
|
493 |
QString text = "This is a test\nand this is another test";
|
|
494 |
QString searchString = "t";
|
|
495 |
bool caseSensitive = FALSE;
|
|
496 |
bool wholeWord = FALSE;
|
|
497 |
bool forward = TRUE;
|
|
498 |
IntList paragraph;
|
|
499 |
IntList index;
|
|
500 |
paragraph << 0 << 0 << 0 << 1 << 1 << 1 << 1;
|
|
501 |
index << 0 << 10 << 13 << 4 << 15 << 20 << 23;
|
|
502 |
QTest::newRow( "t-noncs-nonww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
503 |
}
|
|
504 |
|
|
505 |
{
|
|
506 |
// Check for t's case-sensitive not whole word forward
|
|
507 |
QString text = "This is a test\nand this is another test";
|
|
508 |
QString searchString = "t";
|
|
509 |
bool caseSensitive = TRUE;
|
|
510 |
bool wholeWord = FALSE;
|
|
511 |
bool forward = TRUE;
|
|
512 |
IntList paragraph;
|
|
513 |
IntList index;
|
|
514 |
paragraph << 0 << 0 << 1 << 1 << 1 << 1;
|
|
515 |
index << 10 << 13 << 4 << 15 << 20 << 23;
|
|
516 |
QTest::newRow( "t-cs-nonww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
517 |
}
|
|
518 |
|
|
519 |
{
|
|
520 |
// Check for t's non case-sensitive whole word forward
|
|
521 |
QString text = "This is a test\nand this is another test";
|
|
522 |
QString searchString = "t";
|
|
523 |
bool caseSensitive = FALSE;
|
|
524 |
bool wholeWord = TRUE;
|
|
525 |
bool forward = TRUE;
|
|
526 |
IntList paragraph;
|
|
527 |
IntList index;
|
|
528 |
QTest::newRow( "t-noncs-ww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
529 |
}
|
|
530 |
|
|
531 |
{
|
|
532 |
// Check for t's non case-sensitive not whole word backward
|
|
533 |
QString text = "This is a test\nand this is another test";
|
|
534 |
QString searchString = "t";
|
|
535 |
bool caseSensitive = FALSE;
|
|
536 |
bool wholeWord = FALSE;
|
|
537 |
bool forward = FALSE;
|
|
538 |
IntList paragraph;
|
|
539 |
IntList index;
|
|
540 |
paragraph << 1 << 1 << 1 << 1 << 0 << 0 << 0;
|
|
541 |
index << 23 << 20 << 15 << 4 << 13 << 10 << 0;
|
|
542 |
QTest::newRow( "t-noncs-nonww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
543 |
}
|
|
544 |
|
|
545 |
{
|
|
546 |
// Check for t's case-sensitive not whole word backward
|
|
547 |
QString text = "This is a test\nand this is another test";
|
|
548 |
QString searchString = "t";
|
|
549 |
bool caseSensitive = TRUE;
|
|
550 |
bool wholeWord = FALSE;
|
|
551 |
bool forward = FALSE;
|
|
552 |
IntList paragraph;
|
|
553 |
IntList index;
|
|
554 |
paragraph << 1 << 1 << 1 << 1 << 0 << 0;
|
|
555 |
index << 23 << 20 << 15 << 4 << 13 << 10;
|
|
556 |
QTest::newRow( "t-cs-nonww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
557 |
}
|
|
558 |
|
|
559 |
{
|
|
560 |
// Check for t's non case-sensitive whole word backward
|
|
561 |
QString text = "This is a test\nand this is another test";
|
|
562 |
QString searchString = "t";
|
|
563 |
bool caseSensitive = FALSE;
|
|
564 |
bool wholeWord = TRUE;
|
|
565 |
bool forward = FALSE;
|
|
566 |
IntList paragraph;
|
|
567 |
IntList index;
|
|
568 |
QTest::newRow( "t-noncs-ww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
569 |
}
|
|
570 |
|
|
571 |
{
|
|
572 |
// Check for 'this' non case-sensitive not whole word forward
|
|
573 |
QString text = "This is a test\nand this is another test";
|
|
574 |
QString searchString = "this";
|
|
575 |
bool caseSensitive = FALSE;
|
|
576 |
bool wholeWord = FALSE;
|
|
577 |
bool forward = TRUE;
|
|
578 |
IntList paragraph;
|
|
579 |
IntList index;
|
|
580 |
paragraph << 0 << 1;
|
|
581 |
index << 0 << 4;
|
|
582 |
QTest::newRow( "this-noncs-nonww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
583 |
}
|
|
584 |
|
|
585 |
{
|
|
586 |
// Check for 'this' case-sensitive not whole word forward
|
|
587 |
QString text = "This is a test\nand this is another test";
|
|
588 |
QString searchString = "this";
|
|
589 |
bool caseSensitive = TRUE;
|
|
590 |
bool wholeWord = FALSE;
|
|
591 |
bool forward = TRUE;
|
|
592 |
IntList paragraph;
|
|
593 |
IntList index;
|
|
594 |
paragraph << 1;
|
|
595 |
index << 4;
|
|
596 |
QTest::newRow( "this-cs-nonww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
597 |
}
|
|
598 |
|
|
599 |
{
|
|
600 |
// Check for 'this' non case-sensitive whole word forward
|
|
601 |
QString text = "This is a test\nand this is another test";
|
|
602 |
QString searchString = "this";
|
|
603 |
bool caseSensitive = FALSE;
|
|
604 |
bool wholeWord = TRUE;
|
|
605 |
bool forward = TRUE;
|
|
606 |
IntList paragraph;
|
|
607 |
IntList index;
|
|
608 |
paragraph << 0 << 1;
|
|
609 |
index << 0 << 4;
|
|
610 |
QTest::newRow( "this-noncs-ww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
611 |
}
|
|
612 |
|
|
613 |
{
|
|
614 |
// Check for 'this' non case-sensitive not whole word backward
|
|
615 |
QString text = "This is a test\nand this is another test";
|
|
616 |
QString searchString = "this";
|
|
617 |
bool caseSensitive = FALSE;
|
|
618 |
bool wholeWord = FALSE;
|
|
619 |
bool forward = FALSE;
|
|
620 |
IntList paragraph;
|
|
621 |
IntList index;
|
|
622 |
paragraph << 1 << 0;
|
|
623 |
index << 4 << 0;
|
|
624 |
QTest::newRow( "this-noncs-nonww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
625 |
}
|
|
626 |
|
|
627 |
{
|
|
628 |
// Check for 'this' case-sensitive not whole word backward
|
|
629 |
QString text = "This is a test\nand this is another test";
|
|
630 |
QString searchString = "this";
|
|
631 |
bool caseSensitive = TRUE;
|
|
632 |
bool wholeWord = FALSE;
|
|
633 |
bool forward = FALSE;
|
|
634 |
IntList paragraph;
|
|
635 |
IntList index;
|
|
636 |
paragraph << 1;
|
|
637 |
index << 4;
|
|
638 |
QTest::newRow( "this-cs-nonww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
639 |
}
|
|
640 |
|
|
641 |
{
|
|
642 |
// Check for 'this' non case-sensitive whole word backward
|
|
643 |
QString text = "This is a test\nand this is another test";
|
|
644 |
QString searchString = "this";
|
|
645 |
bool caseSensitive = FALSE;
|
|
646 |
bool wholeWord = TRUE;
|
|
647 |
bool forward = FALSE;
|
|
648 |
IntList paragraph;
|
|
649 |
IntList index;
|
|
650 |
paragraph << 1 << 0;
|
|
651 |
index << 4 << 0;
|
|
652 |
QTest::newRow( "this-noncs-ww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
653 |
}
|
|
654 |
|
|
655 |
{
|
|
656 |
// Check for ('s non case-sensitive not whole word forward
|
|
657 |
QString text = "This is (a te)st\nand (this is another test) with ( brackets)";
|
|
658 |
QString searchString = "(";
|
|
659 |
bool caseSensitive = FALSE;
|
|
660 |
bool wholeWord = FALSE;
|
|
661 |
bool forward = TRUE;
|
|
662 |
IntList paragraph;
|
|
663 |
IntList index;
|
|
664 |
paragraph << 0 << 1 << 1;
|
|
665 |
index << 8 << 4 << 32;
|
|
666 |
QTest::newRow( "(-noncs-nonww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
667 |
}
|
|
668 |
|
|
669 |
{
|
|
670 |
// Check for ('s case-sensitive not whole word forward
|
|
671 |
QString text = "This is (a te)st\nand (this is another test) with ( brackets)";
|
|
672 |
QString searchString = "(";
|
|
673 |
bool caseSensitive = TRUE;
|
|
674 |
bool wholeWord = FALSE;
|
|
675 |
bool forward = TRUE;
|
|
676 |
IntList paragraph;
|
|
677 |
IntList index;
|
|
678 |
paragraph << 0 << 1 << 1;
|
|
679 |
index << 8 << 4 << 32;
|
|
680 |
QTest::newRow( "(-cs-nonww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
681 |
}
|
|
682 |
|
|
683 |
{
|
|
684 |
// Check for ('s non case-sensitive whole word forward
|
|
685 |
QString text = "This is (a te)st\nand (this is another test) with ( brackets)";
|
|
686 |
QString searchString = "(";
|
|
687 |
bool caseSensitive = FALSE;
|
|
688 |
bool wholeWord = TRUE;
|
|
689 |
bool forward = TRUE;
|
|
690 |
IntList paragraph;
|
|
691 |
IntList index;
|
|
692 |
paragraph << 1;
|
|
693 |
index << 32;
|
|
694 |
QTest::newRow( "(-noncs-ww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
695 |
}
|
|
696 |
|
|
697 |
{
|
|
698 |
// Check for ('s non case-sensitive not whole word backward
|
|
699 |
QString text = "This is (a te)st\nand (this is another test) with ( brackets)";
|
|
700 |
QString searchString = "(";
|
|
701 |
bool caseSensitive = FALSE;
|
|
702 |
bool wholeWord = FALSE;
|
|
703 |
bool forward = FALSE;
|
|
704 |
IntList paragraph;
|
|
705 |
IntList index;
|
|
706 |
paragraph << 1 << 1 << 0;
|
|
707 |
index << 32 << 4 << 8;
|
|
708 |
QTest::newRow( "(-noncs-nonww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
709 |
}
|
|
710 |
|
|
711 |
{
|
|
712 |
// Check for ('s case-sensitive not whole word backward
|
|
713 |
QString text = "This is (a te)st\nand (this is another test) with ( brackets)";
|
|
714 |
QString searchString = "(";
|
|
715 |
bool caseSensitive = TRUE;
|
|
716 |
bool wholeWord = FALSE;
|
|
717 |
bool forward = FALSE;
|
|
718 |
IntList paragraph;
|
|
719 |
IntList index;
|
|
720 |
paragraph << 1 << 1 << 0;
|
|
721 |
index << 32 << 4 << 8;
|
|
722 |
QTest::newRow( "(-cs-nonww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
723 |
}
|
|
724 |
|
|
725 |
{
|
|
726 |
// Check for ('s non case-sensitive whole word backward
|
|
727 |
QString text = "This is (a te)st\nand (this is another test) with ( brackets)";
|
|
728 |
QString searchString = "(";
|
|
729 |
bool caseSensitive = FALSE;
|
|
730 |
bool wholeWord = TRUE;
|
|
731 |
bool forward = FALSE;
|
|
732 |
IntList paragraph;
|
|
733 |
IntList index;
|
|
734 |
paragraph << 1;
|
|
735 |
index << 32;
|
|
736 |
QTest::newRow( "(-noncs-ww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
737 |
}
|
|
738 |
|
|
739 |
{
|
|
740 |
// Check for (this's non case-sensitive whole word backward
|
|
741 |
QString text = "This is (a te)st\nand (this is another test) with (brackets)";
|
|
742 |
QString searchString = "(this";
|
|
743 |
bool caseSensitive = FALSE;
|
|
744 |
bool wholeWord = TRUE;
|
|
745 |
bool forward = FALSE;
|
|
746 |
IntList paragraph;
|
|
747 |
IntList index;
|
|
748 |
paragraph << 1;
|
|
749 |
index << 4;
|
|
750 |
QTest::newRow( "(this-noncs-ww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
751 |
}
|
|
752 |
|
|
753 |
{
|
|
754 |
// Check for (this's non case-sensitive whole word forward
|
|
755 |
QString text = "This is (a te)st\nand (this is another test) with (brackets)";
|
|
756 |
QString searchString = "(this";
|
|
757 |
bool caseSensitive = FALSE;
|
|
758 |
bool wholeWord = TRUE;
|
|
759 |
bool forward = TRUE;
|
|
760 |
IntList paragraph;
|
|
761 |
IntList index;
|
|
762 |
paragraph << 1;
|
|
763 |
index << 4;
|
|
764 |
QTest::newRow( "(this-noncs-ww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
765 |
}
|
|
766 |
|
|
767 |
{
|
|
768 |
// Check for " "'s non case-sensitive non whole word forward
|
|
769 |
QString text = "foo";
|
|
770 |
QString searchString = " ";
|
|
771 |
bool caseSensitive = false;
|
|
772 |
bool wholeWord = false;
|
|
773 |
bool forward = true;
|
|
774 |
IntList paragraph;
|
|
775 |
IntList index;
|
|
776 |
// paragraph << 0 << 1 << 1 << 1;
|
|
777 |
// index << 3 << 0 << 6 << 12;
|
|
778 |
QTest::newRow( " -noncs-nonww-forward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
779 |
}
|
|
780 |
|
|
781 |
{
|
|
782 |
// Check for " "'s non case-sensitive non whole word backward
|
|
783 |
QString text = "foo ";
|
|
784 |
QString searchString = " ";
|
|
785 |
bool caseSensitive = false;
|
|
786 |
bool wholeWord = false;
|
|
787 |
bool forward = false;
|
|
788 |
IntList paragraph;
|
|
789 |
IntList index;
|
|
790 |
paragraph << 0;
|
|
791 |
index << 3;
|
|
792 |
QTest::newRow( " -noncs-nonww-backward" ) << text << searchString << caseSensitive << wholeWord << forward << paragraph << index;
|
|
793 |
}
|
|
794 |
}
|
|
795 |
|
|
796 |
|
|
797 |
void tst_Q3TextEdit::find()
|
|
798 |
{
|
|
799 |
QFETCH( QString, text );
|
|
800 |
QFETCH( QString, searchString );
|
|
801 |
QFETCH( bool, caseSensitive );
|
|
802 |
QFETCH( bool, wholeWord );
|
|
803 |
QFETCH( bool, forward );
|
|
804 |
QFETCH( IntList, paragraph );
|
|
805 |
QFETCH( IntList, index );
|
|
806 |
|
|
807 |
textEdit->clear();
|
|
808 |
textEdit->setTextFormat( Qt::PlainText );
|
|
809 |
textEdit->setText( text );
|
|
810 |
|
|
811 |
IntList::Iterator pIt;
|
|
812 |
IntList::Iterator iIt = index.begin();
|
|
813 |
int paraFound = forward ? 0 : INT_MAX;
|
|
814 |
int indexFound = forward ? 0 : INT_MAX;
|
|
815 |
|
|
816 |
QEXPECT_FAIL(" -noncs-nonww-forward", "Searching for space is broken in Q3TextEdit because of the extra space added at the end of all paragraphs", Abort );
|
|
817 |
QEXPECT_FAIL(" -noncs-nonww-backward", "Searching for space is broken in Q3TextEdit because of the extra space added at the end of all paragraphs", Abort );
|
|
818 |
|
|
819 |
// It should not find anything
|
|
820 |
if ( !paragraph.count() ) {
|
|
821 |
QVERIFY( !textEdit->find( searchString, caseSensitive, wholeWord, forward, ¶Found, &indexFound ) );
|
|
822 |
} else {
|
|
823 |
for ( pIt = paragraph.begin(); pIt != paragraph.end(); ++pIt ) {
|
|
824 |
QVERIFY( textEdit->find( searchString, caseSensitive, wholeWord, forward, ¶Found, &indexFound ) );
|
|
825 |
QCOMPARE( paraFound, (*pIt) );
|
|
826 |
QCOMPARE( indexFound, (*iIt) );
|
|
827 |
|
|
828 |
// This sounds dubious to me, it should search from the next character specified by indexFound
|
|
829 |
if ( forward )
|
|
830 |
indexFound++;
|
|
831 |
else
|
|
832 |
indexFound--;
|
|
833 |
|
|
834 |
++iIt;
|
|
835 |
}
|
|
836 |
}
|
|
837 |
}
|
|
838 |
|
|
839 |
void tst_Q3TextEdit::findSC()
|
|
840 |
{
|
|
841 |
// Special bug case #29649 test
|
|
842 |
textEdit->clear();
|
|
843 |
textEdit->setTextFormat(Qt::PlainText);
|
|
844 |
textEdit->setText("foo do soo boo arg\ndf df foo a;ls lkdf lsdkjf");
|
|
845 |
textEdit->setCursorPosition(1, 16);
|
|
846 |
int paraFound, indexFound;
|
|
847 |
QVERIFY(textEdit->find("foo", FALSE, FALSE, FALSE));
|
|
848 |
textEdit->getCursorPosition(¶Found, &indexFound);
|
|
849 |
QCOMPARE(paraFound, 1);
|
|
850 |
QCOMPARE(indexFound, 6);
|
|
851 |
QVERIFY(textEdit->find("foo", FALSE, FALSE, FALSE));
|
|
852 |
textEdit->getCursorPosition(¶Found, &indexFound);
|
|
853 |
QCOMPARE(paraFound, 0);
|
|
854 |
QCOMPARE(indexFound, 0);
|
|
855 |
QVERIFY(!textEdit->find("foo", FALSE, FALSE, FALSE));
|
|
856 |
QVERIFY(textEdit->find("foo", FALSE, FALSE, FALSE));
|
|
857 |
textEdit->getCursorPosition(¶Found, &indexFound);
|
|
858 |
QCOMPARE(paraFound, 1);
|
|
859 |
QCOMPARE(indexFound, 6);
|
|
860 |
}
|
|
861 |
|
|
862 |
|
|
863 |
|
|
864 |
void tst_Q3TextEdit::findBackwards()
|
|
865 |
{
|
|
866 |
textEdit->clear();
|
|
867 |
textEdit->setTextFormat(Qt::PlainText);
|
|
868 |
textEdit->setText("ABCABCABCABC");
|
|
869 |
textEdit->setCursorPosition(0, 3);
|
|
870 |
QVERIFY(textEdit->find("ABC", FALSE, FALSE, FALSE));
|
|
871 |
QCOMPARE(textEdit->selectedText(), QString("ABC"));
|
|
872 |
int pFrom, pTo, iFrom, iTo;
|
|
873 |
QString qw;
|
|
874 |
|
|
875 |
textEdit->getSelection(&pFrom, &iFrom, &pTo, &iTo);
|
|
876 |
QCOMPARE(pFrom, 0);
|
|
877 |
QCOMPARE(iFrom, 0);
|
|
878 |
QCOMPARE(pTo, 0);
|
|
879 |
QCOMPARE(iTo, 3);
|
|
880 |
}
|
|
881 |
void tst_Q3TextEdit::redoAvailableEmitted( bool t )
|
|
882 |
{
|
|
883 |
redoA = t;
|
|
884 |
}
|
|
885 |
|
|
886 |
void tst_Q3TextEdit::undoAvailableEmitted( bool t )
|
|
887 |
{
|
|
888 |
undoA = t;
|
|
889 |
}
|
|
890 |
|
|
891 |
void tst_Q3TextEdit::copyAvailableEmitted( bool t )
|
|
892 |
{
|
|
893 |
copyA = t;
|
|
894 |
}
|
|
895 |
|
|
896 |
void tst_Q3TextEdit::cut()
|
|
897 |
{
|
|
898 |
connect( textEdit, SIGNAL( copyAvailable(bool) ), this, SLOT( copyAvailableEmitted(bool) ) );
|
|
899 |
copyA = FALSE;
|
|
900 |
textEdit->setText( "I believe that people who are going to commit crimes shouldn't have guns" );
|
|
901 |
textEdit->selectAll();
|
|
902 |
QTest::qWait( 2000 );
|
|
903 |
QVERIFY( copyA );
|
|
904 |
textEdit->cut();
|
|
905 |
QTest::qWait( 2000 );
|
|
906 |
QVERIFY( !copyA );
|
|
907 |
}
|
|
908 |
|
|
909 |
void tst_Q3TextEdit::clear()
|
|
910 |
{
|
|
911 |
// Clear is actually tested all over the place, this is
|
|
912 |
// really just to test for task 21355
|
|
913 |
textEdit->clear();
|
|
914 |
textEdit->setTextFormat( Qt::RichText );
|
|
915 |
textEdit->setText( "<table align=right></table>" );
|
|
916 |
textEdit->clear();
|
|
917 |
// If it got here, then it didn't crash
|
|
918 |
QVERIFY( TRUE );
|
|
919 |
}
|
|
920 |
|
|
921 |
void tst_Q3TextEdit::insert()
|
|
922 |
{
|
|
923 |
Qt::TextFormat fmt = textEdit->textFormat();
|
|
924 |
textEdit->setTextFormat(Qt::LogText);
|
|
925 |
textEdit->setText("<blue>The<red> following: </red><b>fooooooooooooooooooff</b>\nLine <green>Number 2\nLine</green> Number 3");
|
|
926 |
textEdit->insertParagraph("<orange>#orange#</orange>", 1);
|
|
927 |
textEdit->insertAt(" #\nper\nka<blue>ar<yellow>e\nreo</yellow>le</blue># \n", 2, 3 );
|
|
928 |
textEdit->insertAt("\n#<b>o</b><i>l</i><u>e</u>#\n\n", 100, 100);
|
|
929 |
textEdit->insertAt("<u>#o\nle#</u>", 0, 10);
|
|
930 |
QString result = "<blue>The<red> follow<u>#o\nle#</u>ing: </red><b>fooooooooooooooooooff</b>\n<orange>#orange#</orange>\n"
|
|
931 |
"Lin #\nper\nka<blue>ar<yellow>e\nreo</yellow>le</blue># \ne <green>Number 2\nLine</green> Number 3\n"
|
|
932 |
"#<b>o</b><i>l</i><u>e</u>#\n\n\n";
|
|
933 |
QCOMPARE(textEdit->text(), result);
|
|
934 |
textEdit->setTextFormat(fmt);
|
|
935 |
}
|
|
936 |
|
|
937 |
void tst_Q3TextEdit::keyClicks_data()
|
|
938 |
{
|
|
939 |
QTest::addColumn<QString>("inputString");
|
|
940 |
|
|
941 |
QTest::newRow("English") << "This is not a sentence.";
|
|
942 |
QTest::newRow("Norwegian") << "\x0e6\x0f8\x0e5\x0c6\x0d8\x0c5 er norske bokstaver.";
|
|
943 |
}
|
|
944 |
|
|
945 |
void tst_Q3TextEdit::keyClicks()
|
|
946 |
{
|
|
947 |
QFETCH(QString, inputString);
|
|
948 |
|
|
949 |
textEdit->clear();
|
|
950 |
textEdit->setTextFormat(Qt::PlainText);
|
|
951 |
textEdit->setReadOnly(false);
|
|
952 |
|
|
953 |
QVERIFY(textEdit->text().isEmpty());
|
|
954 |
QTest::keyClicks(textEdit, inputString);
|
|
955 |
QCOMPARE(textEdit->text(), inputString);
|
|
956 |
}
|
|
957 |
|
|
958 |
|
|
959 |
|
|
960 |
void tst_Q3TextEdit::selectAll()
|
|
961 |
{
|
|
962 |
QString testString = "This is test for task #24092";
|
|
963 |
textEdit->setText( testString );
|
|
964 |
|
|
965 |
textEdit->setTextFormat(Qt::PlainText);
|
|
966 |
textEdit->selectAll(TRUE);
|
|
967 |
QVERIFY( textEdit->hasSelectedText() );
|
|
968 |
textEdit->selectAll(FALSE);
|
|
969 |
QVERIFY( !textEdit->hasSelectedText() );
|
|
970 |
|
|
971 |
textEdit->setTextFormat(Qt::RichText);
|
|
972 |
textEdit->selectAll(TRUE);
|
|
973 |
QVERIFY( textEdit->hasSelectedText() );
|
|
974 |
textEdit->selectAll(FALSE);
|
|
975 |
QVERIFY( !textEdit->hasSelectedText() );
|
|
976 |
textEdit->setTextFormat(Qt::LogText);
|
|
977 |
textEdit->selectAll(TRUE);
|
|
978 |
QVERIFY( textEdit->hasSelectedText() );
|
|
979 |
textEdit->selectAll(FALSE);
|
|
980 |
QVERIFY( !textEdit->hasSelectedText() );
|
|
981 |
}
|
|
982 |
|
|
983 |
void tst_Q3TextEdit::setCurrentFont()
|
|
984 |
{
|
|
985 |
textEdit->clear();
|
|
986 |
textEdit->setTextFormat(Qt::LogText);
|
|
987 |
textEdit->setCurrentFont(QFont("Courier New", 9));
|
|
988 |
textEdit->setText("Just some dummy text");
|
|
989 |
QCOMPARE(textEdit->text(), QString("Just some dummy text\n"));
|
|
990 |
}
|
|
991 |
|
|
992 |
void tst_Q3TextEdit::undoRedo()
|
|
993 |
{
|
|
994 |
Q3TextEdit edit;
|
|
995 |
edit.setTextFormat(Qt::PlainText);
|
|
996 |
|
|
997 |
QString deftext("Just some text");
|
|
998 |
edit.setText(deftext);
|
|
999 |
edit.insertAt("<tag>",0, 5);
|
|
1000 |
QCOMPARE(edit.text(), QString("Just <tag>some text"));
|
|
1001 |
edit.undo();
|
|
1002 |
QCOMPARE(edit.text(), deftext);
|
|
1003 |
edit.insertAt("<tag>",0, 5);
|
|
1004 |
edit.insertAt("</tag>",0, 14);
|
|
1005 |
QCOMPARE(edit.text(), QString("Just <tag>some</tag> text"));
|
|
1006 |
edit.undo();
|
|
1007 |
QCOMPARE(edit.text(), QString("Just <tag>some text"));
|
|
1008 |
edit.undo();
|
|
1009 |
QCOMPARE(edit.text(), QString("Just some text"));
|
|
1010 |
edit.insertAt("<tag>",0, 5);
|
|
1011 |
edit.insertAt("</tag>",0, 10);
|
|
1012 |
QCOMPARE(edit.text(), QString("Just <tag></tag>some text"));
|
|
1013 |
edit.undo();
|
|
1014 |
QCOMPARE(edit.text(), QString("Just some text"));
|
|
1015 |
}
|
|
1016 |
|
|
1017 |
void tst_Q3TextEdit::length_data()
|
|
1018 |
{
|
|
1019 |
// The expected length values are based on what is returned in Qt 3.2.1.
|
|
1020 |
// We don't want the semantics of this function to change again, no
|
|
1021 |
// matter how broken it is, so if this function fails, the test data has to be seen as
|
|
1022 |
// correct. In Qt 4.0, this function will not exist in this form.
|
|
1023 |
|
|
1024 |
QTest::addColumn<int>("textFormat");
|
|
1025 |
QTest::addColumn<QString>("text");
|
|
1026 |
QTest::addColumn<int>("expectedLength");
|
|
1027 |
|
|
1028 |
QTest::newRow("plainText") << int(Qt::PlainText) << "This is a test" << 14;
|
|
1029 |
QTest::newRow("plainTextNewLines") << int(Qt::PlainText) << "This is a test\nThis is a test\nThis is a test" << 44;
|
|
1030 |
QTest::newRow("logText") << int(Qt::LogText) << "This is a test" << 14;
|
|
1031 |
QTest::newRow("logTextNewLines") << int(Qt::LogText) << "This is a test\nThis is a test\nThis is a test" << 42;
|
|
1032 |
QTest::newRow("logTextTags") << int(Qt::LogText) << "<b>This is a test</b>" << 14;
|
|
1033 |
QTest::newRow("logTextTagsNewLines") << int(Qt::LogText) << "<b>This is a test\nThis is a test\nThis is a test</b>" << 42;
|
|
1034 |
QTest::newRow("richText") << int(Qt::RichText) << "This is a test" << 14;
|
|
1035 |
QTest::newRow("richTextNewLines") << int(Qt::RichText) << "This is a test\nThis is a test\nThis is a test" << 44;
|
|
1036 |
QTest::newRow("richTextTags") << int(Qt::RichText) << "<b>This is a test</b>" << 14;
|
|
1037 |
}
|
|
1038 |
|
|
1039 |
void tst_Q3TextEdit::length()
|
|
1040 |
{
|
|
1041 |
QFETCH(int, textFormat);
|
|
1042 |
QFETCH(QString, text);
|
|
1043 |
QFETCH(int, expectedLength);
|
|
1044 |
|
|
1045 |
textEdit->setTextFormat((Qt::TextFormat)textFormat);
|
|
1046 |
textEdit->setText(text);
|
|
1047 |
QCOMPARE(textEdit->length(), expectedLength);
|
|
1048 |
}
|
|
1049 |
|
|
1050 |
void tst_Q3TextEdit::getSelection_data()
|
|
1051 |
{
|
|
1052 |
QTest::addColumn<int>("textFormat");
|
|
1053 |
QTest::addColumn<QString>("text");
|
|
1054 |
|
|
1055 |
QTest::addColumn<int>("paragFrom");
|
|
1056 |
QTest::addColumn<int>("indexFrom");
|
|
1057 |
QTest::addColumn<int>("paragTo");
|
|
1058 |
QTest::addColumn<int>("indexTo");
|
|
1059 |
|
|
1060 |
QTest::addColumn<int>("selParagFrom");
|
|
1061 |
QTest::addColumn<int>("selIndexFrom");
|
|
1062 |
QTest::addColumn<int>("selParagTo");
|
|
1063 |
QTest::addColumn<int>("selIndexTo");
|
|
1064 |
|
|
1065 |
QTest::newRow("plainText") << int(Qt::PlainText) << "This is a test" << 0 << 0 << 0 << 2 << 0 << 0 << 0 << 2;
|
|
1066 |
QTest::newRow("richText") << int(Qt::RichText) << "This is a test" << 0 << 0 << 0 << 2 << 0 << 0 << 0 << 2;
|
|
1067 |
QTest::newRow("logText") << int(Qt::LogText) << "This is a test" << 0 << 0 << 0 << 2 << 0 << 0 << 0 << 2;
|
|
1068 |
}
|
|
1069 |
|
|
1070 |
void tst_Q3TextEdit::getSelection()
|
|
1071 |
{
|
|
1072 |
QFETCH(int, textFormat);
|
|
1073 |
QFETCH(QString, text);
|
|
1074 |
|
|
1075 |
QFETCH(int, paragFrom);
|
|
1076 |
QFETCH(int, indexFrom);
|
|
1077 |
QFETCH(int, paragTo);
|
|
1078 |
QFETCH(int, indexTo);
|
|
1079 |
|
|
1080 |
QFETCH(int, selParagFrom);
|
|
1081 |
QFETCH(int, selIndexFrom);
|
|
1082 |
QFETCH(int, selParagTo);
|
|
1083 |
QFETCH(int, selIndexTo);
|
|
1084 |
|
|
1085 |
int pFr, iFr, pTo, iTo;
|
|
1086 |
textEdit->setText(text);
|
|
1087 |
textEdit->setTextFormat((Qt::TextFormat)textFormat);
|
|
1088 |
textEdit->setSelection(paragFrom, indexFrom, paragTo, indexTo);
|
|
1089 |
textEdit->getSelection(&pFr, &iFr, &pTo, &iTo);
|
|
1090 |
|
|
1091 |
QCOMPARE(pFr, selParagFrom);
|
|
1092 |
QCOMPARE(iFr, selIndexFrom);
|
|
1093 |
QCOMPARE(pTo, selParagTo);
|
|
1094 |
QCOMPARE(iTo, selIndexTo);
|
|
1095 |
}
|
|
1096 |
|
|
1097 |
void tst_Q3TextEdit::anchorTest()
|
|
1098 |
{
|
|
1099 |
// This is from task 57709
|
|
1100 |
Q3TextEdit edit;
|
|
1101 |
QString richText = "<p dir=\"ltr\"><a name=\"Gold\"></a>something</p>\n"
|
|
1102 |
"<p dir=\"ltr\"><a name=\"Silver\"></a>more"
|
|
1103 |
"<a name=\"Bronze\"></a>stuff</p>\n";
|
|
1104 |
edit.setText(richText);
|
|
1105 |
|
|
1106 |
QString expected = "<html><head><meta name=\"qrichtext\" content=\"1\" /></head>"
|
|
1107 |
"<body style=\"font-size:%1pt;font-family:%2\">\n"
|
|
1108 |
+ richText + "</body></html>\n";
|
|
1109 |
QFont f = edit.font();
|
|
1110 |
expected = expected.arg(f.pointSize()).arg(f.family());
|
|
1111 |
QCOMPARE(edit.text(),expected);
|
|
1112 |
}
|
|
1113 |
|
|
1114 |
QTEST_MAIN(tst_Q3TextEdit)
|
|
1115 |
#include "tst_q3textedit.moc"
|
|
1116 |
|