diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-03-11 14:10:04 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-03-11 14:17:32 +0100 |
commit | 2ab205b70e1000217882125dd392dae41de1a346 (patch) | |
tree | 1f9905aa8e4618fdb6af72dbd95838fb0d93022d | |
parent | a1b14f7b3561c1f8ed34a16c9bebc666df112385 (diff) | |
download | qutebrowser-2ab205b70e1000217882125dd392dae41de1a346.tar.gz qutebrowser-2ab205b70e1000217882125dd392dae41de1a346.zip |
Improve tests for importlib
-rw-r--r-- | tests/unit/utils/test_version.py | 53 |
1 files changed, 42 insertions, 11 deletions
diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index 886d50c91..b7da60011 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -1076,18 +1076,34 @@ class TestChromiumVersion: import_fake.patch() @pytest.fixture - def patch_importlib_no_package(self, monkeypatch): - """Simulate importlib not finding PyQtWebEngine-Qt.""" - try: - import importlib.metadata as importlib_metadata - except ImportError: - importlib_metadata = pytest.importorskip("importlib_metadata") - - def _fake_version(name): - assert name == 'PyQtWebEngine-Qt' - raise importlib_metadata.PackageNotFoundError(name) + def importlib_patcher(self, monkeypatch): + """Patch the importlib module.""" + def _patch(*, qt, qt5): + try: + import importlib.metadata as importlib_metadata + except ImportError: + importlib_metadata = pytest.importorskip("importlib_metadata") + + def _fake_version(name): + if name == 'PyQtWebEngine-Qt': + outcome = qt + elif name == 'PyQtWebEngine-Qt5': + outcome = qt5 + else: + raise utils.Unreachable(outcome) + + if outcome is None: + raise importlib_metadata.PackageNotFoundError(name) + return outcome + + monkeypatch.setattr(importlib_metadata, 'version', _fake_version) + + return _patch - monkeypatch.setattr(importlib_metadata, 'version', _fake_version) + @pytest.fixture + def patch_importlib_no_package(self, importlib_patcher): + """Simulate importlib not finding PyQtWebEngine-Qt[5].""" + importlib_patcher(qt=None, qt5=None) @pytest.mark.parametrize('patches, sources', [ (['elf_fail'], ['importlib', 'PyQt', 'Qt']), @@ -1111,6 +1127,21 @@ class TestChromiumVersion: versions = version.qtwebengine_versions(avoid_init=True) assert versions.source in sources + @pytest.mark.parametrize('qt, qt5, expected', [ + (None, '5.15.4', utils.VersionNumber(5, 15, 4)), + ('5.15.3', None, utils.VersionNumber(5, 15, 3)), + ('5.15.3', '5.15.4', utils.VersionNumber(5, 15, 4)), # -Qt5 takes precedence + ]) + def test_importlib(self, qt, qt5, expected, patch_elf_fail, importlib_patcher): + """Test the importlib version logic with different Qt packages. + + With PyQtWebEngine 5.15.4, PyQtWebEngine-Qt was renamed to PyQtWebEngine-Qt5. + """ + importlib_patcher(qt=qt, qt5=qt5) + versions = version.qtwebengine_versions(avoid_init=True) + assert versions.source == 'importlib' + assert versions.webengine == expected + @dataclasses.dataclass class VersionParams: |