Revision control

Copy as Markdown

// Copyright (C) 2026 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QSignalSpy>
#include <QtTest/QtTest>
#include <QtWebView/qwebview.h>
#include <QtWebView/qwebviewloadinginfo.h>
#include <QtWebView/private/qwebviewfactory_p.h>
using namespace Qt::StringLiterals;
class TestWebView : public QWebView {
public:
QSignalSpy urlSpy = QSignalSpy(this, SIGNAL(urlChanged(QUrl)));
QSignalSpy loadingSpy = QSignalSpy(this, SIGNAL(loadingChanged(QWebViewLoadingInfo)));
};
class tst_WebViewQrc : public QObject
{
Q_OBJECT
private slots:
void initTestCase();
void loadQrc();
void urlWithPrefix();
void followRelativeLink();
void followAbsoluteLink();
void javaScriptNavigation();
void iframe();
};
void tst_WebViewQrc::initTestCase()
{
if (QWebViewFactory::loadedPluginHasKey("wasm"))
QSKIP("qrc support not available for this backend.");
}
void tst_WebViewQrc::loadQrc()
{
TestWebView webView;
webView.setUrl(QUrl("qrc://html/success.html"_L1));
QTRY_COMPARE(webView.loadingSpy.size(), 2);
QCOMPARE(webView.title(), "Success"_L1);
}
void tst_WebViewQrc::urlWithPrefix()
{
TestWebView webView;
webView.setUrl(QUrl("qrc://html/prefix/success.html"_L1));
QTRY_COMPARE(webView.loadingSpy.size(), 2);
QCOMPARE(webView.title(), "Success!!!!"_L1);
}
void tst_WebViewQrc::followRelativeLink()
{
TestWebView webView;
webView.setUrl(QUrl("qrc://html/link.html"_L1));
QTRY_COMPARE(webView.loadingSpy.size(), 2);
webView.runJavaScript("document.getElementById('relative').click();");
QTRY_COMPARE(webView.loadingSpy.size(), 4);
QCOMPARE(webView.title(), "Success!!!!"_L1);
}
void tst_WebViewQrc::followAbsoluteLink()
{
TestWebView webView;
webView.setUrl(QUrl("qrc://html/link.html"_L1));
QTRY_COMPARE(webView.loadingSpy.size(), 2);
webView.runJavaScript("document.getElementById('absolute').click();");
QTRY_COMPARE(webView.loadingSpy.size(), 4);
QCOMPARE(webView.title(), "Success"_L1);
}
void tst_WebViewQrc::javaScriptNavigation()
{
TestWebView webView;
webView.setUrl(QUrl("qrc://html/link.html"_L1));
QTRY_COMPARE(webView.loadingSpy.size(), 2);
webView.runJavaScript("window.location = 'success.html';");
QTRY_COMPARE(webView.loadingSpy.size(), 4);
QCOMPARE(webView.title(), "Success"_L1);
webView.runJavaScript("window.location.replace('qrc://html/prefix/success.html');");
QTRY_COMPARE(webView.loadingSpy.size(), 6);
QCOMPARE(webView.title(), "Success!!!!"_L1);
}
void tst_WebViewQrc::iframe()
{
TestWebView webView;
webView.setUrl(QUrl("qrc://html/iframe.html"_L1));
QTRY_COMPARE(webView.loadingSpy.size(), 2);
bool finished = false;
webView.runJavaScript("document.getElementById('frame').contentDocument.title", [&](QVariant result) {
QCOMPARE(result.toString(), "Success");
finished = true;
});
QTRY_VERIFY(finished);
}
QTEST_MAIN(tst_WebViewQrc)
#include "tst_webviewqrc.moc"