diff options
| -rw-r--r-- | src/quick/items/qquicktextdocument.cpp | 6 | ||||
| -rw-r--r-- | tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp | 22 |
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); |
