summaryrefslogtreecommitdiffstats
path: root/kutils/tests/kfindtest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kutils/tests/kfindtest.cpp')
-rw-r--r--kutils/tests/kfindtest.cpp252
1 files changed, 252 insertions, 0 deletions
diff --git a/kutils/tests/kfindtest.cpp b/kutils/tests/kfindtest.cpp
new file mode 100644
index 000000000..17e8da7ee
--- /dev/null
+++ b/kutils/tests/kfindtest.cpp
@@ -0,0 +1,252 @@
+/*
+ Copyright (C) 2004, Arend van Beelen jr. <arend@auton.nl>
+ This file is part of the KDE project
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2, as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "../kfind.h"
+#include "../kfinddialog.h"
+#include "kfindtest.h"
+
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kdebug.h>
+
+#include <stdlib.h>
+#include <assert.h>
+
+static bool check(QString txt, QString a, QString b) // from kurltest
+{
+ if (a.isEmpty())
+ a = QString::null;
+ if (b.isEmpty())
+ b = QString::null;
+ if (a == b) {
+ kdDebug() << txt << " : checking '" << a << "' against expected value '" << b << "'... " << "ok" << endl;
+ }
+ else {
+ kdDebug() << txt << " : checking '" << a << "' against expected value '" << b << "'... " << "KO !" << endl;
+ exit(1);
+ }
+ return true;
+}
+
+void KFindTest::changeText(uint line, const QString &text)
+{
+ Q_ASSERT(line < m_text.count());
+ Q_ASSERT(m_find != 0);
+
+ m_line = line;
+ m_text[line] = text;
+ m_find->setData(line, text);
+}
+
+void KFindTest::find(const QString &pattern, long options)
+{
+ delete m_find;
+ m_find = new KFind(pattern, options, 0);
+
+ connect(m_find, SIGNAL(highlight(const QString &, int, int)),
+ SLOT(slotHighlight(const QString &, int, int)));
+ connect(m_find, SIGNAL(highlight(int, int, int)),
+ SLOT(slotHighlight(int, int, int)));
+
+ m_line = 0;
+ KFind::Result result = KFind::NoMatch;
+ do
+ {
+ if(options & KFindDialog::FindIncremental)
+ m_find->setData(m_line, m_text[m_line]);
+ else
+ m_find->setData(m_text[m_line]);
+
+ m_line++;
+
+ result = m_find->find();
+ } while(result == KFind::NoMatch && m_line < m_text.count());
+}
+
+void KFindTest::findNext(const QString &pattern)
+{
+ Q_ASSERT(m_find != 0);
+
+ if(!pattern.isNull())
+ {
+ m_find->setPattern(pattern);
+ }
+
+ KFind::Result result = KFind::NoMatch;
+ do
+ {
+ //kdDebug() << "m_line: " << m_line << endl;
+
+ result = m_find->find();
+
+ if(result == KFind::NoMatch && m_line < m_text.count())
+ {
+ //kdDebug() << "incrementing m_line..." << endl;
+ if(m_find->options() & KFindDialog::FindIncremental)
+ m_find->setData(m_line, m_text[m_line]);
+ else
+ m_find->setData(m_text[m_line]);
+
+ m_line++;
+ }
+ } while(result == KFind::NoMatch && m_line < m_text.count());
+ //kdDebug() << "find next completed" << m_line << endl;
+}
+
+void KFindTest::slotHighlight(const QString &text, int index, int matchedLength)
+{
+ m_hits.append("line: \"" + text + "\", index: " + QString::number(index) +
+ ", length: " + QString::number(matchedLength) + "\n");
+}
+
+void KFindTest::slotHighlight(int id, int index, int matchedLength)
+{
+ m_hits.append("line: \"" + m_text[id] + "\", index: " + QString::number(index) +
+ ", length: " + QString::number(matchedLength) + "\n");
+}
+
+int main(int argc, char **argv)
+{
+ KCmdLineArgs::init(argc, argv, "kfindtest", "KFindTest", 0, 0, false);
+ KApplication app;
+
+ QString text = "This file is part of the KDE project.\n"
+ "This library is free software; you can redistribute it and/or\n"
+ "modify it under the terms of the GNU Library General Public\n"
+ "License version 2, as published by the Free Software Foundation.\n"
+ "\n"
+ " This library is distributed in the hope that it will be useful,\n"
+ " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+ " Library General Public License for more details.\n"
+ "\n"
+ " You should have received a copy of the GNU Library General Public License\n"
+ " along with this library; see the file COPYING.LIB. If not, write to\n"
+ " the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
+ " Boston, MA 02110-1301, USA.\n";
+
+ QString output1 = "line: \"This file is part of the KDE project.\", index: 0, length: 4\n"
+ "line: \"This library is free software; you can redistribute it and/or\", index: 0, length: 4\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 4, length: 4\n"
+ "line: \" along with this library; see the file COPYING.LIB. If not, write to\", index: 15, length: 4\n";
+
+ QString output2 = "line: \"This file is part of the KDE project.\", index: 0, length: 0\n"
+ "line: \"This file is part of the KDE project.\", index: 2, length: 1\n"
+ "line: \"This file is part of the KDE project.\", index: 2, length: 2\n"
+ "line: \"This library is free software; you can redistribute it and/or\", index: 42, length: 3\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 21, length: 3\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 21, length: 5\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 21, length: 4\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 21, length: 3\n"
+ "line: \"This file is part of the KDE project.\", index: 2, length: 2\n"
+ "line: \"This library is free software; you can redistribute it and/or\", index: 25, length: 1\n"
+ "line: \"This library is free software; you can redistribute it and/or\", index: 25, length: 2\n"
+ "line: \" but WITHOUT ANY WARRANTY; without even the implied warranty of\", index: 20, length: 8\n"
+ "line: \"This library is free software; you can redistribute it and/or\", index: 16, length: 4\n"
+ "line: \"License version 2, as published by the Free Software Foundation.\", index: 44, length: 19\n";
+
+ QString output3 = "line: \"This file is part of the KDE project.\", index: 0, length: 0\n"
+ "line: \"This file is part of the KDE project.\", index: 2, length: 1\n"
+ "line: \"This file is part of the KDE project.\", index: 2, length: 2\n"
+ "line: \"This library is free software; you can redistribute it and/or\", index: 42, length: 3\n"
+ "line: \"This library is free software; you can redistribute it and/or\", index: 42, length: 4\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 21, length: 4\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 21, length: 5\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 21, length: 4\n"
+ "line: \" This library is distributed in the hope that it will be useful,\", index: 21, length: 3\n"
+ "line: \"This file is part of the KDE project.\", index: 2, length: 2\n"
+ "line: \"This file is part of the KDE project.\", index: 2, length: 1\n"
+ "line: \"The second line now looks a whole lot different.\", index: 18, length: 1\n"
+ "line: \"License version 2, as published by the Free Software Foundation.\", index: 48, length: 2\n"
+ "line: \" but WITHOUT ANY WARRANTY; without even the implied warranty of\", index: 20, length: 8\n"
+ "line: \" but WITHOUT ANY xxxx; without even the implied warranty of\", index: 51, length: 6\n"
+ "line: \"License version 2, as published by the Free Software Foundation.\", index: 39, length: 4\n"
+ "line: \"License version 2, as published by the Free Software Foundation.\", index: 44, length: 19\n";
+
+ KFindTest *test = new KFindTest(QStringList::split('\n', text, true));
+
+ kdDebug() << "Plain static search..." << endl;
+
+ // first we do a simple text searching the text and doing a few find nexts
+ test->find("This", 0);
+ test->findNext();
+ test->findNext();
+ test->findNext();
+ test->findNext();
+ test->findNext();
+
+ check("result", test->hits().join(""), output1);
+ test->clearHits();
+ kdDebug() << "PASSED" << endl;
+
+ kdDebug() << "FindIncremental with static contents..." << endl;
+
+ // now we'll do some searches using FindIncremental
+ test->find("", KFindDialog::FindIncremental);
+ test->findNext("i");
+ test->findNext("is");
+ test->findNext("ist");
+ test->findNext();
+ test->findNext("istri");
+ test->findNext("istr");
+ test->findNext("ist");
+ test->findNext("is");
+ test->findNext("W");
+ test->findNext("WA");
+ test->findNext("WARRANTY");
+ test->findNext("Free");
+ test->findNext("Software Foundation");
+
+ check("result", test->hits().join(""), output2);
+ test->clearHits();
+ kdDebug() << "PASSED" << endl;
+
+ kdDebug() << "FindIncremental with dynamic contents..." << endl;
+
+ // now do that again but with pages that change between searches
+ test->find("", KFindDialog::FindIncremental);
+ test->findNext("i");
+ test->findNext("is");
+ test->findNext("ist");
+ test->findNext("istr");
+ test->findNext();
+ test->changeText(1, "The second line now looks a whole lot different.");
+ test->findNext("istri");
+ test->findNext("istr");
+ test->findNext("ist");
+ test->findNext("is");
+ test->findNext("i");
+ test->findNext("W");
+ test->findNext("WA");
+ test->findNext("WARRANTY");
+ test->changeText(6, " but WITHOUT ANY xxxx; without even the implied warranty of");
+ test->findNext("WARRAN");
+ test->findNext("Free");
+ test->findNext("Software Foundation");
+
+ check("result", test->hits().join(""), output3);
+ test->clearHits();
+ kdDebug() << "PASSED" << endl;
+
+ //return app.exec();
+ delete test;
+ return 0;
+}
+
+#include "kfindtest.moc"