aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquicktextdocument.cpp6
-rw-r--r--tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp22
2 files changed, 15 insertions, 13 deletions
diff --git a/src/quick/items/qquicktextdocument.cpp b/src/quick/items/qquicktextdocument.cpp
index 96f4daaaec..cde6ad0d10 100644
--- a/src/quick/items/qquicktextdocument.cpp
+++ b/src/quick/items/qquicktextdocument.cpp
@@ -137,14 +137,16 @@ void QQuickTextDocument::setModified(bool modified)
void QQuickTextDocumentPrivate::load()
{
Q_Q(QQuickTextDocument);
- const QString fileName = QQmlFile::urlToLocalFileOrQrc(url);
+ const QQmlContext *context = qmlContext(editor);
+ const QUrl &resolvedUrl = context ? context->resolvedUrl(url) : url;
+ const QString fileName = QQmlFile::urlToLocalFileOrQrc(resolvedUrl);
if (QFile::exists(fileName)) {
mimeType = QMimeDatabase().mimeTypeForFile(fileName);
QFile file(fileName);
if (file.open(QFile::ReadOnly)) {
QByteArray data = file.readAll();
if (auto *doc = editor->document()) {
- doc->setBaseUrl(url.adjusted(QUrl::RemoveFilename));
+ doc->setBaseUrl(resolvedUrl.adjusted(QUrl::RemoveFilename));
if (mimeType.inherits("text/markdown"_L1)) {
doc->setMarkdown(QString::fromUtf8(data));
} else if (mimeType.inherits("text/html"_L1)) {
diff --git a/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp b/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
index 1d5175e1c8..e54c35442c 100644
--- a/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
+++ b/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
@@ -156,7 +156,7 @@ void tst_qquicktextdocument::customDocument()
void tst_qquicktextdocument::sourceAndSave_data()
{
- QTest::addColumn<QUrl>("source");
+ QTest::addColumn<QString>("source");
QTest::addColumn<std::optional<QStringConverter::Encoding>>("expectedEncoding");
QTest::addColumn<QString>("expectedMimeType");
QTest::addColumn<int>("minCharCount");
@@ -164,34 +164,33 @@ void tst_qquicktextdocument::sourceAndSave_data()
const std::optional<QStringConverter::Encoding> nullEnc;
- QTest::newRow("plain") << testFileUrl("hello.txt")
+ QTest::newRow("plain") << "hello.txt"
<< nullEnc << "text/plain" << 15 << u"Γειά σου Κόσμε!"_s;
- QTest::newRow("markdown") << testFileUrl("hello.md")
+ QTest::newRow("markdown") << "hello.md"
<< nullEnc << "text/markdown" << 15 << u"Γειά σου Κόσμε!"_s;
- QTest::newRow("html") << testFileUrl("hello.html")
+ QTest::newRow("html") << "hello.html"
<< std::optional<QStringConverter::Encoding>(QStringConverter::Utf8)
<< "text/html" << 15 << u"Γειά σου Κόσμε!"_s;
- QTest::newRow("html-utf16be") << testFileUrl("hello-utf16be.html")
+ QTest::newRow("html-utf16be") << "hello-utf16be.html"
<< std::optional<QStringConverter::Encoding>(QStringConverter::Utf16BE)
<< "text/html" << 15 << u"Γειά σου Κόσμε!"_s;
}
void tst_qquicktextdocument::sourceAndSave()
{
- QFETCH(QUrl, source);
+ QFETCH(QString, source);
QFETCH(std::optional<QStringConverter::Encoding>, expectedEncoding);
QFETCH(QString, expectedMimeType);
QFETCH(int, minCharCount);
QFETCH(QString, expectedPlainText);
- QVERIFY(source.isLocalFile());
-
QQmlEngine e;
QQmlComponent c(&e, testFileUrl("text.qml"));
QScopedPointer<QQuickTextEdit> textEdit(qobject_cast<QQuickTextEdit*>(c.create()));
QCOMPARE(textEdit.isNull(), false);
QQuickTextDocument *qqdoc = textEdit->property("textDocument").value<QQuickTextDocument*>();
QVERIFY(qqdoc);
+ const QQmlContext *ctxt = e.rootContext();
// text.qml has text: "" but that's not a real change; QQuickTextEdit::setText() returns early
// QQuickTextEditPrivate::init() also modifies defaults and then resets the modified state
QCOMPARE(qqdoc->isModified(), false);
@@ -205,11 +204,12 @@ void tst_qquicktextdocument::sourceAndSave()
QTemporaryDir tmpDir;
QVERIFY(tmpDir.isValid());
- QFile sf(QQmlFile::urlToLocalFileOrQrc(source));
+ QFile sf(QQmlFile::urlToLocalFileOrQrc(ctxt->resolvedUrl(testFileUrl(source))));
+ qCDebug(lcTests) << source << "orig ->" << sf.fileName();
QVERIFY(sf.exists());
- QString tmpPath = tmpDir.filePath(source.fileName());
+ QString tmpPath = tmpDir.filePath(source);
QVERIFY(sf.copy(tmpPath));
- qCDebug(lcTests) << source << "->" << tmpDir.path() << ":" << tmpPath;
+ qCDebug(lcTests) << source << "copy ->" << tmpDir.path() << ":" << tmpPath;
qqdoc->setProperty("source", QUrl::fromLocalFile(tmpPath));
QCOMPARE(sourceChangedSpy.size(), 1);