tests: Avoid accessing Qt statics at import time

With a Qt 6.7 developer build, the tests fail with:

    ASSERT failure in QtGlobalStatic::ApplicationHolder<QAS>::PlainType*
    QtGlobalStatic::ApplicationHolder<QAS>::pointer() [with QAS =
    {anonymous}::Q_QAS_qtlsbLoader; PlainType = QFactoryLoader]: "The
    application static was used without a QCoreApplication instance", file
    .../qtbase/src/corelib/kernel/qapplicationstatic.h, line 54

    Fatal Python error: Aborted

    [...]

    Current thread 0x00007c18bb3f3740 (most recent call first):
    File ".../tests/unit/browser/webkit/test_certificateerror.py", line 23 in <module>

See https://codereview.qt-project.org/c/qt/qtbase/+/495239
This commit is contained in:
Florian Bruhin 2024-03-25 17:25:32 +01:00
parent 01f4807eaf
commit ad3ba9fe84
2 changed files with 19 additions and 18 deletions

View File

@ -18,15 +18,15 @@ class FakeError:
return self.msg
@pytest.mark.parametrize('errors, expected', [
@pytest.mark.parametrize('error_factories, expected', [
(
[QSslError(QSslError.SslError.UnableToGetIssuerCertificate)],
[lambda: QSslError(QSslError.SslError.UnableToGetIssuerCertificate)],
['<p>The issuer certificate could not be found</p>'],
),
(
[
QSslError(QSslError.SslError.UnableToGetIssuerCertificate),
QSslError(QSslError.SslError.UnableToDecryptCertificateSignature),
lambda: QSslError(QSslError.SslError.UnableToGetIssuerCertificate),
lambda: QSslError(QSslError.SslError.UnableToDecryptCertificateSignature),
],
[
'<ul>',
@ -37,13 +37,13 @@ class FakeError:
),
(
[FakeError('Escaping test: <>')],
[lambda: FakeError('Escaping test: <>')],
['<p>Escaping test: &lt;&gt;</p>'],
),
(
[
FakeError('Escaping test 1: <>'),
FakeError('Escaping test 2: <>'),
lambda: FakeError('Escaping test 1: <>'),
lambda: FakeError('Escaping test 2: <>'),
],
[
'<ul>',
@ -53,8 +53,9 @@ class FakeError:
],
),
])
def test_html(stubs, errors, expected):
def test_html(stubs, error_factories, expected):
reply = stubs.FakeNetworkReply(url=QUrl("https://example.com"))
errors = [factory() for factory in error_factories]
wrapper = certificateerror.CertificateErrorWrapper(reply=reply, errors=errors)
lines = [line.strip() for line in wrapper.html().splitlines() if line.strip()]
assert lines == expected

View File

@ -1874,24 +1874,24 @@ class TestProxy:
def klass(self):
return configtypes.Proxy
@pytest.mark.parametrize('val, expected', [
('system', configtypes.SYSTEM_PROXY),
('none', QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)),
@pytest.mark.parametrize('val, expected_factory', [
('system', lambda: configtypes.SYSTEM_PROXY),
('none', lambda: QNetworkProxy(QNetworkProxy.ProxyType.NoProxy)),
('socks://example.com/',
QNetworkProxy(QNetworkProxy.ProxyType.Socks5Proxy, 'example.com')),
lambda: QNetworkProxy(QNetworkProxy.ProxyType.Socks5Proxy, 'example.com')),
('socks5://foo:bar@example.com:2323',
QNetworkProxy(QNetworkProxy.ProxyType.Socks5Proxy, 'example.com', 2323,
'foo', 'bar')),
lambda: QNetworkProxy(
QNetworkProxy.ProxyType.Socks5Proxy, 'example.com', 2323, 'foo', 'bar')),
('pac+http://example.com/proxy.pac',
pac.PACFetcher(QUrl('pac+http://example.com/proxy.pac'))),
lambda: pac.PACFetcher(QUrl('pac+http://example.com/proxy.pac'))),
('pac+file:///tmp/proxy.pac',
pac.PACFetcher(QUrl('pac+file:///tmp/proxy.pac'))),
lambda: pac.PACFetcher(QUrl('pac+file:///tmp/proxy.pac'))),
])
def test_to_py_valid(self, klass, val, expected):
def test_to_py_valid(self, klass, val, expected_factory):
actual = klass().to_py(val)
if isinstance(actual, QNetworkProxy):
actual = QNetworkProxy(actual)
assert actual == expected
assert actual == expected_factory()
@pytest.mark.parametrize('val', [
'blah',