From ad3ba9fe84166d0c8fe5de59be5f0fc27a251a35 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 25 Mar 2024 17:25:32 +0100 Subject: tests: Avoid accessing Qt statics at import time With a Qt 6.7 developer build, the tests fail with: ASSERT failure in QtGlobalStatic::ApplicationHolder::PlainType* QtGlobalStatic::ApplicationHolder::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 See https://codereview.qt-project.org/c/qt/qtbase/+/495239 --- tests/unit/browser/webkit/test_certificateerror.py | 17 +++++++++-------- tests/unit/config/test_configtypes.py | 20 ++++++++++---------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/tests/unit/browser/webkit/test_certificateerror.py b/tests/unit/browser/webkit/test_certificateerror.py index 2feb7dcf1..7f5cce9c6 100644 --- a/tests/unit/browser/webkit/test_certificateerror.py +++ b/tests/unit/browser/webkit/test_certificateerror.py @@ -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)], ['

The issuer certificate could not be found

'], ), ( [ - QSslError(QSslError.SslError.UnableToGetIssuerCertificate), - QSslError(QSslError.SslError.UnableToDecryptCertificateSignature), + lambda: QSslError(QSslError.SslError.UnableToGetIssuerCertificate), + lambda: QSslError(QSslError.SslError.UnableToDecryptCertificateSignature), ], [ '
    ', @@ -37,13 +37,13 @@ class FakeError: ), ( - [FakeError('Escaping test: <>')], + [lambda: FakeError('Escaping test: <>')], ['

    Escaping test: <>

    '], ), ( [ - FakeError('Escaping test 1: <>'), - FakeError('Escaping test 2: <>'), + lambda: FakeError('Escaping test 1: <>'), + lambda: FakeError('Escaping test 2: <>'), ], [ '
      ', @@ -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 diff --git a/tests/unit/config/test_configtypes.py b/tests/unit/config/test_configtypes.py index d908e3ac6..bcd257ed7 100644 --- a/tests/unit/config/test_configtypes.py +++ b/tests/unit/config/test_configtypes.py @@ -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', -- cgit v1.2.3-54-g00ecf