summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/text/qtextdocument.cpp6
-rw-r--r--tests/benchmarks/gui/text/qtextdocument/main.cpp71
-rw-r--r--tests/benchmarks/gui/text/qtextdocument/qtextdocument.pro7
-rw-r--r--tests/benchmarks/gui/text/text.pro3
4 files changed, 83 insertions, 4 deletions
diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp
index a3dbf455cf..75899dec80 100644
--- a/src/gui/text/qtextdocument.cpp
+++ b/src/gui/text/qtextdocument.cpp
@@ -94,7 +94,7 @@ bool Qt::mightBeRichText(const QString& text)
++start;
// skip a leading <?xml ... ?> as for example with xhtml
- if (text.mid(start, 5) == QLatin1String("<?xml")) {
+ if (text.midRef(start, 5).compare(QLatin1String("<?xml")) == 0) {
while (start < text.length()) {
if (text.at(start) == QLatin1Char('?')
&& start + 2 < text.length()
@@ -109,12 +109,12 @@ bool Qt::mightBeRichText(const QString& text)
++start;
}
- if (text.mid(start, 5).toLower() == QLatin1String("<!doc"))
+ if (text.midRef(start, 5).compare(QLatin1String("<!doc"), Qt::CaseInsensitive) == 0)
return true;
int open = start;
while (open < text.length() && text.at(open) != QLatin1Char('<')
&& text.at(open) != QLatin1Char('\n')) {
- if (text.at(open) == QLatin1Char('&') && text.mid(open+1,3) == QLatin1String("lt;"))
+ if (text.at(open) == QLatin1Char('&') && text.midRef(open + 1, 3) == QLatin1String("lt;"))
return true; // support desperate attempt of user to see <...>
++open;
}
diff --git a/tests/benchmarks/gui/text/qtextdocument/main.cpp b/tests/benchmarks/gui/text/qtextdocument/main.cpp
new file mode 100644
index 0000000000..17fee3b2eb
--- /dev/null
+++ b/tests/benchmarks/gui/text/qtextdocument/main.cpp
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Robin Burchell <robin.burchell@viroteck.net>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+#include <QTextDocument>
+#include <qtest.h>
+
+class tst_QTextDocument : public QObject
+{
+ Q_OBJECT
+private slots:
+ void mightBeRichText_data();
+ void mightBeRichText();
+};
+
+void tst_QTextDocument::mightBeRichText_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<bool>("isMaybeRichText");
+ QTest::newRow("empty") << QString() << false;
+ QTest::newRow("simple") << QString::fromLatin1("<html><b>Foo</b></html>") << true;
+ QTest::newRow("simple2") << QString::fromLatin1("<b>Foo</b>") << true;
+ QTest::newRow("documentation-header") << QString("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"
+ "<!DOCTYPE html\n"
+ " PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN\" \"DTD/xhtml1-strict.dtd\">\n"
+ "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">")
+ << true;
+ QTest::newRow("br-nospace") << QString("Test <br/> new line") << true;
+ QTest::newRow("br-space") << QString("Test <br /> new line") << true;
+ QTest::newRow("br-invalidspace") << QString("Test <br/ > new line") << false;
+ QTest::newRow("invalid closing tag") << QString("Test <br/ line") << false;
+ QTest::newRow("no tags") << QString("Test line") << false;
+}
+
+void tst_QTextDocument::mightBeRichText()
+{
+ QFETCH(QString, source);
+ QFETCH(bool, isMaybeRichText);
+ QBENCHMARK {
+ QCOMPARE(isMaybeRichText, Qt::mightBeRichText(source));
+ }
+}
+
+QTEST_MAIN(tst_QTextDocument)
+
+#include "main.moc"
diff --git a/tests/benchmarks/gui/text/qtextdocument/qtextdocument.pro b/tests/benchmarks/gui/text/qtextdocument/qtextdocument.pro
new file mode 100644
index 0000000000..67cef8b25c
--- /dev/null
+++ b/tests/benchmarks/gui/text/qtextdocument/qtextdocument.pro
@@ -0,0 +1,7 @@
+QT += testlib
+QT += gui-private
+
+TEMPLATE = app
+TARGET = tst_bench_QTextDocument
+
+SOURCES += main.cpp
diff --git a/tests/benchmarks/gui/text/text.pro b/tests/benchmarks/gui/text/text.pro
index 34e548b4d3..6dc4f5d16e 100644
--- a/tests/benchmarks/gui/text/text.pro
+++ b/tests/benchmarks/gui/text/text.pro
@@ -1,4 +1,5 @@
TEMPLATE = subdirs
SUBDIRS = \
qfontmetrics \
- qtext
+ qtext \
+ qtextdocument