summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2021-03-27 12:29:24 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-03-30 08:31:21 +0000
commit5e838e979ead8bbd1ae40c89f4774971b4913031 (patch)
tree27a9825157ff850263620976cea7654be46f5774 /tests
parent516316e9a24fc3a290ce220a9a6cda0af541ca4c (diff)
Replace QTextDocumentResourceProvider with a std::function
376e3bd8ecf40881685714f6f19e12d68e92127e added the new class for Qt 6.1, but during header review we concluded that using a class introduces complexity wrt instance ownership and API design that can be avoided by using a std::function instead. The functionality is tied to QTextDocument, so the type definition and the default provider API is added there. Since std::function is not trivially copyable, the atomicity of the previous implementation is not maintained, and concurrent modifications of and access to the global default provider from multiple threads is not allowed. The relevant use case can be supported by implementing a resource provider that is thread safe. Task-number: QTBUG-90211 Fixes: QTBUG-92208 Change-Id: I39215c5e51c7bd27f1dd29e1d9d908aecf754fb7 Reviewed-by: Kai Koehne <kai.koehne@qt.io> (cherry picked from commit ccf1a1a9536be7b904494f5b3243202d71a33b06) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp48
-rw-r--r--tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp28
2 files changed, 41 insertions, 35 deletions
diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
index 0e2765922c..a0489e287c 100644
--- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
+++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
@@ -47,7 +47,6 @@
#include <qimage.h>
#include <qtextlayout.h>
#include <QDomDocument>
-#include <qtextdocumentresourceprovider.h>
#include "common.h"
// #define DEBUG_WRITE_OUTPUT
@@ -3596,27 +3595,40 @@ void tst_QTextDocument::clearUndoRedoStacks()
QVERIFY(!doc.isUndoAvailable());
}
-class UrlResourceProvider : public QTextDocumentResourceProvider
+void tst_QTextDocument::resourceProvider()
{
-public:
- QVariant resource(const QUrl &url) override
- {
- resourseUrl = url;
- return QVariant();
- }
- QUrl resourseUrl;
-};
+ int providerCalled = 0;
+ QUrl providerUrl;
+ auto provider = [&](const QUrl &url){
+ providerUrl = url;
+ ++providerCalled;
+ return QVariant(42);
+ };
+ const QUrl url("test://img");
+ const QString html = QLatin1String("<img src='%1'/>").arg(url.toString());
-void tst_QTextDocument::resourceProvider()
-{
QTextDocument doc;
- UrlResourceProvider resourceProvider;
- doc.setResourceProvider(&resourceProvider);
- QUrl url("test://img");
- doc.setHtml(QStringLiteral("<img src='%1'/>").arg(url.toString()));
- doc.resource(QTextDocument::UserResource, url);
- QCOMPARE(url, resourceProvider.resourseUrl);
+ QVERIFY(!doc.resourceProvider());
+ doc.setResourceProvider(provider);
+ QVERIFY(doc.resourceProvider());
+
+ doc.setHtml(html);
+ const QVariant res = doc.resource(QTextDocument::UserResource, url);
+ QVERIFY(res.isValid());
+ QCOMPARE(providerUrl, url);
+ QCOMPARE(providerCalled, 1);
+
+ QVERIFY(!QTextDocument::defaultResourceProvider());
+ QTextDocument::setDefaultResourceProvider(provider);
+ QVERIFY(QTextDocument::defaultResourceProvider());
+
+ QTextDocument doc2;
+ QVERIFY(!doc2.resourceProvider());
+ doc2.setHtml(html);
+ QVariant res2 = doc2.resource(QTextDocument::UserResource, url);
+ QCOMPARE(res2, res);
+ QCOMPARE(providerCalled, 2);
}
QTEST_MAIN(tst_QTextDocument)
diff --git a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
index e4e9d12fb4..c9e71d8388 100644
--- a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
+++ b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
@@ -40,7 +40,6 @@
#include <qmessagebox.h>
#include <qfontmetrics.h>
#include <qmath.h>
-#include <qtextdocumentresourceprovider.h>
#include <private/qlabel_p.h>
class Widget : public QWidget
@@ -599,27 +598,22 @@ void tst_QLabel::taskQTBUG_48157_dprMovie()
QCOMPARE(label.sizeHint(), movie.currentPixmap().size() / movie.currentPixmap().devicePixelRatio());
}
-class UrlResourceProvider : public QTextDocumentResourceProvider
-{
-public:
- QVariant resource(const QUrl &url) override
- {
- resourseUrl = url;
- return QVariant();
- }
-
- QUrl resourseUrl;
-};
-
void tst_QLabel::resourceProvider()
{
QLabel label;
- UrlResourceProvider resourceProvider;
- label.setResourceProvider(&resourceProvider);
- QUrl url("test://img");
+ int providerCalled = 0;
+ QUrl providerUrl;
+ label.setResourceProvider([&](const QUrl &url){
+ providerUrl = url;
+ ++providerCalled;
+ return QVariant();
+ });
+
+ const QUrl url("test://img");
label.setText(QStringLiteral("<img src='%1'/>").arg(url.toString()));
label.show();
- QCOMPARE(url, resourceProvider.resourseUrl);
+ QCOMPARE(providerUrl, url);
+ QVERIFY(providerCalled > 0);
}
QTEST_MAIN(tst_QLabel)